Следуя (примерно) инструкциям https://www.zagbot.com/openvpn_ipv6_tunnel.html у меня теперь есть следующее:
Клиент
martin@theoria:~$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:8d:b3:fd:f4
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::250:8dff:feb3:fdf4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:31372164 errors:0 dropped:0 overruns:0 frame:0
TX packets:33131753 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:15453951555 (15.4 GB) TX bytes:26797262646 (26.7 GB)
Interrupt:23 Base address:0xa000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1985259 errors:0 dropped:0 overruns:0 frame:0
TX packets:1985259 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:347645379 (347.6 MB) TX bytes:347645379 (347.6 MB)
sit1 Link encap:IPv6-in-IPv4
inet6 addr: 2001:41d0:2:b353::10/64 Scope:Global
inet6 addr: fe80::a08:a/128 Scope:Link
UP POINTOPOINT RUNNING NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.10 P-t-P:10.8.0.9 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1106 (1.1 KB) TX bytes:1598 (1.5 KB)
virbr0 Link encap:Ethernet HWaddr 12:86:9c:16:08:fd
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 Link encap:Ethernet HWaddr 00:0e:2e:4e:94:8a
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Сервер
root@martineve:~# ifconfig
eth0 Link encap:Ethernet HWaddr e0:69:95:72:85:77
inet addr:188.165.232.xxx Bcast:188.165.232.255 Mask:255.255.255.0
inet6 addr: fe80::e269:95ff:fe72:8577/64 Scope:Link
inet6 addr: 2001:41d0:2:b353::1/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:49817 errors:0 dropped:6 overruns:0 frame:0
TX packets:51419 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:21105790 (20.1 MiB) TX bytes:36400780 (34.7 MiB)
Interrupt:20 Memory:fe500000-fe520000
eth0:0 Link encap:Ethernet HWaddr e0:69:95:72:85:77
inet addr:87.98.254.xxx Bcast:87.255.255.255 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:20 Memory:fe500000-fe520000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:14274 errors:0 dropped:0 overruns:0 frame:0
TX packets:14274 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:10206299 (9.7 MiB) TX bytes:10206299 (9.7 MiB)
sit10 Link encap:IPv6-in-IPv4
inet6 addr: 2001:41d0:2:b353::3/64 Scope:Global
inet6 addr: fe80::a08:1/128 Scope:Link
UP POINTOPOINT RUNNING NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:16000 errors:0 dropped:0 overruns:0 frame:0
TX packets:13254 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:9839924 (9.3 MiB) TX bytes:5791219 (5.5 MiB)
Каждое устройство может пинговать другое по сети IPv6 между ними:
Клиент:
PING 2001:41d0:2:b353::3(2001:41d0:2:b353::3) 56 data bytes
64 bytes from 2001:41d0:2:b353::3: icmp_seq=1 ttl=64 time=25.3 ms
Сервер:
PING 2001:41d0:2:b353::10(2001:41d0:2:b353::10) 56 data bytes
64 bytes from 2001:41d0:2:b353::10: icmp_seq=1 ttl=64 time=94.7 ms
Однако из клиента я не могу получить доступ нигде снаружи.
Клиент:
martin@theoria:~$ ip -6 route show
2001:41d0:2:b353::/64 via :: dev sit1 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 via :: dev sit1 proto kernel metric 256
default via 2001:41d0:2:b353::1 dev sit1 metric 1024
martin@theoria:~$ sudo route -A inet6
[sudo] password for martin:
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
2001:41d0:2:b353::/64 :: Un 256 0 1 sit1
fe80::/64 :: U 256 0 0 eth0
fe80::/64 :: Un 256 0 0 sit1
::/0 2001:41d0:2:b353::1 UG 1024 0 0 sit1
::/0 :: !n -1 1 520 lo
::1/128 :: Un 0 2 56 lo
2001:41d0:2:b353::10/128 :: Un 0 1 3 lo
fe80::a08:a/128 :: Un 0 1 0 lo
fe80::250:8dff:feb3:fdf4/128 :: Un 0 1 0 lo
ff00::/8 :: U 256 0 0 eth0
ff00::/8 :: U 256 0 0 sit1
::/0 :: !n -1 1 520 lo
Сервер:
root@martineve:~# ip -6 route show
2001:41d0:2:b353::10 dev sit10 metric 1024
2001:41d0:2:b353::/64 dev eth0 proto kernel metric 256
2001:41d0:2:b353::/64 via :: dev sit10 proto kernel metric 256
2001:41d0:2:b300::/56 dev eth0 proto kernel metric 256 expires 2590467sec
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 via :: dev sit10 proto kernel metric 256
ff00::/8 dev eth0 metric 256
ff00::/8 dev sit10 metric 256
default via fe80::5:73ff:fea0:0 dev eth0 metric 1024
root@martineve:~# route -A inet6
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
::1/128 :: Un 0 1 196 lo
2001:41d0:2:b353::/128 :: Un 0 1 0 lo
2001:41d0:2:b353::/128 :: Un 0 1 0 lo
2001:41d0:2:b353::1/128 :: Un 0 1 101 lo
2001:41d0:2:b353::3/128 :: Un 0 1 3 lo
2001:41d0:2:b353::10/128 :: U 1024 0 0 sit10
2001:41d0:2:b353::/64 :: U 256 0 0 eth0
2001:41d0:2:b353::/64 :: Un 256 0 0 sit10
2001:41d0:2:b300::/56 :: UAe 256 0 2 eth0
fe80::/128 :: Un 0 1 0 lo
fe80::a08:1/128 :: Un 0 1 0 lo
fe80::e269:95ff:fe72:8577/128 :: Un 0 1 49 lo
fe80::/64 :: U 256 0 0 eth0
fe80::/64 :: Un 256 0 0 sit10
ff00::/8 :: U 256 0 0 eth0
ff00::/8 :: U 256 0 0 sit10
::/0 fe80::5:73ff:fea0:0 UG 1024 0 0 eth0
::/0 :: !n -1 1 113 lo
Сервер имеет общее подключение по IPv6:
PING aaaa.test-ipv6.com(jason-fesler.f0-8.switch2a.fmt.he.net) 56 data bytes
64 bytes from jason-fesler.f0-8.switch2a.fmt.he.net: icmp_seq=1 ttl=53 time=164 ms
Клиент не:
PING aaaa.test-ipv6.com(jason-fesler.f0-8.switch2a.fmt.he.net) 56 data bytes
^C
--- aaaa.test-ipv6.com ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2015ms
Я пробовал это безрезультатно:
root@martineve:~# cat /proc/sys/net/ipv6/conf/all/forwarding
1
Что мне нужно сделать, чтобы позволить клиенту получить доступ к большому внешнему миру IPv6?
В конечном итоге ответ был в исходной ссылке, которая у меня была!
Когда вы выполняете такую маршрутизацию, вы должны указать бит «ip add neigh proxy [ip] eth0».
У вас много маршрутов с одинаковым приоритетом и на разных устройствах. Вы маршрутизируете свой / 64 из eth0, что может вызвать у вас проблемы. Как правило, проще иметь разные / 64 для разных подсетей.
Прежде чем пытаться связаться с вами, проверьте подключение IPv6 в вашей сети. Могут ли клиент и хост пинговать друг друга по IPv6. Это должно сработать, прежде чем вы сможете маршрутизировать.
Некоторые провайдеры выделяют / 64 для маршрутизации между вашим сервером и своей сетью. Эти соединения могут поддерживать только один адрес, который должен быть назначен вашему внешнему интерфейсу. Они также должны предоставить / 48, / 56 или / 60 для нужд вашей внутренней сети.
РЕДАКТИРОВАТЬ: Я снова просмотрел вашу маршрутизацию и сравнил ее с моей. Я бы посоветовал проверить ваш ip -6 neigh
вывод. В моем случае у меня есть соединение точка-точка IPv6 через туннель, и он не показывает мой внешний маршрутизатор. Похоже, у вас есть внешний адрес 2001: 41d0: 2: b353 :: / 64 для внешней маршрутизации и 2001: 41d0: 2: b300 :: / 56 для внутренней сети. Попробуйте использовать 2001: 41d0: 2: b300 :: / 64 для внутреннего сетевого блока маршрутизатора и 2001: 41d0: 2: b301 :: / 64 для блока удаленных серверов. Попробуйте более похожую конфигурацию.
Сервер: (sit0 - 2001: 41d0: 2: b300 :: 2)
default dev eth0 metric 1024 mtu 1480 advmss 1420 hoplimit 0
2000::/3 dev eth0 metric 1024 mtu 1480 advmss 1420 hoplimit 0
2001:41d0:2:b301::/64 via 2001:41d0:2:b301::3 dev sit0 proto kernel metric 256 mtu 1480 advmss 1420 hoplimit 0
Клиент: (sit1 - 2001: 41d0: 2: b301 :: 3)
default dev sit1 metric 1024 mtu 1480 advmss 1420 hoplimit 0
2000::/3 dev via 2001:41d0:2:b3010::2sit1 metric 1024 mtu 1480 advmss 1420 hoplimit 0
Чтобы развернуть самостоятельный ответ OP.
Проблема в том, что ваши пакеты попадают в Интернет, но ответы не возвращаются.
Ваш хостинг-провайдер предоставил вам блокировку «по ссылке» (вероятно, / 64, хотя мы этого точно не знаем). Вы можете использовать любой адрес из своего блока, но для этого ваш сервер должен отвечать на запросы обнаружения соседей для этого адреса. Ваш сервер будет отвечать на запросы обнаружения соседей для 2001: 41d0: 2: b353 :: 1, потому что он связан с интерфейсом, обращенным к вашему провайдеру, но не будет отвечать на запросы обнаружения соседей для 2001: 41d0: 2: b353 :: 10 . Таким образом, маршрутизатор вашего хостинг-провайдера не знает, куда отправлять ответы на пакеты, которые отправляет ваш клиент.
Есть несколько возможных решений этой проблемы.
Один из них - использовать команду «ip -6 neigh add proxy 2001: 41d0: 2: b353 :: 10 eth0», чтобы явно указать ядру, что оно должно отвечать на запросы обнаружения соседей для 2001: 41d0: 2: b353 :: 10 получил по eth0. Это немного хакерское решение, но, к сожалению, для некоторых поставщиков это единственный вариант.
Другой - попросить вашего хостинг-провайдера предоставить вам «маршрутизируемый» блок. С маршрутизируемым блоком вместо того, чтобы выполнять обнаружение соседей отдельно для каждого адреса в вашем блоке, они будут рассматривать ваш сервер как маршрутизатор.
Последняя возможность - сделать маскировку с помощью ip6tables. Это даже более хакерский вариант, чем первый.
P.S. openvpn теперь может передавать трафик ipv6 напрямую, вам больше не нужно создавать туннель внутри туннеля.