суббота, 7 февраля 2015 г.

Настройка OpenVPN на VPS

Очередная миллионная заметка по настройке OpenVPN. В связи с санкциями в Крыму приходится пропускать трафик через VPS.

Если вы используете OpenVZ VPS, то скорее всего устройство TUN не включено.
Проверить это можно так:
root@vps:~# ls /dev/tun
Если его нет, то нужно обратиться к хостеру VPS, они включат.

После того, как TUN вам включили, можно перейти к настройке.
Для примера использую Debian.

Обновляем пакеты, устанавливаем OpenVPN и переходим в рабочий каталог:
# apt-get update && apt-get upgrade
# apt-get install openvpn
# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/

Если хотите, то можно отредактировать переменные, я этого не делал:
# vim ./vars

Переходим в рабочий каталог, инициализируем переменные, чистим каталог keys и создаем сертификаты:
# . ./vars
# . ./clean-all
# ./build-ca
# ./build-key-server server
# ./build-dh

Переносим ключи в системный каталог:
# cp ./keys/ca.crt /etc/openvpn
# cp ./keys/server.crt /etc/openvpn
# cp ./keys/server.key /etc/openvpn
# cp ./keys/dh1024.pem /etc/openvpn

Создаем сертификат пользователя (можно несколько, но мне нужен был пока только один).
При генерации сертификата нужно будет ввести пароль, запомните его:
# ./build-key-pkcs12 vpn.home
# ls /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/vpn.home*

Правим настройки сервера:
# zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
# vim /etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
client-to-client

Добавляем правило IPTables в rc.local, где a.b.c.d - IP адрес сервера:
# vim /etc/rc.local
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source a.b.c.d
exit 0

Разрешаем форвардинг:
# vim /etc/sysctl.conf
net.ipv4.ip_forward=1

Перезагружаем VPS'ку:
# reboot

На этом настройка сервера окончена.
Далее необходимо заняться настройкой клиента. Я использую Linux Mint.

Копирую ключи с сервера:
user@mint-17 ~ $ scp [email protected]:/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/vpn.home* ~/Downloads

Установка OpenVPN клиента:
user@mint-17 ~ $ sudo apt-get install openvpn

Создаем рабочий каталог и скрипт запуска, заполняем его:
user@mint-17 ~ $ sudo mkdir /opt/openvpn
user@mint-17 ~ $ sudo vim /opt/openvpn/start_vpn.run
user@mint-17 ~ $ cd /opt/openvpn
user@mint-17 ~ $ /usr/sbin/openvpn --config /opt/openvpn/myvpnconfig.ovpn

Создаем конфиг OpenVPN клиента и заполняем его:
user@mint-17 ~ $ sudo vim /opt/openvpn/myvpnconfig.ovpn
remote a.b.c.d 1194
client
dev tun
ping 10
comp-lzo
proto udp
tls-client
remote-cert-tls server
pkcs12 vpn.home.p12
verb 3
pull

Делаем скрипт запуска исполняемым и копируем ранее скачанные с сервера сертификаты в рабочий каталог:
user@mint-17 ~ $ sudo chmod +x /opt/openvpn/start_vpn.run
user@mint-17 ~ $ sudo cp ~/Downloads/vpn.home.p12 /opt/openvpn/

Запуск скрипта:
user@mint-17 ~ $ sudo /opt/openvpn/start_vpn.run

После этого VPN должен работать.

user@mint-17 ~ $ ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.6  P-t-P:10.8.0.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:1283132 errors:0 dropped:0 overruns:0 frame:0
          TX packets:614443 errors:0 dropped:43 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:1752960275 (1.7 GB)  TX bytes:97814022 (97.8 MB)

user@mint-17 ~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.8.0.5        128.0.0.0       UG    0      0        0 tun0
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
10.8.0.0        10.8.0.5        255.255.255.0   UG    0      0        0 tun0
10.8.0.5        *               255.255.255.255 UH    0      0        0 tun0
128.0.0.0       10.8.0.5        128.0.0.0       UG    0      0        0 tun0
a.b.c.d 192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     1      0        0 eth0

Если же хотите работать с NetworkManager, то в Linux Mint можно сделать так:
$ sudo apt-get install network-manager-openvpn network-manager-openvpn-gnome
$ sudo restart network-manager

После этого на панели в трее выбрать значок NetworkManager'а и добавить новое сетевое соединение, выбрать импорт конфигурации. После этого все работает через GUI.

Комментариев нет: