Пытаясь узнать, как IPv6 работает с OpenVPN, я хотел настроить следующую схему.
У меня есть VPS-сервер (Ubuntu), которому была выделена подсеть / 48.
ISP ipv6 gateway is XXXX:XXXX:XXXX::1
Server ipv6 address is XXXX:XXXX:XXXX:39::1
Идея состоит в том, что любые клиенты, подключающиеся к серверу, получают IP-адрес в подсети XXXX: XXXX: XXXX: 39: 2 :: / 64.
Файл конфигурации сервера основан на образце конфигурации из OpenVPN со следующими дополнениями:
dev tun
tun-ipv6
server-ipv6 XXXX:XXXX:XXXX:39:2::/64
push "route-ipv6 XXXX:XXXX:XXXX:39::/48"
Перезагрузка сервера OpenVPN не дала никаких проблем.
Серверу присваиваются следующие IP-адреса:
eth0: XXXX:XXXX:XXXX:39::1/48
tun0: XXXX:XXXX:XXXX:39::2/64
Клиенту назначается:
OpenVPN нажмите: XXXX: XXXX: XXXX: 39: 2: 0: 1: 0, и я могу пинговать XXXX: XXXX: XXXX: 39 :: 1 нормально. Однако проверка связи между шлюзом ISP от клиента приводит к тайм-ауту соединения.
Я могу пропинговать шлюз IPv6 ISP с сервера.
Я разрешил трафик от XXXX: XXXX: XXXX: 39: 2 :: / 64 в брандмауэре Ubuntu.
Что мне не хватает?
Я должен упомянуть, что на сервере работает OpenVPN версии 2.2.1 - это причина жалоб?
Оказалось, что использовать мой размещенный сервер в качестве шлюза IPv6 было не так просто. Это выполнимо, хотя это многоступенчатый процесс.
Я закончил тем, что спросил здесь немного, поэтому ниже приводится краткое изложение того, что я узнал в процессе.
Чтобы получить маршрутизируемую подсеть, я пошел в Hurricane Electric и приобрел маршрутизируемую подсеть / 48 от Hurricane Electric. Посещение https://tunnelbroker.net для получения дополнительной информации о том, как получить собственную подсеть.
Они предоставят IPv6, маршрутизируемый через туннель IPv4, а также сообщат вам, что вы должны добавить к вам. /etc/interfaces
.
Мои IPv6-адреса на туннельной ссылке находятся в форме: 2001:470:xxxx:xxx::/64
. Поэтому следующие строки следует добавить в /etc/interfaces
:
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address 2001:470:xxxx:xxx::2
netmask 64
endpoint <ipv4 address Tunnelbroker side>
local <public ipv4 address your side>
ttl 255
gateway 2001:470:xxxx:xxx::1
Но из-за того, что у моего сервера уже есть общедоступный IPv6-адрес, это вызовет некоторые проблемы, которые нам нужно будет устранить, прежде чем я смогу пинговать что-либо из подсети Tunnelbroker.
Идея состоит в том, что сервер решает, какой исходящий канал ему следует использовать для трафика IPv6, в зависимости от исходного IPv6-адреса.
Правила довольно простые.
Это означает, что вам нужны две таблицы маршрутизации. Таблица маршрутизации по умолчанию (называется: main
) и свой собственный стол (я назвал свой mynet6
).
Сначала добавьте запись для настраиваемой таблицы маршрутизации:
echo 100 mynet6 > /etc/iproute2/rt_tables
Скажем, мне назначена подсеть 2001:db8:cafe::/48
.
Я создал сценарий, который вызывается OpenVPN при подключении VPN-соединения, поскольку моя подсеть / 48 находится только на моем VPN-канале. Сценарий выглядит примерно так:
# Reset IPv6 routing table.
ip -6 rule flush
# Add default IPv6 rules again - since they gets deleted by the initial rule
# flush command.
ip -6 rule add priority 32766 from all table main
# Reset Tunnelbroker routing table (table name: "mynet6").
ip -6 route flush table mynetv6
# All traffic from my /48 subnet should be added to Tunnelbroker routing table
ip -6 rule add priority 32000 from 2001:DB8:CAFE::/48 table mynet6
# Add routeable VPN subnets to Tunnelbroker routing table
ip -6 rule add from 2001:DB8:CAFE::/48 table he-ipv6
# Remember to add a rule that if no machine does not respond to a
# packet address in my /48, then we should return unreachable.
# Else the package will be forwarded by default out through the
# Hurricane Electric connection.
#(From the Internet)
ip -6 route add unreachable 2001:DB8:CAFE::/48
#(From my /48 subnet)
ip -6 route add unreachable 2001:DB8:CAFE::/48 table mynet6
# Any traffic that originates from VPN has to be forwarded via Tunnelbroker
# routing table using the tunnelbroker link (link name: he-ipv6).
ip -6 route add default via 2001:470:xxxx:xxx::1 dev he-ipv6 table mynet6
Вы можете проверить настройку маршрутизации с помощью команды:
ip -6 rule show
Он должен содержать что-то вроде:
0: from all lookup local
32000: from 2001:db8:cafe::/48 lookup mynet6
32766: from all lookup main
Таблицу маршрутизации для ссылки Tunnelbroker можно найти с помощью:
ip -6 route show table mynet6
И он должен вывести что-то вроде:
unreachable 2001:470:78d6::/48 dev lo metric 1024 error -113 pref medium
default via 2001:470:xxxx:xxx::1 dev he-ipv6 metric 1024 pref medium
Таблица маршрутизации по умолчанию находится здесь:
ip -6 route show table main
И в нем должны быть, среди прочего, строки:
unreachable 2001:470:78d6::/48 dev lo metric 1024 error -113 pref medium
default via XXXX:XXXX:XXXX::1 dev eth0 metric 1024 pref medium
Это должно соответствовать тому, что должен делать сервер, когда он получает трафик из подсети / 48. Как вы назначаете свою подсеть / 48 своей собственной сети - это отдельная глава, которую я не собираюсь здесь рассматривать. :-)