Это — старая версия документа!


Настройка IPv6 в OpenVPN

Впервые опубликовано 2010-09-03.

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
/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

Запуск туннеля

После создания на обоих компьютерах всех указанных выше файлов, достаточно просто перезапустить OpenVPN (в Debian/Ubuntu – /etc/init.d/openvpn restart), после чего туннель должен будет начать работать.

Ссылки


openvpn.1284316972.txt.gz · Последние изменения: 2011-05-31 10:45 UTC (внешнее изменение)
Personal Tools