Форвардинг ipv6 через openvpn?

Привет.



Объясните, пожалуйста, как должен работать форвардинг для ipv6?



Есть сервер с поднятым openvpn, который клиентам во внутреннюю сеть раздает ipv6 адреса.

server-ipv6 2001:1af8:4101:4::/64.



Есть внешний интерфейс eth0 с внешним ipv6 адресом.

<br>
eth0      Link encap:Ethernet  HWaddr 06:d9:70:00:11:10<br>
          inet addr:82.XXX.YYY.211  Bcast:82.XXX.YYY.255  Mask:255.255.255.128<br>
          inet6 addr: fe80::4d9:70ff:fe00:1110/64 Scope:Link<br>
          inet6 addr: 2001:1af8:4101:XXXX:4::1100/64 Scope:Global<br>
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br>
          RX packets:96539 errors:0 dropped:0 overruns:0 frame:0<br>
          TX packets:22744 errors:0 dropped:0 overruns:0 carrier:0<br>
          collisions:0 txqueuelen:1000<br>
          RX bytes:63114723 (63.1 MB)  TX bytes:6530149 (6.5 MB)<br>




Внутренний интерфейс:

<br>
tap0      Link encap:Ethernet  HWaddr c6:00:92:85:6f:cc<br>
          inet addr:10.8.0.1  Bcast:10.8.0.255  Mask:255.255.255.0<br>
          inet6 addr: fe80::c400:92ff:fe85:6fcc/64 Scope:Link<br>
          inet6 addr: 2001:1af8:4101:4::1/64 Scope:Global<br>
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br>
          RX packets:11593 errors:0 dropped:0 overruns:0 frame:0<br>
          TX packets:8301 errors:0 dropped:0 overruns:0 carrier:0<br>
          collisions:0 txqueuelen:100<br>
          RX bytes:1660846 (1.6 MB)  TX bytes:3887267 (3.8 MB)<br>




Настроены правила в ip6tables:

<br>
# ip6tables -L FORWARD<br>
Chain FORWARD (policy ACCEPT)<br>
target     prot opt source               destination<br>
ACCEPT     all      anywhere             anywhere<br>




На клиентах указывается gateway для ipv6 — 2001:1af8:4101:4::1 (адрес сервера во внутренней сети).



В такой схеме:

1) на клиенте работает ping6 2001:1af8:4101:4::1.

2) на сервере работает ping6 ipv6.google.com

3) на клиенте НЕ работает ping6 ipv6.google.com



Цель: сделать так, чтобы клиенты openvpn ходили во внешний интернет через ipv6-адрес сервера. Т.е., сделать так, чтоы ping6 ipv6.google.com работал.



Правильно я понимаю, что нужно сделать так, чтобы все пакеты, приходящие на внутренний интерфейс сервера, отправлялись на вшений, а ответы заворачивались обратно на внутренний? Как это сделать?

Либо нужно на клиентах какие-то маршруты донастроить?
  • Вопрос задан
  • 4833 просмотра
Пригласить эксперта
Ответы на вопрос 2
merlin-vrn
@merlin-vrn
на клиенте вам нужно маршрут route -6 add default via <server>

ну или в конфиге openvpn: push «route ::/0», как-то так.

Проверять — на клиенте ip route get <ipv6-адрес>, в ответе должен быть next-hop — ваш openvpn-сервер
Ответ написан
anton_slim
@anton_slim
web разработчик
Я разобрался в чем проблема, у меня была ситуация аналогичная вашей.
Сеть /48 выданная провайдером на мой сервер, была назначена интерфейсу на маршрутизаторе провайдера, то есть раздавать ip адреса дальше своего сервера я не мог.
Правильно было сделать point-to-point сеть для стыка например /64, через которую смаршрутизировать /48 на ipv6 адрес моего сервера.

То есть провайдер выдал мне ipv6 2A00:1C48:x:xxx::5/64, GW 2A00:1C48:x:xxx::1
и смаршрутизировал подсеть 2A00:1C48:zzz::/48 на мой ip 2A00:1C48:x:xxx::5

Теперь я могу нарезать сеть 2A00:1C48:zzz::/48 на любые куски и маршрутизировать куда надо.
Все ip видят друг друга (в том числе за openvpn), благодаря net.ipv6.conf.all.forwarding=1

Если ваш провайдер не сможет вам такое сделать, тогда придется сделать nat маскировку (так у меня и работало).

ip6tables -t nat -A POSTROUTING -s "${SUBNET_PREFIX}/${TARGET_CIDR}" -o $INTERFACE -j MASQUERADE

где $SUBNET_PREFIX/$TARGET_CIDR = ваша ipv6 сеть,
$INTERFACE = eth0 (к примеру)

в этом случае все ipv6 клиентов будут заменяться на ipv6 сервера, то есть все внутренние ipv6 замаскируются.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы