У меня есть сервер, на котором есть IPv6 адрес, по идее к нему роутится /64 подсеть. На нём стоит OpenVPN. Сейчас работает по стандартной схеме — выдаёт клиенту внутренний IPv4 адрес, который через NAT имеет доступ к интернету.
Я хочу помимо этого выдавать клиенту IPv6 адрес из подсети, чтобы был доступ к IPv6 интернету (и из этого интернета можно было соединяться к клиенту).
По https://community.openvpn.net/openvpn/wiki/IPv6 я сделал настройки (по сути пара строчек). Клиент может пинговать IPv6-адрес сервера. Сервер может пинговать клиента. Но клиент не пингует внешние адреса. В pf.conf я убрал все запрещающие правила.
Через tcpdump на vio0 (основной сетевой интерфейс) я вижу, как пинги уходят с исходным адресом VPN-клиента, но ответа на них не приходит. Если пингую от сервера, то вижу и пинги и ответы.
Т.е. у меня сейчас подозрение, что роутер провайдера не отсылает ответы на пинги на мой хост, хотя адрес находится в моей /64 подсети. Я в IPv6 к сожалению мало что понимаю, но у меня такое ощущение, что не работает правильно neighbor discovery, а именно: роутер провайдера спрашивает: «кто такой (IPv6 адрес VPN-клиента)?», а ему ничего не отвечают. Зато когда он спрашивает: «кто такой (IPv6 адрес VPN-сервера)?», сервер сразу откликается, мол я это. Прикладываю немного tcpdump-а.
Адрес сервера a00:d880:6:856::dbc9 Адрес шлюза 2a00:d880:6::1 (да, он находится не в /64 сети, поэтому сеть настроена как /48, хотя роутится только /64 подсеть). Для VPN выделена подсеть 2a00:d880:6:856:8000::/65 Адрес VPN-клиента: 2a00:d880:6:856:8000::1000
~ # tcpdump -ne -i vio0 | grep 2a00:d880:6:856
tcpdump: listening on vio0, link-type EN10MB
# вот это запросы, на которые мой сервер почему-то не отвечает
09:04:06.506300 00:12:f2:92:b8:00 33:33:ff:00:10:00 86dd 86: fe80::212:f2ff:fe92:b800 > ff02::1:ff00:1000: icmp6: neighbor sol: who has 2a00:d880:6:856:8000::1000 [class 0xc0]
09:04:07.601027 00:12:f2:92:b8:00 33:33:ff:00:10:00 86dd 86: fe80::212:f2ff:fe92:b800 > ff02::1:ff00:1000: icmp6: neighbor sol: who has 2a00:d880:6:856:8000::1000 [class 0xc0]
09:04:08.601993 00:12:f2:92:b8:00 33:33:ff:00:10:00 86dd 86: fe80::212:f2ff:fe92:b800 > ff02::1:ff00:1000: icmp6: neighbor sol: who has 2a00:d880:6:856:8000::1000 [class 0xc0]
# а вот это запросы, на которые он отвечает
09:04:11.660352 00:12:f2:92:b8:00 00:16:3c:07:45:df 86dd 86: 2a00:d880:6::1 > 2a00:d880:6:856::dbc9: icmp6: neighbor sol: who has 2a00:d880:6:856::dbc9 [class 0xc0]
09:04:11.660579 00:16:3c:07:45:df 00:12:f2:92:b8:00 86dd 78: 2a00:d880:6:856::dbc9 > 2a00:d880:6::1: icmp6: neighbor adv: tgt is 2a00:d880:6:856::dbc9
# а это уже роутер отвечает
09:04:16.660508 00:16:3c:07:45:df 00:12:f2:92:b8:00 86dd 86: 2a00:d880:6:856::dbc9 > 2a00:d880:6::1: icmp6: neighbor sol: who has 2a00:d880:6::1
09:04:16.681187 00:12:f2:92:b8:00 00:16:3c:07:45:df 86dd 86: 2a00:d880:6::1 > 2a00:d880:6:856::dbc9: icmp6: neighbor adv: tgt is 2a00:d880:6::1 [class 0xc0]
# и так далее
Не знаю, что значит следующая команда, но вывод у неё такой:
~ # ndp -an
Neighbor Linklayer Address Netif Expire S Flags
2a00:d880:6::1 00:12:f2:92:b8:00 vio0 23h55m53s S R
2a00:d880:6:856::dbc9 00:16:3c:07:45:df vio0 permanent R l
2a00:d880:6:856:8000::1 00:16:3c:07:45:df vio0 permanent I
fe80::216:3cff:fe07:45df%vio0 00:16:3c:07:45:df vio0 permanent R l
Относящийся к делу кусок конфига OpenVPN-а
server-ipv6 2a00:d880:6:856:8000::/65
push "route-ipv6 2000::/3"
ifconfig и таблица роутинга
~ # ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 32768
priority: 0
groups: lo
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
vio0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:16:3c:07:45:df
priority: 0
groups: egress
media: Ethernet autoselect
status: active
inet 185.52.2.208 netmask 0xffffff00 broadcast 185.52.2.255
inet6 fe80::216:3cff:fe07:45df%vio0 prefixlen 64 scopeid 0x1
inet6 2a00:d880:6:856::dbc9 prefixlen 48
enc0: flags=0<>
priority: 0
groups: enc
status: active
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33192
priority: 0
groups: pflog
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
priority: 0
groups: tun
status: active
inet 10.3.83.1 --> 10.3.83.1 netmask 0xffffff00
inet6 fe80::216:3cff:fe07:45df%tun0 -> prefixlen 64 scopeid 0x8
inet6 2a00:d880:6:856:8000::1 -> prefixlen 65
~ # netstat -rn
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
default 185.52.2.1 UGS 6 362607 - 8 vio0
10.3.83/24 10.3.83.1 UGS 0 15160 - 8 tun0
10.3.83.1 10.3.83.1 UHl 1 0 - 1 lo0
10.3.83.1 10.3.83.1 UH 0 0 - 8 tun0
127/8 127.0.0.1 UGRS 0 0 32768 8 lo0
127.0.0.1 127.0.0.1 UHl 2 59 32768 1 lo0
185.52.2/24 185.52.2.208 UC 1 0 - 8 vio0
185.52.2.1 00:12:f2:92:b8:00 UHLc 1 0 - 8 vio0
185.52.2.208 00:16:3c:07:45:df UHLl 0 0 - 1 lo0
185.52.2.255 185.52.2.208 UHb 0 0 - 1 vio0
224/4 127.0.0.1 URS 0 0 32768 8 lo0
Internet6:
Destination Gateway Flags Refs Use Mtu Prio Iface
::/104 ::1 UGRS 0 0 32768 8 lo0
::/96 ::1 UGRS 0 0 32768 8 lo0
default 2a00:d880:6::1 UGS 0 157 - 8 vio0
::1 ::1 UHl 14 0 32768 1 lo0
::127.0.0.0/104 ::1 UGRS 0 0 32768 8 lo0
::224.0.0.0/100 ::1 UGRS 0 0 32768 8 lo0
::255.0.0.0/104 ::1 UGRS 0 0 32768 8 lo0
::ffff:0.0.0.0/96 ::1 UGRS 0 0 32768 8 lo0
2002::/24 ::1 UGRS 0 0 32768 8 lo0
2002:7f00::/24 ::1 UGRS 0 0 32768 8 lo0
2002:e000::/20 ::1 UGRS 0 0 32768 8 lo0
2002:ff00::/24 ::1 UGRS 0 0 32768 8 lo0
2a00:d880:6::/48 fe80::216:3cff:fe07:45df%vio0 UC 1 0 - 4 vio0
2a00:d880:6::1 00:12:f2:92:b8:00 UHLc 1 164 - 4 vio0
2a00:d880:6:856::dbc9 00:16:3c:07:45:df UHLl 1 0 - 1 lo0
2a00:d880:6:856:8000::/65 fe80::216:3cff:fe07:45df%tun0 U 3 1019 - 4 tun0
2a00:d880:6:856:8000::/65 2a00:d880:6:856:8000::1 UGS 0 0 - 8 tun0
2a00:d880:6:856:8000::1 00:16:3c:07:45:df UHL 1 0 - 4 vio0
fe80::/10 ::1 UGRS 0 0 32768 8 lo0
fe80::%vio0/64 fe80::216:3cff:fe07:45df%vio0 UC 0 0 - 4 vio0
fe80::216:3cff:fe07:45df%vio0 00:16:3c:07:45:df UHLl 0 0 - 1 lo0
fe80::%lo0/64 fe80::1%lo0 U 0 0 32768 4 lo0
fe80::1%lo0 fe80::1%lo0 UHl 0 0 32768 1 lo0
fe80::%tun0/64 fe80::216:3cff:fe07:45df%tun0 U 0 0 - 4 tun0
fe80::216:3cff:fe07:45df%tun0 fe80::216:3cff:fe07:45df%tun0 UHl 0 0 - 1 lo0
fec0::/10 ::1 UGRS 0 0 32768 8 lo0
ff01::/16 ::1 UGRS 3 0 32768 8 lo0
ff01::%vio0/32 fe80::216:3cff:fe07:45df%vio0 UC 0 0 - 4 vio0
ff01::%lo0/32 ::1 UC 0 0 32768 4 lo0
ff01::%tun0/32 fe80::216:3cff:fe07:45df%tun0 UC 0 0 - 4 tun0
ff02::/16 ::1 UGRS 3 0 32768 8 lo0
ff02::%vio0/32 fe80::216:3cff:fe07:45df%vio0 UC 0 0 - 4 vio0
ff02::%lo0/32 ::1 UC 0 0 32768 4 lo0
ff02::%tun0/32 fe80::216:3cff:fe07:45df%tun0 UC 0 0 - 4 tun0
Всякие sysctl-ы, относящиеся к ipv6 forward-ам включены.