LINUX.ORG.RU
решено ФорумAdmin

Белый IPv6 адрес OpenVPN клиенту

 


2

2

В очередной раз пытаюсь настроить сабж. Сервер — свежеустановленный Debian. На сервере вроде бы есть /64 подсеть, по крайней мере на нём ping6 работает. Клиент соединяется, получает ожидаемый IPv6 адрес. Он может пинговать сервер, но вот пинговать что-нибудь за пределами сервера уже не получается. OpenVPN-у выделил /112 подсеть, чтобы он её раздавал клиентам.

#/etc/openvpn/server.conf
topology subnet
client-to-client
server-ipv6 2a00:d880:6:856::1:0/112
push "route-ipv6 2000::/3"

# server
$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:16:3c:07:45:df  
          inet6 addr: 2a00:d880:6:856::dbc9/48 Scope:Global
          inet6 addr: fe80::216:3cff:fe07:45df/64 Scope:Link

$ ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet6 addr: 2a00:d880:6:856::1:1/112 Scope:Global

$ route -6
route -6
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
::1/128                        ::                         U    256 0     0 lo
2a00:d880:6:856::1:0/112       ::                         U    256 1     0 tun0
2a00:d880:6::/48               ::                         U    256 0     1 eth0
fe80::/64                      ::                         U    256 0     0 eth0
::/0                           2a00:d880:6::1             UG   1024 0     0 eth0
::/0                           ::                         !n   -1  1  3169 lo
::1/128                        ::                         Un   0   1   109 lo
2a00:d880:6::/128              ::                         Un   0   1     0 lo
2a00:d880:6:856::dbc9/128      ::                         Un   0   2    23 lo
2a00:d880:6:856::1:0/128       ::                         Un   0   1     0 lo
2a00:d880:6:856::1:1/128       ::                         Un   0   1     0 lo
fe80::/128                     ::                         Un   0   1     0 lo
fe80::216:3cff:fe07:45df/128   ::                         Un   0   1     0 lo
ff00::/8                       ::                         U    256 9     0 eth0
ff00::/8                       ::                         U    256 0     0 tun0
::/0                           ::                         !n   -1  1  3169 lo

пытался через tcpdump понять, что происходит, не очень понял, но вроде бы на tun0 приходит ICMP6 echo запрос и тут уже уходит ответ destination host unreachable, причём почему-то 3 раза.

★★★★★

Ответ на: комментарий от anc

Даже если это и ваша ошибка, то все равно вам нужно разделять вашу сеть /64 как минимум на две части /65 и соответственно раздавать адреса 1. eth 2. vpn

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

Я не могу разделить на 65, потому что тогда gateway будет не в сети и вообще ничего не будет работать. Сейчас так:

# /etc/network/interfaces
iface eth0 inet6 static
	address 2a00:d880:6:856::dbc9
	netmask 48
	gateway 2a00:d880:6::1

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

Как предположение, написать хостеру, что нужено разделение сети, может как раз еще одну нормальную /64 выделят, тогда и меньше проблем будет с клиентами которые не понимают меньше /64

anc ★★★★★ ()
#sysctl.conf
net.ipv6.conf.all.proxy_ndp=1
net.ipv6.conf.all.forwarding=1

Пока нашёл следующие закономерности. Трафик слушаю tcpdump -i eth0 -n -l icmp6|grep 2a00:d880:6:856:

Если изначально ничего не делать, то при ping6 2001:4860:4860::8888 эти пакеты на интерфейс eth0 вообще не выходят. На tun0 видны запросы и ответы. При этом показывает так:

$ ip -6 neigh 
2a00:d880:6::1 dev eth0  router FAILED

Если с сервера сделать ping6 2001:4860:4860::8888, то tcpdump-ом видно следующее:

