Цепочка серверов с openvpn

Схема такая: client -> server1 (ip=XX.XX.XX.XX) -> server2 (IP=YY.YY.YY.YY) То есть получаем более-менее анонимное подключение. Причём с шифрованием в 256 бит. Хочу заменить, что у сервера server1 будет 2 конфигурации — клиента (для подключения к server2) и сервера (для подключения клиентов, типа client)

Конфигурация клиента client

client
dev tun
tls-client
proto udp
remote XX.XX.XX.XX 1194
resolv-retry infinite
nobind
ns-cert-type server
verb 3
cipher AES-256-CBC
comp-lzo
ca C:\\vpn\\ca.crt
dh C:\\vpn\\dh1024.pem
tls-auth C:\\vpn\\ta.key 1
cert C:\\vpn\\client1.crt
key C:\\vpn\\client1.key
persist-key
persist-tun

Конфигурация сервера server1

— конфигурация клиента

client
dev tun1
tls-client
proto udp
remote YY.YY.YY.YY 1194
resolv-retry infinite
nobind
ns-cert-type server
cipher AES-256-CBC
comp-lzo
ca /etc/openvpn/client_vps6/ca.crt
cert /etc/openvpn/client_vps6/vps5.crt
key /etc/openvpn/client_vps6/vps5.key
dh /etc/openvpn/client_vps6/dh1024.pem
tls-auth /etc/openvpn/client_vps6/ta.key 1
persist-key
persist-tun
user root
group nobody
script-security 2
up /scripts/openvpn_client.sh

файл скрипта /scripts/openvpn_client.sh

#!/bin/sh
/sbin/ip route add default via 10.6.11.5 proto static table T2

— конфигурация сервера

port 1194
proto udp
dev tun0
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
tls-auth /etc/openvpn/easy-rsa/2.0/keys/ta.key 0
client-to-client
server 10.5.11.0 255.255.255.0
push "route 10.5.11.0 255.255.255.0"
push "redirect-gateway"
tls-server
comp-lzo
cipher AES-256-CBC
user root
group nobody
persist-key
persist-tun
keepalive 10 120
script-security 2
up /scripts/openvpn_server.sh

Файл скрипта /scripts/openvpn_server.sh

#!/bin/sh
/sbin/ip rule add from 10.5.11.0/24 to 0/0 table T2

Примечание.

Как видно, сервер всегда стартует на tun0, а клиент — на tun1. Это было специально выставлено в конфигах.

Конфигурация сервера server2

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
tls-auth /etc/openvpn/easy-rsa/2.0/keys/ta.key 0
client-to-client
server 10.6.11.0 255.255.255.0
push "route 10.6.11.0 255.255.255.0"
tls-server
comp-lzo
cipher AES-256-CBC
user root
group nobody
persist-key
persist-tun
keepalive 10 120

Пояснение

Скрипты /scripts/openvpn_server.sh и /scripts/openvpn_client.sh нужны для того, что бы заворачивать трафик от клиентов (типа client) на сервер server2

Какие и где используются подсети:

client при подключении получает адрес из сети 10.5.11.0/24
server1 при подключении к server2 получает адрес из сети 10.6.11.0/24 (в данном случае это 10.6.11.5 и соответственно gw=10.6.11.6)

Файервол и НАТ

Необходимый минимум для работы — это настройка трансляции на обеих серверах:

— server1

iptables --table nat --append POSTROUTING --out-interface tun1 -j SNAT --to 10.6.11.6

В данном случае получаем исходящий интерфейс tun1, который смотрит в сторону server2 и весь трафик на сервере server2 с server1 NAT’ится на ИП 10.6.11.6

— server2

iptables --table nat --append POSTROUTING --out-interface eth0 -j SNAT --to YY.YY.YY.YY

Настройка sysctl:

— server1

net.ipv4.ip_forward = 1
net.ipv4.conf.tun0.rp_filter=0
net.ipv4.conf.tun1.rp_filter=0

— server2

net.ipv4.ip_forward = 1

Настройка iproute2 (только для server1)

Для iproute в правилах мы использовали таблицу T2. Для этого нужно добавить в файл /etc/iproute2/rt_tables такую строку

251 T2

Если у вас закрытый файервол, необходимо так же разрешить форваридинг пакетов+разрешающие правила для тунелей и сетей.

Цепочка серверов с openvpn: 2 комментария

  1. Денис

    Пытаюсь настроить doublevpn.
    В конфигурации клиента на сервере1 прописан скрипт /scripts/openvpn_client.sh. При запуске клиента соединение не устанавливается. При запуске отдельно скрипта /scripts/openvpn_client.sh возвращается ошибка RTNETLINK answers: No such process. Не подскажете, в чём может быть проблема?

    1. skeletor Автор записи

      1) Почему не устанавливается соединения — смотреть в логи.
      2) Насчёт ошибки — то она, скорее всего, следствие неработоспособности пункта 1

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *