Я пытаюсь отладить свою сеть IPv6 и столкнулся с проблемой, которую не могу понять.
Я использую OpenVPN в качестве своего VPN-сервера, и вот краткая схема настройки:
Все пакеты сбрасываются, когда я пытаюсь выполнить пинг от VPN-клиента (2001:470:7875:1::2
) на VPN-сервер (2001:470:7875:1::1
), но вот что любопытно:
Я могу пинговать любой Другой хост через IPv6 (например, Google) или любой другой клиент VPN, подключающийся к тому же серверу VPN через IPv6.
Я также могу пинговать свой VPN-сервер через его собственный интерфейс IPv6 (ens3
). Это только интерфейс VPN-сервера (tun0
), который не отвечает при прямом пинге.
Поэтому мне интересно, что происходит?
Поскольку у меня есть две ссылки IPv6 на версию Интернета IPv6, мне нужно выполнить маршрутизацию на основе политик. Правила довольно простые.
Это приводит меня к следующей таблице маршрутизации на сервере VPN:
Команда ip -6 rule show
имеет следующую настройку:
0: from all lookup local
32000: from 2001:470:7875::/48 lookup openvpn
32766: from all lookup main
Стол local
:
local ::1 dev lo proto kernel metric 0 pref medium
anycast 2001:470:1f14:2c7:: dev he-ipv6 proto kernel metric 0 pref medium
local 2001:470:1f14:2c7::2 dev he-ipv6 proto kernel metric 0 pref medium
anycast 2001:470:7875:1:: dev tun0 proto kernel metric 0 pref medium
local 2001:470:7875:1::1 dev tun0 proto kernel metric 0 pref medium
anycast 2a01:xxx:xxxx:: dev ens3 proto kernel metric 0 pref medium
local 2a01:xxx:xxxx:xxx::1 dev ens3 proto kernel metric 0 pref medium
anycast fe80:: dev ens3 proto kernel metric 0 pref medium
anycast fe80:: dev tun0 proto kernel metric 0 pref medium
anycast fe80:: dev he-ipv6 proto kernel metric 0 pref medium
local fe80::95d2:9e6b dev he-ipv6 proto kernel metric 0 pref medium
local fe80::5054:ff:fe66:f97f dev ens3 proto kernel metric 0 pref medium
local fe80::af96:f1e3:dbf3:96a7 dev tun0 proto kernel metric 0 pref medium
ff00::/8 dev ens3 metric 256 pref medium
ff00::/8 dev tun0 metric 256 pref medium
ff00::/8 dev he-ipv6 metric 256 pref medium
Стол main
:
local ::1 dev lo proto kernel metric 256 pref medium
2001:470:1f14:2c7::/64 dev he-ipv6 proto kernel metric 256 pref medium
2001:470:7875:1::/64 dev tun0 proto kernel metric 256 pref medium
unreachable 2001:470:7875::/48 dev lo metric 1024 error -113 pref medium
2xxx:xxx:xxxx::/48 dev ens3 proto kernel metric 256 pref medium
fe80::/64 dev ens3 proto kernel metric 256 pref medium
fe80::/64 dev tun0 proto kernel metric 256 pref medium
fe80::/64 dev he-ipv6 proto kernel metric 256 pref medium
default via 2a01:xxx:xxxx::1 dev ens3 metric 1024 pref medium
Стол openvpn
:
unreachable 2001:470:7875::/48 dev lo metric 1024 error -113 pref medium
default via 2001:470:1f14:2c7::1 dev he-ipv6 metric 1024 pref medium
Есть ли кто-нибудь, кто может меня подсказать? :-)
Краткий обзор недостижимых линий в таблице маршрутизации
2001:470:1f14:2c7::/64 dev he-ipv6 proto kernel metric 256 pref medium
2001:470:7875:1::/64 dev tun0 proto kernel metric 256 pref medium
unreachable 2001:470:7875::/48 dev lo metric 1024 error -113 pref medium
Диапазон 2001:470:7875::/48
из 2001:470:7875:0:0:0:0:0
к 2001:470:7875:ffff:ffff:ffff:ffff:ffff
.
Я назначил подсеть 2001:470:7875:1::/64
в туннель VPN.
2001:470:7875:1::/64
является частью 2001:470:7875::/48
подсеть, что может привести к конфликту в таблице маршрутизации.2001:470:1f14:2c7::/64
является не часть 2001:470:7875::/48
подсеть и поэтому не конфликтует с таблицей маршрутизации.Никакой другой диапазон IP-адресов не используется, но будет указан позднее.
Принимая во внимание выигрыш по самому длинному префиксу, мы получаем следующее поведение:
2001:470:1f14:2c7::/64
подсеть будет обрабатываться интерфейсом he-ipv6.2001:470:7875:1::/64
подсеть будет обрабатываться интерфейсом tun0.Так...
После дополнительных поисков я обнаружил, что мои настройки можно немного улучшить, хотя я не совсем уверен, что я охватил все свои основы.
Тем не мение ip -6 rule show
можно немного подправить.
линия:
32000: from 2001:470:7875::/48 lookup openvpn
Был сгенерирован следующей командой:
ip -6 rule add priority 32000 from 2001:470:7875::/48 table openvpn
Это можно упростить до:
ip -6 rule add priority 32000 iif tun0 to 2000::/3 table openvpn
Это означает, что в основном весь трафик на основе IPv6 должен искать в таблице. openvpn
тогда и только тогда, когда трафик исходит от канала VPN и адрес назначения принадлежит 2003::/3
, который представляет собой в основном весь официальный IPv6 Интернет, за исключением локальных адресов, таких как fe80 :: / 10 и fc :: / 7.
Конечным результатом является то, что трафик IPv6 из моего канала VPN всегда пересылается по каналу Hurricane Electric.
То, что нужно запомнить. Каждый раз, когда я добавляю новую подсеть из пула доступных адресов в 2001:470:7875::/48
диапазон я должен сделать две записи.
main
, в котором рассказывается, как пересылать пакет с VPN-сервера в новую подсеть.openvpn
, который сообщает, как клиенты VPN могут попасть в новую подсеть. Обычно это происходит при межсайтовом трафике от одного клиента к другому по каналу VPN.В любом случае: пинг теперь работает, и я все еще могу пинговать Google по IPv6.
Команда ip -6 rule show
теперь дает следующий результат:
0: from all lookup local
32000: from all to 2000::/3 iif tun0 lookup openvpn
32766: from all lookup main
Все остальное как есть из первоначального вопроса.
Traceroute был немного сложнее, но он работает до тех пор, пока выполняется с пакетами ICMP Echo.
Запуск команды traceroute -6 -I google.com
на моем VPN-клиенте дал следующий след:
traceroute to google.com (2a00:1450:400e:80b::200e), 30 hops max, 80 byte packets
1 2001:470:7875:1::1 (2001:470:7875:1::1) 16.868 ms 37.912 ms 37.847 ms
2 tunnel547738.tunnel.tserv11.ams1.ipv6.he.net (2001:470:1f14:2c7::1) 37.777 ms 37.710 ms 37.647 ms
3 10ge11-20.core1.ams1.he.net (2001:470:0:7d::1) 37.575 ms 37.509 ms 37.443 ms
4 amsix-router.google.com (2001:7f8:1::a501:5169:1) 37.453 ms 52.425 ms 52.392 ms
5 2001:4860:0:f8d::1 (2001:4860:0:f8d::1) 52.323 ms 52.259 ms 52.189 ms
6 2001:4860:0:1::219f (2001:4860:0:1::219f) 36.456 ms 25.560 ms 18.169 ms
7 ams17s01-in-x0e.1e100.net (2a00:1450:400e:80b::200e) 34.566 ms 34.502 ms 34.435 ms