Настройка «двойного» (double) OpenVPN

Часто пользователи сети Интернет по различным причинам не хотят показывать свой реальный IP, который выдает им провайдер. Известно, что многие организации предоставляют услуги VPN, Proxy, Socks, которые помогают пользователю сохранить свою анонимность в сети. Для чего это нужно отдельному пользователю — причин может быть множество, на этом мы не будем акцентировать внимание. Рассмотрим процесс создания OpenVPN-сервера, который соединен с другим OpenVPN-сервером, при этом трафик от пользователя идет через первый сервер, после этого на второй и далее уже к нужному ресурсу. Возвращается трафик по этой же цепочке в обратной последовательности. Много владельцев подобной схемы называют ее «double» (двойным) OpenVPN. Схематически такую схему можно отобразить таким образом:

 
Клиент --> OpenVPN-сервер 1 --> OpenVPN-сервер 2 --> Интернет

 Возврат трафика по обратной схеме:
Клиент <-- OpenVPN-сервер 1 <-- OpenVPN-сервер 2 <-- Интернет
 

Для создания подобной схемы необходимо наличие двух VPS/VDS (как правило, VDS используется при больших нагрузках (объемах передаваемого трафика)). При этом, если будет использоваться VPS с типом виртуализации OpenVZ или другим, при котором контейнеры виртуальных машин используют общее ядро хост-системы, необходимо уточнить у хостера, разрешена ли загрузка модуля tun для виртуальных машин.

Реализация схемы предполагает настройку соединения через OpenVPN между клиентом и OpenVPN-сервером 1, между двух OpenVPN-серверов, настройку NAT на OpenVPN-сервере 2 и настройку маршрутизации на двух OpenVPN-серверах.

Устанавливаем на обеих серверах OpenVPN. Приведем, например, процесс установки для ОС CentOS. В стандартных репозиториях CentOS пакет openvpn отсутствует, поэтому подключаем нужные источники (учитываем версию и архитеркуту ОС)

 
rpm -ihv http://mirror.yandex.ru/epel/6/x86_64/epel-release-6-7.noarch.rpm
rpm -ihv http://centos.alt.ru/repository/centos/6/x86_64/centalt-release-6-1.noar...

 

Устанавливаем OpenVPN

 
yum -y install openvpn
 

Проверяем, загружен ли модуль tun
 
lsmod | grep tun
 
Если вывод предыдущей команды пустой, выполняем загрузку модуля tun
 
modprobe tun

Как организовать автоматическую загрузку OpenVPN и модуля tun при запуске системы зависит от конкретной ОС. Для создания соединения между двумя серверами используем настройку OpenVPN point-to-point. Для этого на OpenVPN-сервер 2 создаем конфигурационный файл /etc/openvpn/server.conf с таким содержимым:

dev tun
proto tcp-server
ifconfig 10.0.2.1 10.0.2.2
tls-server
comp-lzo
daemon
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
tls-auth /etc/openvpn/keys/tls.key 0
cipher AES-256-CBC
port 1195
user nobody
group nobody
max-clients 1
persist-key
persist-tun
verb 3
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
script-security 3 system
route-up "ip route add 10.0.1.0/24 via 10.0.2.2 dev tun0"

Ключи и сертификаты, которые размещены в /etc/openvpn/keys/ создаем согласно FAQ от разработчиков OpenVPN с использованием easy-rsa.
Содержимое команды route-up зависит от настройки клиентской сети и настроек соединения между серверами.

Включаем форвардинг пакетов. В файле /etc/sysctl.conf значение параметра net.ipv4.ip_forward меняем с 0 на 1
net.ipv4.ip_forward = 1
Загружаем переменные ядра из обновленного файла sysctl.conf
 
sysctl -p

Также на втором сервере настраиваем NAT с помощью iptables:
 
iptables -t nat -A POSTROUTING --src 10.0.1.0/24 -o eth0 -j SNAT --to-source 1.1.1.1,
 
где 1.1.1.1 — внешний IP сервера 2.

На первом сервере также устанавливаем OpenVPN и создаем конфигурационный файл /etc/openvpn/s2s.conf:

dev tun0
remote 1.1.1.1
port 1195
proto tcp-client
ifconfig 10.0.2.2 10.0.2.1
tls-client
comp-lzo
daemon
script-security 3 system
ns-cert-type server
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/s2s.crt
key /etc/openvpn/keys/s2s.key
dh /etc/openvpn/keys/dh1024.pem
tls-auth /etc/openvpn/keys/tls.key 1
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
verb 3
route-up "ip route add default via 10.0.2.1 dev tun0 table 10 && ip rule add from 10.0.1.0/24 lookup 10 pref 10"
mute 10
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log

Также включаем форвардинг пакетов.

Настраиваем OpenVPN-сервер 1 для подключения клиентов. Для этого создаем конфигурационный файл /etc/openvpn/server.conf:

port 1194
local 2.2.2.2
proto tcp
dev tun1
server 10.0.1.0 255.255.255.0
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
tls-auth /etc/openvpn/keys/tls.key 0

cipher AES-256-CBC
user nobody
group nobody
status /var/log/openvpn/openvpnserver-status.log
log-append /var/log/openvpn/openvpnserver.log
verb 3
max-clients 30
keepalive 10 120
tls-server
comp-lzo
persist-key
persist-tun
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"

Сертификаты и ключи для подключения клиентов также создаем согласно FAQ от разработчиков OpenVPN с использованием easy-rsa.

После настройки на каждом сервере запускаем OpenVPN

 
/etc/init.d/openvpn start
 

Если возникает сбой запуска, смотрим ошибки в лог-файлах и устраняем их.

 

Для возможности подключения клиенту необходимы следующие файлы:
ca.crt
client01.crt
client01.key
dh1024.pem
tls.key

Нужно передать их вместе с параметрами конфигурации.

Со стороны клиента в зависимости от ОС нужно выполнить такие действия.

Для ОС linux:

Установить openvpn. Проверить, загружен ли модуль tun. Создать конфигурационный файл /etc/openvpn/client01.conf

client
remote 2.2.2.2 1194
proto tcp
dev tun
ca ca.crt
dh dh1024.pem
cert client01.crt
key client01.key
tls-auth tls.key 1
cipher AES-256-CBC
verb 3
mute 20
keepalive 10 120
comp-lzo
persist-key
persist-tun
resolv-retry infinite
nobind

Скопировать полученные файлы (ca.crt, client01.crt, client01.key, dh1024.pem, tls.key) в /etc/openvpn/. Запусить openvpn:

 
/etc/init.d/openvpn start
 
Проверить, появился ли интерфейс tun0.
 
Для Windows:

Установить OpenVPN для windosw (http://openvpn.net/index.php/open-source/downloads.html). Скопировать полученные файлы (ca.crt, client01.crt, client01.key, dh1024.pem, tls.key) в C:\Program Files\OpenVPN\config\client01. В том же каталоге создать конфигурационный файл client01.ovpn (идентичный по содержанию с client01.conf для linux). Подключиться.

 

После подключения проверить, как идет трафик. Оба сервера должны фигурировать в трассе:

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 10.1.0.1 (10.1.0.1) 165.178 ms 329.870 ms 329.807 ms
2 10.2.0.1 (10.2.0.1) 493.908 ms 658.640 ms 824.653 ms

...

(c) h ttp://10serv.com/nastroyka-dvoynogo-double-openvpn/

Коментувати

Простий текст

  • Не дозволено жодних HTML теґів.
  • Рядки й абзаци переносяться автоматично.
  • Адреси вебсторінок та адреси електронної пошти автоматично перетворюються у посилання.