копи\паст Итак, для начала нам понадобятся 2 сервера, физических или VPS, идеально для этих целей подойдет VPS с виртуализацией XEN или KVM (а вот OpenVZ контейнер должен быть с модулем tun), дистрибутив я предпочитаю Debian, поэтому в мануале все примеры я буду приводить под этот дистрибутив. Принцип работы правильного DoubleVPN слудующий: Клиент коннектится к первому серверу, а его трафик маршрутизируется на второй сервер. Второй сервер не знает IP клиента, а интернет провайдер не знает IP основного VPN сервера, через который заходили на ресурс. Для наших целей отлично подойдут серваки в недружественных друг для друга странах вроде России и Украины, США и Ирана и тд Подготовительный этап. Имеем 2 сервера, 1ый сервер = промежуточный, 2ой сервер = конечный. Подключаемся к обоим серверам через PuTTY и включаем на обоих форвардинг: echo 1>/proc/sys/net/ipv4/ip_forward Теперь пропишем его в /etc/sysctl.conf, чтобы включался после перезагрузки серверов: net.ipv4.ip_forward=1 Готово, теперь обновим списки репозиториев и установим OpenVPN: apt-get update apt-get install openvpn -y Далее сгенерим сертификаты для клиента и сервера (эту процедуру нужно проделать на обоих серверах), есть для этих целей пакет easy-rsa: cd /usr/share/doc/openvpn/examples/easy-rsa/2.0 редактируем скрипт vars: nano vars и комментируем следующие строки (в самом конце): #export KEY_EMAIL="[email protected]" #export [email protected] #export KEY_CN=changeme #export KEY_NAME=changeme #export KEY_OU=changeme #export PKCS11_MODULE_PATH=changeme #export PKCS11_PIN=1234 Готово, теперь запускаем этот скрипт: ../vars И генерим сертификаты по порядку, отвечая на все вопросы по умолчанию (Enter): ./build-ca ./build-key-server server ./build-key client1 ./build-dh Теперь копируем папку keys в /etc/openvpn, для удобства: cp -r keys /etc/openvpn | rm -rf keys | cd /etc/openvpn Приступаем к настройке конфига на сервере 1: создаем конфиг сервера: nano server.conf со следующим содержанием: mode server daemon port 443 proto tcp dev tun0 ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh1024.pem tls-server server 10.8.0.0255.255.255.0 push "redirect-gateway def1" ifconfig-pool-persist ipp.txt cipher AES-256-CBC keepalive 10120 comp-lzo persist-key persist-tun verb 0 log /dev/null Серверный конфиг готов, теперь принимаемся за настройку клиентского конфига на сервере 1. Перенесем с сервера 2 клиентские сертификаты и положим их в папку /etc/openvpn/client ca.crt, client1.crt, client1.key Теперь создадим сам клиентский конфиг: nano client.conf client dev tun1 proto tcp-client remote IP_SERVER2 443 resolv-retry infinite ns-cert-type server ca client/ca.crt cert client /client1.crt key client /client1.key persist-key persist-tun cipher AES-256-CBC nobind verb 0 log /dev/null comp-lzo reneg-sec 0 keepalive 10120 route-nopull up '/sbin/ip rule add from 10.8.0.0/24 lookup double pref 20000 | /sbin/ip route add default dev tun0 table double' down '/sbin/ip rule del from 10.8.0.0/24' script-security 3 system Создаем таблицу маршрутизации: echo "1 double">>/etc/iproute2/rt_tables Создаем правило iptables (tun1 - интерфейс клиента): iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE Запускаем service openvpn start Готово! Самое сложное позади, теперь принимаемся за настройку сервера 2: Создаем конфиг со следующим содержанием: nano /etc/openvpn/server.conf mode server daemon port 443 proto tcp dev tun0 ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh1024.pem tls-server server 10.0.8.0255.255.255.0 push "redirect-gateway def1" ifconfig-pool-persist ipp.txt cipher AES-256-CBC keepalive 10120 comp-lzo persist-key persist-tun verb 0 log /dev/null И прописываем правило iptables: iptables -t nat -A POSTROUTING -s 10.0.8.0/24-o eth0 -j MASQUERADE И запускаем service openvpn start Чтобы правило iptables запускалось автоматом после ребута, сохраним его в файле: iptables-save >/etc/iptables И пропишем в настройках сетевого интерфейса /etc/network/interface: nano /etc/network/interfaces iface eth0 inet static address 192.168.0.1 netmask 255.255.255.0 up /sbin/iptables-restore </etc/iptables Теперь качаем ключи с сервера 1 себе на диск в папку config клиента OpenVPN Создаем клиентский конфиг, под Windows: client dev tun proto tcp remote SERVER_1 443 resolv-retry infinite ns-cert-type server ca ca.crt cert client1.crt key client1.key persist-key persist-tun cipher AES-256-CBC route-method exe nobind verb 3 mssfix comp-lzo reneg-sec 0 Под *nix: nano double.conf client dev tun proto tcp remote SERVER_1 443 resolv-retry infinite ns-cert-type server ca ca.crt cert client1.crt key client1.key persist-key persist-tun cipher AES-256-CBC nobind verb 3 comp-lzo reneg-sec 0 На этом все, всем удачи в настройке!
Ух ты. Спасибо. Только недавно думал, как дабл ВПН себе сделать. Надо одно дело провернуть. А тут уже все расписано.
Если возникнут трудности с настройкам (например бывает на Минте проблема с сертификатом), обращайтесь к Sonny - он гуру в этих вопросах. Да и в целом безопасности!
Да кто вообще может проконсультировать и посоветовать что то? Не подскажешь? Я знаю но поверхостно, но хотелось бы овладеть этим на достойном уровне. Учусь быстро.