20:54:05.905394 IP6 2a00:d880:6:856::dbc9 > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has 2a00:d880:6::1, length 32
20:54:05.925045 IP6 2a00:d880:6::1 > 2a00:d880:6:856::dbc9: ICMP6, neighbor advertisement, tgt is 2a00:d880:6::1, length 32
20:54:05.925069 IP6 2a00:d880:6:856::dbc9 > 2001:4860:4860::8888: ICMP6, echo request, seq 1, length 64
20:54:05.938890 IP6 2001:4860:4860::8888 > 2a00:d880:6:856::dbc9: ICMP6, echo reply, seq 1, length 64
20:54:06.907708 IP6 2a00:d880:6:856::dbc9 > 2001:4860:4860::8888: ICMP6, echo request, seq 2, length 64
20:54:06.913379 IP6 2001:4860:4860::8888 > 2a00:d880:6:856::dbc9: ICMP6, echo reply, seq 2, length 64

после этого меняется на такое:

$ ip -6 neigh 
2a00:d880:6::1 dev eth0 lladdr 00:12:f2:92:b8:00 router REACHABLE

и при пинге с клиента пакеты начинают уходить в eth0, но ответов либо каких-то neighbor solicitation от гейтвея нет.

20:54:17.687301 IP6 2a00:d880:6:856::1:1001 > 2a00:d880:6::1: ICMP6, echo request, seq 0, length 16
20:54:18.668829 IP6 2a00:d880:6:856::1:1001 > 2a00:d880:6::1: ICMP6, echo request, seq 1, length 16

при этом через некоторое время опять переходит в FAILED и пакеты опять перестают уходить через eth0. ip neigh add proxy 2a00:d880:6:856::1:1001 dev eth0 делал, абсолютно никакого эффекта.

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

Ну блина.... У вас сеть /48 на eth0, на tun0 вы вешаете из Этой сети кусок /112 - вопрос знатокам при получении пакетов снаружи на eth0 на ком закончиться получение пакетов для «куска /112»?
Роутинг что у ipv4 что у ipv6 вообще-то одинаков.

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

Пакеты с сервера на клиент, например, идут нормально (пинги и тд), так что с роутингом проблем нет. 2a00:d880:6:856::1:0/112 стоит выше в таблице роутинга, поэтому пакеты уходят туда в первую очередь. А пакеты снаружи на eth0 вообще не доходят, в том-то и беда. Ну или по крайней мере я их не вижу, что очень странно, вроде tcpdump должен всё ловить.

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

так что с роутингом проблем нет.

Еще раз, с роутингом проблемы есть. Вот смотрите, у вас 192.168.0.0/16 на eth0 поднимаем 192.168.0.1/16 на tun 192.168.17.1/24. Вот как сети между ними будут общаться?

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

Роутинг перекрывающихся сетей можно реализовать уменьшением метрики вложенной подсети при условии отсутствия коллизий по адресам хостов.

ArcFi ()

В общем похоже это кривой роутер у провайдера. Я в конце концов докопался до того, что определил, что роутер не отвечае на свой link local адрес. Судя по всему в этом корень проблемы. Попробовал другого хостера, у него всё заработало с пол-пинка.

Минимальные настройки для счастья (фрагменты):

# cat /etc/openvpn/server.conf 
server-ipv6 2001:19f3:5000:946c::1:0/112
push "route-ipv6 2000::/3"

# sysctl net.ipv6.conf.all.forwarding=1
# sysctl sysctl net.ipv6.conf.all.proxy_ndp=1

подключаемся

# ip -6 neigh add proxy 2001:19f3:5000:946c::1:1000 dev eth0
ну и убеждаемся, что iptables чистые.

Всё, после этого у клиента работает IPv6. Ничего ни в iptables, нигде настраивать не надо, сеть разделять тоже не надо, роутинг как-то сам разбирается, кто куда.

ip -6 neigh add proxy ... естественно надо засунуть в скрипт, который openvpn вызывает при подключении нового клиента (и убирать при отключении).

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

Хм. Век живи, век учись. ndp спасает. Даже забыл об этом, добавлю ка в fw.
Спасибо, что отписали о решении! Всегда может пригодиться.

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