OpenVPN на Debian

Материал из poiuty wiki
Перейти к: навигация, поиск

Установим пакеты с репозитория.

apt-get install openvpn udev dnsmasq

Редактируем /usr/share/doc/openvpn/examples/easy-rsa/2.0/vars

export KEY_SIZE=1024 # для параноиков - используйте 2048
export KEY_EXPIRE=3650 # Срок действия ключа в днях
export KEY_COUNTRY="RU"
export KEY_PROVINCE="RU"
export KEY_CITY="Moscow"
export KEY_ORG="https://poiuty.com"
export KEY_EMAIL="poiuty@lepus.su"

Инициализируем переменные и чистим папку keys и создаем сертификаты.

cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
source ./vars
./clean-all

./build-ca	# корневой сертификат
./build-key-server server	# сертификат сервера
./build-dh	# ключ Диффи Хельман
openvpn --genkey --secret ./keys/ta.key
./build-key-pkcs12 vpn.home

Перенесем полученные сертификаты в рабочую папку.

cp ./keys/ca.crt /etc/openvpn
cp ./keys/server.crt /etc/openvpn
cp ./keys/server.key /etc/openvpn
cp ./keys/dh1024.pem /etc/openvpn
cp ./keys/ta.key /etc/openvpn

Распакуем конфиг openvpn.

zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

Редактируем /etc/openvpn/server.conf

local 82.146.58.190 

port 1194
proto udp
dev tun

ca      /etc/openvpn/ca.crt
cert    /etc/openvpn/server.crt
key     /etc/openvpn/server.key
dh      /etc/openvpn/dh1024.pem

server 10.8.1.0 255.255.255.0  # internal tun0 connection IP
ifconfig-pool-persist ipp.txt

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client
tls-auth /etc/openvpn/ta.key 0

keepalive 10 120

comp-lzo
persist-key
persist-tun

verb 3

Настроим dnsmasq, для этого откроем файл /etc/dnsmasq.conf

listen-address=127.0.0.1,10.8.0.1
bind-interfaces

В /etc/rc.local добавляем (если у вас OpenVZ VPS - пропускаем)

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Отредактируем /etc/sysctrl.conf

net.ipv4.ip_forward=1

multiple OpenVPN instances

На одном сервере нужно было поднять на разных ip несколько openvpn клиентов.
init.d script openvpn (debian 7) умеет запускать несколько конфигов.

# ls  /etc/openvpn/
ca.crt      ipp.txt  server10.conf  server2.conf  server4.conf  server6.conf  server8.conf  server.conf  server.key  update-resolv-conf
dh1024.pem  log      server11.conf  server3.conf  server5.conf  server7.conf  server9.conf  server.crt   ta.key

Сделал разные сети в каждом из этих конфигов.

server 10.8.X.0 255.255.255.0

Не использовал dnsmasq и iptables ... MASQUERADE
Сделал правила с использованием SNAT.

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to 82.146.56.239
iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 -j SNAT --to 82.146.58.190
iptables -t nat -A POSTROUTING -s 10.8.2.0/24 -o eth0 -j SNAT --to 92.63.104.192
iptables -t nat -A POSTROUTING -s 10.8.3.0/24 -o eth0 -j SNAT --to 92.63.104.193
iptables -t nat -A POSTROUTING -s 10.8.4.0/24 -o eth0 -j SNAT --to 92.63.104.198
iptables -t nat -A POSTROUTING -s 10.8.5.0/24 -o eth0 -j SNAT --to 92.63.104.201
iptables -t nat -A POSTROUTING -s 10.8.6.0/24 -o eth0 -j SNAT --to 92.63.104.220
iptables -t nat -A POSTROUTING -s 10.8.7.0/24 -o eth0 -j SNAT --to 92.63.104.229
iptables -t nat -A POSTROUTING -s 10.8.8.0/24 -o eth0 -j SNAT --to 92.63.104.243
iptables -t nat -A POSTROUTING -s 10.8.9.0/24 -o eth0 -j SNAT --to 92.63.104.244
iptables -t nat -A POSTROUTING -s 10.8.10.0/24 -o eth0 -j SNAT --to 92.63.104.250

Теперь, если клиент коннектится к 10.8.1.0 -> у него будет ip 82.146.58.190.

Для OpenVZ VPS

Если вы арендуете VPS - напишите в саппорт хостинга.
Включаем TUN/TAP. Не забудьте добавить модуль tun в автозагрузку.

modprobe tun
CTID=101
vzctl set $CTID --devnodes net/tun:rw --save
vzctl set $CTID --devices c:10:200:rw --save
vzctl set $CTID --capability net_admin:on --save
vzctl exec $CTID mkdir -p /dev/net
vzctl exec $CTID mknod /dev/net/tun c 10 200
vzctl exec $CTID chmod 600 /dev/net/tun

Включаем поддержку NAT для VPS. Добавляем в /etc/vz/vz.conf или в /etc/sysconfig/vz-scripts/101.conf

IPTABLES= "... ipt_state iptable_nat"

Редактируем /etc/rc.local

# route
iptables -t nat -A POSTROUTING -o venet0 -j SNAT --to IP_VPS
iptables -A FORWARD -i venet0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun0 -o venet0 -j ACCEPT

/etc/init.d/dnsmasq restart

Ограничение доступа по IP

Если у вас статический IP - можно ограничить доступ к VPN.
Редактируем /etc/rc.local

iptables -N ALLOWED
iptables -A INPUT -j ALLOWED
iptables -A ALLOWED -s ВАШ_ИП -j ACCEPT
iptables -A INPUT --dport 1194 -j DROP

Настройка клиента на Windows

Скачаем OpenVPN client. Сертификаты ta.key, vpn.home.p12 и перемещаем в C:\Program Files\OpenVPN\config
vpn1.png


Создаем конфиг файл myvpnconfig.ovpn

remote IP_SERVER 1194
client
dev tun
ping 10
comp-lzo
proto udp
tls-client
remote-cert-tls server
pkcs12 vpn.home.p12
verb 3
pull
tls-auth ta.key 1

Теперь открываем C:\Program Files\OpenVPN\bin и выставляем для openvpn-gui.exe -> "запуск от администратора".
vpn2.png


Запускаем openvpn-gui.exe и если все нормально -> будет так.
vpn3.png

Медленная скорость

Если медленно работает, попробуйте поиграть с значениями tun-mtu, mssfix и fragment.
Отключить шифрование и попробовать разные протоколы tcp и udp.
Так же проверьте скорость между хостом и клиентом с помощью iperf.