Назад | Перейти на главную страницу

Маршрутизация IPv6 через OpenVPN

Пытаясь узнать, как 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-адреса.

Правила довольно простые.

  • Если трафик исходит от самого сервера, используйте шлюз по умолчанию.
  • Если трафик исходит из моей подсети / 48, используйте ссылку IPv6 через IPv4.

Это означает, что вам нужны две таблицы маршрутизации. Таблица маршрутизации по умолчанию (называется: 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 своей собственной сети - это отдельная глава, которую я не собираюсь здесь рассматривать. :-)