Вы находитесь здесь: version6.ru » Настройка IPv6 в OpenVPN
Это — старая версия документа!
Настройка IPv6 в OpenVPN
OpenVPN поддерживает IPv6 как внутри, так и снаружи туннеля. Однако поддержкой этой на сегодняшний день можно воспользоваться только с помощью собственного скрипта для поднятия интерфейса. Этот скрипт (up-ipv6.sh
) приведён ниже.
Выбор транспортного протокола
OpenVPN-туннель может работать и при полном отсутствии IPv4, т.е. использовать в качестве транспорта UDP/IPv6, и внутри туннеля также, пропускать IPv6-трафик. Именно такой вариант я и рекомендую – дело в том, что при использовании OpenVPN поверх IPv4 нужно будет обеспечивать на файрволлах обоих сторон надёжный пропуск-проброс UDP-пакетов на внутренние IPv4-адреса терминирующих VPN компьютеров (TCP тоже поддерживается, но к использованию авторами OpenVPN не рекомендован), что может оказаться немногим проще, чем настроить на этих же роутерах элементарный 6to4.
Конфигурационные файлы
Для этого примера предположим, что мы хотим связать главный офис фирмы (HQ) с одним из её филиалов (Branch) в режиме VPN точка-точка, с разделяемым секретным ключом (vpn-hq.key
), IPv6 нам предоставляет tunnelbroker.net, в главном офисе используются различные подсети из 2001:470:xxxx::/48
, а VPN-клиенту мы решили выдать 2001:470:xxxx:1::/64
.
На обоих компьютерах
Файл /etc/openvpn/vpn-hq.key
будет содержать секретный ключ, который при использовании туннеля с шифрованием в режиме «shared secret» должен быть одинаковым на всех соединяемых компьютерах. Сгенерировать его можно следующим образом1):
openvpn --genkey --secret /etc/openvpn/vpn-hq.key
Помимо него, на оба компьютера следует скопировать файл:
- /etc/openvpn/up-ipv6.sh
#!/bin/bash INTERFACE=$1; shift; TUN_MTU=$1; shift; UDP_MTU=$1; shift; LOCAL_IP=$1; shift; REMOTE_IP=$1; shift; MODUS=$1; shift; ip link set $INTERFACE up ip link set mtu $TUN_MTU dev $INTERFACE . /etc/openvpn/$INTERFACE.ipv6 for A in $LOCAL_IP6; do ip -6 addr add $A dev $INTERFACE done for R in $ROUTE_IP6; do ip -6 route add $R dev $INTERFACE done exit 0
На сервере (hq.example.com)
- /etc/openvpn/vpn-branch.conf
lport 1194 proto udp6 dev vpn-branch dev-type tun tun-ipv6 secret vpn-hq.key script-security 2 up up-ipv6.sh
- /etc/openvpn/vpn-branch.ipv6
LOCAL_IP6=2001:470:xxxx:1::1/64
На клиенте
- /etc/openvpn/vpn-hq.conf
remote hq.example.com 1194 proto udp6 dev vpn-hq dev-type tun tun-ipv6 secret vpn-hq.key script-security 2 up up-ipv6.sh ping 120 ping-restart 300 up-delay
- /etc/openvpn/vpn-hq.ipv6
LOCAL_IP6=2001:470:xxxx:1::2/64 ROUTE_IP6=2001:470:xxxx::/48
Включение маршрутизации
Если необходимо разрешить VPN-клиенту доступ к другим подсетям, кроме используемой непосредственно для организации туннеля, либо выпустить его «во внешний мир» через Интернет-соединение сервера, следует включить на сервере IP forwarding, для чего добавить в /etc/sysctl.conf
следующие две строки и выполнить sysctl -p
с правами root
:
net.ipv6.conf.all.forwarding=1 net.ipv6.conf.default.forwarding=1
…а также добавить соответствующее правило в настройки используемого IPv6-файрволла:
ip6tables -A FORWARD -i vpn-branch -j ACCEPT
На клиенте же, для использования доступных через VPN-соединение маршрутов, необходимо прописать их в строке ROUTE_IP6
вышеуказанного файла настроек (если несколько – то в общих кавычках и через пробел).
Запуск туннеля
После создания на обоих компьютерах всех указанных выше файлов, достаточно просто перезапустить OpenVPN (в Debian/Ubuntu – /etc/init.d/openvpn restart
), после чего туннель должен будет начать работать.
Ссылки
- Как раздать IPv6 по OpenVPN (третье сообщение)