Схема такая: 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
remote-cert-tls server
verb 3
cipher AES-256-CBC
compress 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
remote-cert-tls server
cipher AES-256-CBC
compress 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
compress 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
compress 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
Если у вас закрытый файервол, необходимо так же разрешить форваридинг пакетов+разрешающие правила для тунелей и сетей.
2 коментарі “Цепочка серверов с openvpn”
Пытаюсь настроить doublevpn.
В конфигурации клиента на сервере1 прописан скрипт /scripts/openvpn_client.sh. При запуске клиента соединение не устанавливается. При запуске отдельно скрипта /scripts/openvpn_client.sh возвращается ошибка RTNETLINK answers: No such process. Не подскажете, в чём может быть проблема?
1) Почему не устанавливается соединения – смотреть в логи.
2) Насчёт ошибки – то она, скорее всего, следствие неработоспособности пункта 1