Форвардинг 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 работал.



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

Либо нужно на клиентах какие-то маршруты донастроить?
  • Вопрос задан
  • 4932 просмотра
Пригласить эксперта
Ответы на вопрос 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 замаскируются.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы