Различия

Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.

openvpn [2010-09-03 09:08 UTC]
rm
openvpn [2012-02-17 09:19 UTC] (текущий)
rm
Строка 1: Строка 1:
====== Настройка IPv6 в OpenVPN ====== ====== Настройка IPv6 в OpenVPN ======
-//Впервые опубликовано 2010-09-03.//+Использовать IPv6 внутри OpenVPN удобнее всего в режиме работы VPN под названием tap (а не "tun"), представляющем из себя эмуляцию внутри VPN обычного Ethernet-подключения.
-{{page>toc}}+OpenVPN-туннель может работать и при полном отсутствии IPv4, т.е. использовать в качестве транспорта UDP/IPv6, и внутри туннеля также, пропускать IPv6-трафик. Именно такой вариант я и рекомендую -- дело в том, что при использовании OpenVPN поверх IPv4 нужно будет обеспечивать на файрволлах обоих сторон надёжный пропуск-проброс UDP-пакетов на внутренние IPv4-адреса терминирующих VPN компьютеров (TCP тоже поддерживается, но к использованию авторами OpenVPN не рекомендован), что может оказаться немногим проще, чем настроить на этих же роутерах [[/6to4/howto|6to4]] или [[/he.net/howto|другой]] туннель.
-OpenVPN поддерживает IPv6 как внутри, так и снаружи туннеля. Однако поддержкой этой на сегодняшний день можно воспользоваться только с помощью собственного скрипта для поднятия интерфейса. Этот скрипт (''up-ipv6.sh'') приведён ниже. 
- 
-===== Выбор транспортного протокола ===== 
-OpenVPN-туннель может работать и при полном отсутствии IPv4, т.е. использовать в качестве транспорта UDP/IPv6, и внутри туннеля также, пропускать IPv6-трафик. Именно такой вариант я и рекомендую -- дело в том, что при использовании OpenVPN поверх IPv4, придётся озаботиться надёжным пропуском-пробросом на файрволлах обоих сторон UDP-пакетов на внутренние IPv4-адреса терминирующих VPN компьютеров (TCP тоже поддерживается, но к использованию авторами OpenVPN не рекомендован), что может оказаться немногим проще, чем настроить на этих же роутерах элементарный [[/6to4/howto|6to4]]. 
- 
-===== Конфигурационные файлы ===== 
Для этого примера предположим, что мы хотим связать главный офис фирмы (HQ) с одним из её филиалов (Branch) в режиме VPN точка-точка, с разделяемым секретным ключом (''vpn-hq.key''), IPv6 нам предоставляет [[/he.net/howto|tunnelbroker.net]], в главном офисе используются различные подсети из ''2001:470:xxxx::/48'', а VPN-клиенту мы решили выдать ''2001:470:xxxx:1::/64''. Для этого примера предположим, что мы хотим связать главный офис фирмы (HQ) с одним из её филиалов (Branch) в режиме VPN точка-точка, с разделяемым секретным ключом (''vpn-hq.key''), IPv6 нам предоставляет [[/he.net/howto|tunnelbroker.net]], в главном офисе используются различные подсети из ''2001:470:xxxx::/48'', а VPN-клиенту мы решили выдать ''2001:470:xxxx:1::/64''.
-==== На обоих компьютерах ==== +===== Общие настройки (на обоих компьютерах) ===== 
-Файл ''/etc/openvpn/vpn-hq.key'' будет содержать секретный ключ, который при использовании туннеля с шифрованием в режиме "shared secret" должен быть одинаковым на всех соединяемых компьютерах. Сгенерировать его можно следующим образом((http://openvpn.net/index.php/open-source/documentation/miscellaneous/78-static-key-mini-howto.html))+Файл ''/etc/openvpn/vpn-hq.key'' будет содержать секретный ключ, который при использовании туннеля с шифрованием в режиме "shared secret" должен быть одинаковым на всех соединяемых компьютерах. Сгенерировать его можно следующим образом: 
-<code>openvpn --genkey --secret vpn-hq.key</code>+<code>openvpn --genkey --secret /etc/openvpn/vpn-hq.key</code>
Помимо него, на оба компьютера следует скопировать файл: Помимо него, на оба компьютера следует скопировать файл:
-<file bash /etc/openvpn/up-ipv6.sh>+<file bash /etc/openvpn/tap.sh>
#!/bin/bash #!/bin/bash
 +
INTERFACE=$1; shift; INTERFACE=$1; shift;
TUN_MTU=$1;   shift; TUN_MTU=$1;   shift;
Строка 27: Строка 21:
MODUS=$1;     shift; MODUS=$1;     shift;
 +ifconfig $INTERFACE hw ether `echo -n 02: ; hostname | md5sum | sed 's/\(..\)/\1:/g; s/.$//' | colrm 15`
ip link set $INTERFACE up ip link set $INTERFACE up
ip link set mtu $TUN_MTU dev $INTERFACE ip link set mtu $TUN_MTU dev $INTERFACE
 +echo 64 > /proc/sys/net/ipv6/conf/$INTERFACE/accept_ra_rt_info_max_plen
-. /etc/openvpn/$INTERFACE.ipv6+if [ -f "/etc/openvpn/$INTERFACE.ipv6" ]; then 
 +  . /etc/openvpn/$INTERFACE.ipv6 
 +  for A in $LOCAL_IP6; do 
 +    ip -6 addr add $A dev $INTERFACE 
 +  done 
 +fi
-for I in $LOCAL_IP6; do +exit 0</file>
-  ip -6 addr add $I dev $INTERFACE +По-умолчанию, при каждом перезапуске VPN создаются туннельные интерфейсы со случайным MAC-адресом. Это неудобно тем, что любые открытые внутри VPN соединения после перезапуска VPN подвисают на долгое время -- до тех пор, пока удалённый компьютер не обнаружит изменившийся MAC-адрес другого конца туннеля. Указанным же выше способом (строка с ''ifconfig'') можно добиться того, чтобы MAC-адрес на каждом клиентском компьютере был каждый раз одним и тем же (до смены hostname, что происходит крайне редко), и при этом с достаточной степенью вероятности уникальным.
-done+
-for R in $ROUTE_IP6; do +===== На сервере =====
-  ip -6 route add $R dev $INTERFACE +
-done +
- +
-exit 0 +
-</file> +
- +
-==== На сервере (hq.example.com) ====+
<file - /etc/openvpn/vpn-branch.conf>lport 1194 <file - /etc/openvpn/vpn-branch.conf>lport 1194
proto udp6 proto udp6
dev vpn-branch dev vpn-branch
-dev-type tun +dev-type tap 
-tun-ipv6+tun-mtu 1360
secret vpn-hq.key secret vpn-hq.key
script-security 2 script-security 2
-up /etc/openvpn/up-ipv6.sh</file>+up tap.sh</file>
<file bash /etc/openvpn/vpn-branch.ipv6> <file bash /etc/openvpn/vpn-branch.ipv6>
Строка 57: Строка 50:
</file> </file>
-==== На клиенте ====+Добавить в ''/etc/radvd.conf'': 
 +<file - /etc/radvd.conf> 
 +interface vpn-branch { 
 +    AdvSendAdvert on; 
 +    IgnoreIfMissing on; 
 +    AdvDefaultLifetime 0; 
 +    prefix 2001:470:xxxx:1::1/64 { }; 
 +    route 2001:470:xxxx::/48 { }; 
 +}; 
 +</file> 
 + 
 +Нужно также включить на сервере IP forwarding, для чего добавить в ''/etc/sysctl.conf'' следующие две строки и выполнить ''sysctl -p'' с правами ''root'': 
 +<file>net.ipv6.conf.all.forwarding=1 
 +net.ipv6.conf.default.forwarding=1</file> 
 +...а также добавить соответствующее правило в настройки используемого IPv6-файрволла: 
 +<file>ip6tables -A FORWARD -i vpn-branch -j ACCEPT</file> 
 + 
 +===== На клиенте =====
<file - /etc/openvpn/vpn-hq.conf>remote hq.example.com 1194 <file - /etc/openvpn/vpn-hq.conf>remote hq.example.com 1194
proto udp6 proto udp6
dev vpn-hq dev vpn-hq
-dev-type tun +dev-type tap 
-tun-ipv6+tun-mtu 1360
secret vpn-hq.key secret vpn-hq.key
script-security 2 script-security 2
-up /etc/openvpn/up-ipv6.sh</file> +up tap.sh</file>
- +
-<file bash /etc/openvpn/vpn-hq.ipv6> +
-LOCAL_IP6=2001:470:xxxx:1::2/64 +
-ROUTE_IP6=2001:470:xxxx::/48 +
-</file>+
===== Запуск туннеля ===== ===== Запуск туннеля =====
-После создания на обоих компьютерах всех указанных выше файлов, достаточно просто перезапустить OpenVPN (в Debian/Ubuntu -- ''/etc/init.d/openvpn restart''), после чего туннель должен будет начать работать.+После создания на обоих компьютерах всех указанных выше файлов, достаточно просто перезапустить OpenVPN (в Debian/Ubuntu -- ''/etc/init.d/openvpn restart'') и RADVD (''/etc/init.d/radvd restart''), после чего туннель должен будет начать работать.
===== Ссылки ===== ===== Ссылки =====
-  * [[http://www.sixxs.net/forum/?msg=general-535044|Как раздать IPv6 по OpenVPN]] (третье сообщение)+  * http://openvpn.net/index.php/open-source/documentation/miscellaneous/78-static-key-mini-howto.html 

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