OpenVPN на Debian

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

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

apt-get install openvpn udev dnsmasq easy-rsa
cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa

Редактируем /etc/openvpn/easy-rsa/vars

export KEY_SIZE=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 /etc/openvpn/easy-rsa
ln -s openssl-1.0.0.cnf openssl.cnf
./clean-all
source ./vars
./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/dh2048.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 0.0.0.0

port 1194
proto udp
dev tun

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

server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

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

keepalive 10 120

persist-key
persist-tun

tls-version-min 1.2
#tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384 # dont work for iphone/ ipad
cipher AES-256-CBC
auth SHA512
reneg-sec 86400

verb 3
status openvpn-status.log
log /var/log/openvpn.log

Настроим 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

Andriod /IOS client

Устанавливаем openvpn andriod, ios. Создаем сертификат.

./build-key ipad

Собираем все в один файл client.ovpn - далее импортируйте файл на ваше устройство (например по почте).

echo "proto udp" > client.ovpn
echo "remote IP PORT" >> client.ovpn
echo "mute-replay-warnings" >> client.ovpn
echo "auth SHA512" >> client.ovpn
echo "cipher AES-256-CBC" >> client.ovpn
echo "key-direction 1" >> client.ovpn
echo "<ca>" >> client.ovpn
cat ca.crt | grep -A 100 "BEGIN CERTIFICATE" | grep -B 100 "END CERTIFICATE" >> client.ovpn
echo "</ca>" >> client.ovpn
echo "<cert>" >> client.ovpn
cat ipad.crt | grep -A 100 "BEGIN CERTIFICATE" | grep -B 100 "END CERTIFICATE" >> client.ovpn
echo "</cert>" >> client.ovpn
echo "<key>" >> client.ovpn
cat ipad.key | grep -A 100 "BEGIN PRIVATE KEY" | grep -B 100 "END PRIVATE KEY" >> client.ovpn
echo "</key>" >> client.ovpn
echo "<tls-auth>" >> client.ovpn
cat ta.key | grep -A 100 "BEGIN OpenVPN Static key V1" | grep -B 100 "END OpenVPN Static key V1" >> client.ovpn
echo "</tls-auth>" >> client.ovpn

Структура client.ovpn

proto udp
remote IP PORT
mute-replay-warnings
auth SHA512
cipher AES-256-CBC
key-direction 1
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
</tls-auth>

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.