У меня есть сервер, на котором есть 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-ам включены.



