LINUX.ORG.RU
ФорумAdmin

OpenVPN, туннелирование IPv6, OpenBSD

 , ,


0

4

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

★★★★★

Есть подозрение, что мне нужно настроить некий ndp proxy. Пробовал это делать командой

ndp -s 2a00:d880:6:856:8000::1000 00:16:3c:07:45:df proxy

После этого в выводе ndp -an начала появляться ошибка:

~ # ndp -an
Neighbor                             Linklayer Address  Netif Expire    S Flags
2a00:d880:6::1                       00:12:f2:92:b8:00   vio0 16s       R R
2a00:d880:6:856::dbc9                00:16:3c:07:45:df   vio0 permanent R l
ndp: ioctl(SIOCGNBRINFO_IN6): Invalid argument
ndp: failed to get neighbor information
2a00:d880:6:856:8000::1000           00:16:3c:07:45:df   tun0   p
fe80::216:3cff:fe07:45df%vio0        00:16:3c:07:45:df   vio0 permanent R l

других изменений не произошло

Legioner ★★★★★
() автор топика

Мне тоже интересно. Подписался на тему.

MrClon ★★★★★
()
Ответ на: комментарий от Legioner

все верно, тебе надо заставить сервер отвечать на neighbor solicitation для 2a00:d880:6:856:8000::1000, и по идее ndp -s proxy делает именно это. ошибка конечно странная, относится скорее всего к 2a00:d880:6:856:8000::1, потрейси вот так: ktrace ndp -an; kdump | less +/ioctl чтобы подтвердить/опровергнуть и возможно понять почему.

про npd -s proxy видел репорт что оно поломанно в 5.8 и возможно и раньше, видел коммиты в карренте на эту тему. ты на чем? воспроизводится ли на последнем снапшоте? сетап у тебя вроде как правильный должно работать. если на снапшоте не работает, пиши в миск, а может сразу @shenson'у, тут тебе никто не поможет.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

все верно, тебе надо заставить сервер отвечать на neighbor solicitation для 2a00:d880:6:856:8000::1000, и по идее ndp -s proxy делает именно это.

Для того, чтобы сервер отвечал — не надо никаких дополнительных демонов запускать? Т.е. этот функционал уже работает в ядре? На свой-то адрес он отвечает, а вот эта прокси по-моему не совсем работает.

ошибка конечно странная, относится скорее всего к 2a00:d880:6:856:8000::1

Не понял. Адрес у клиента именно 1000. xxx::1 это вроде адрес сервера внутри впна, его мне вроде как никуда не надо писать.

потрейси вот так: ktrace ndp -an; kdump | less +/ioctl чтобы подтвердить/опровергнуть и возможно понять почему.

Покопаюсь, спасибо.

про npd -s proxy видел репорт что оно поломанно в 5.8 и возможно и раньше, видел коммиты в карренте на эту тему. ты на чем?

5.8

воспроизводится ли на последнем снапшоте?

Этого не скажу. Апдейты у меня бинарные с stable.mtier.org, что прилетело, то и стоит. uname говорит OpenBSD 5.8 GENERIC#1 i386. На компиляторы-сборку я не уверен, что хватит места и ресурсов.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

Для того, чтобы сервер отвечал — не надо никаких дополнительных демонов запускать?

по идее надо, и называется он radvd

anonymous
()
Ответ на: комментарий от Legioner

На компиляторы-сборку я не уверен, что хватит места и ресурсов.

снапшоты тоже бинарные, на них апгрейдится как на новый релиз, ничего компилять не надо. можешь конечно и так зарепортить, у тебя 5.8-STABLE получается, но если есть возможность затести снапшот тоже: качаешь сеты с любого миррора например http://mirror.ox.ac.uk/pub/OpenBSD/snapshots/amd64/, грузишься с bsd.rd оттуда, апгрейдишься, как обычно. это если нет желания с исошкой играться.

Не понял. Адрес у клиента именно 1000. xxx::1 это вроде адрес сервера внутри впна, его мне вроде как никуда не надо писать.

да. извини, если запутал — я просто хотел сказать что ошибка скорее всего относится не к новой записи которую ты (успешно) добавил, а, как ни странно, именно к *::1.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

да. извини, если запутал — я просто хотел сказать что ошибка скорее всего относится не к новой записи которую ты (успешно) добавил, а, как ни странно, именно к *::1.

Ошибка появляется, когда я добавляю 2a00:d880:6:856:8000::1000 и исчезает, когда я убираю 2a00:d880:6:856:8000::1000.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от val-amart

неверно. на ndp отвечает ядро.

точнее, на Neighbor Solicitation (Type 135). radvd работает с RS/RA (Type 133/134). по идее, это уже делает openvpn (хотя я не силен в опенвпн'е, не использовал его ниразу). в любом случае, аннаунсить себя как роутер надо в tun0 для клиента, а тут проблема с другой стороны.

val-amart ★★★★★
()
Ответ на: комментарий от Legioner

прикольно. понять бы еще что она значит. небыло времени внимательно читнуть сорса, но по беглому взгляду не уяснил, и в документации не вижу.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

Я смотрю Вы хорошо разбираетесь в этом. Не могли бы дать совет по поводу vpn сервиса. Каким Вы пользуетесь (если пользуетесь) и вообще какой из современных нормальный. Я сейчас выбираю между finevpn.org и ip-rent.net. Слышали о таких?

goldentravel
()
Ответ на: комментарий от goldentravel

увы, не слышал, не пользуюсь, сорри. у меня пара серверов по миру с OpenBSD и его родным iked, коннекчюсь через них когда надо.

val-amart ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.