- Регистрация
- 28.06.16
- Сообщения
- 40
- Реакции
- 39
копи\паст
Итак, для начала нам понадобятся 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
На этом все, всем удачи в настройке!
Итак, для начала нам понадобятся 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
На этом все, всем удачи в настройке!