Установка и настройка OpenVPN

Иногда бывает необходимость закрыть свой реальный ip-адрес в сети Интернет или подставить адрес другой страны или просто иметь один и тот же ip-адрес независимо от того каким интернет соединением вы пользуетесь. Для решениях всех этих задач придет на помощь OpenVPN, который устанавливается на VPS, VDS или выделенном сервере. В отличии от PPTP технологии, которая использует GRE пакеты для связи с сервером, openvpn использует протоколы TCP/IP или UDP и может использовать любые порты, поэтому openvpn может работать за любыми firewall и NAT.

Лично я для работы OpenVPN использовал VDS с установленной ОС CentOS 5.5 на гипервизоре vmware ESXi. Я устанавливал минимальный набор пакетов, т.к. этот сервер предназначался только как VPN сервер. Не забудьте установить пакеты для компиляции программы, это можно сделать выполнив команду:

# yum groupinstall "Development Tools"

Для работы OpenVPN необходим драйвер TAP\TUN, проверить его наличие можно командой:

# modprobe tun;lsmod | grep tun

Если такого не имеется, то вам нужно будет пересобрать ядро, если же все ок, то идем дальше. Скачиваем и устанавливаем пакет LZO для сжатия трафика.:

# wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
# tar xvzf lzo-2.03.tar.gz
# cd lzo-2.03
# ./configure
# make
# make install

Далее скачиваем и устанавливаем сам сервер OpenVPN:

# wget http://openvpn.net/release/openvpn-2.1.1.tar.gz
# tar xvzf openvpn-2.1.1.tar.gz
# cd openvpn-2.1.1
# ./configure
# make
# make install

После установки нам нужно настроить сервер. Для начала создадим ключи, нам нужно будет зайти в папку с исходниками ~/openvpn-2.1.1/easy-rsa/2.0 и от туда выполнить следующие команды:

# nano vars (в этом файле в последних строках изменяем данные на те, которые нужны нам.)
# . ./vars (загружаем эти переменные в оболочку)
# ./clean-all (отчищаем от старых сертификатов и ключей папку keys)
# ./build-ca  (Создаем Certificate Authority для сервера)
# ./build-key-server  server (Создаем сертификат для сервера)
# ./build-key client  (Создаем сертификат для клиента)

Когда будете создавать сертификаты для сервера и клиента, то обратите внимание на строку «Common Name«, она обязательна к заполнению и значение для сервера и клиента должно быть разное.

Создаем ключ DH:

# ./build-dh

Создаем ключ для tls-аутентификации:

# openvpn --genkey --secret ta.key

После всех этих команд у нас в папке keys появляются файлы ключей (обратите внимание файл «tls-аутентификации» ta.key будет в папке 2.0, т.е. в ~/openvpn-2.1.1/easy-rsa/2.0).

Нам нужно создать папку openvpn в папке etc и скопировать все файлы из папки keys и файл ta.key в папку /etc/openvpn. Клиенту (т.е. на свой компьютер) нужно будет скопировать файлы: ca.crt, dh1024.pem,client.crt, client.key, ta.key.

Теперь создаем конфигурационный файл openvpn.conf.

nano /etc/openvpn/openvpn.conf

следующего содержания:

proto udp
dev tap
port 1194
tls-server
tls-auth ta.key 0
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
mode server
ifconfig 192.168.231.5 255.255.255.0
ifconfig-pool 192.168.231.6 192.168.231.200
push "route-gateway 192.168.231.5"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
duplicate-cn
cipher DES-EDE3-CBC
user nobody
group nobody
persist-tun
persist-key
comp-lzo
keepalive 10 120
verb 3
tun-mtu 1500
fragment 1300
mssfix

В этом файле обратите внимание на строки push «dhcp-option DNS 208.67.222.222» и push «dhcp-option DNS 208.67.222.220» здесь DNS оставить лучше такими, т.к. когда я прописывал ДНС своего провайдера, то были проблемы, провайдер разрешал пользоваться ДНС только своим клиентам и запросы из вне не принимал, я долго не мог понять в чем проблема. Так же обратите внимание на эти три строки:

tun-mtu 1500
fragment 1300
mssfix

без них у меня была оооочень медленная скорость, решение нашел на просторах интернета, на одном из форумов, сейчас уже не помню на каком. И еще, благодаря строке «duplicate-cn» можно использовать один сертификат для всех клиентов (например дать попользоваться VPN вашим друзьям).

Идем дальше, после написание конфига настраиваем сетевые параметры сервера, разрешаем ip-fowrwarding, для этого открываем файл sysctl.conf:

# nano /etc/sysctl.conf

и изменяем значение net.ipv4.ip_forward на 1, у нас получается:

# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename
# Useful for debugging multi-threaded applications
kernel.core_uses_pid = 1
# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1
# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536
# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536
# Controls the maximum shared segment size, in bytes
kernel.shmmax = 4294967295
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 268435456

Сохраняем файл и выполняем команду для применения параметров:

# sysctl -p

Теперь открываем порт 1194, для этого в CentOS выполняем команду:

# system-config-securitylevel-tui

Появляется меню и выбираем кнопку «Customize» и в поле «Other ports» пишем: openvpn:tcp openvpn:udp, дальше жмем «ОК», «ОК» и выходим из меню настройки.
Добавляем правила в iptables:

# iptables -I FORWARD 1 -i tap0 -p udp -j ACCEPT
# iptables -I FORWARD 1 -i tap0 -p tcp -j ACCEPT
# iptables -t nat -A POSTROUTING -s 192.168.231.0/24 -o eth0 -j SNAT --to-source xxx.xxx.xxx.xxx
# service iptables save

где xxx.xxx.xxx.xxx ip-адрес вашего сервера.
Все готово, теперь осталось запустить наш сервер, для этого в папке с исходниками ~/openvpn-2.1.1/sample-scripts копируем файл openvpn.init в папку /etc/init.d/ и переименовываем в openvpn и запускаем сервер командой:

/etc/init.d/openvpn start

Сервер готов, теперь осталось настроить клиента под Windows, для этого скачиваем программу http://openvpn.net/release/openvpn-2.1.1-install.exe, устанавливаем и после в папку C:\Program Files\OpenVPN\config перемещаем полученные ранее файлы ключей (ca.crt, dh1024.pem,client.crt, client.key, ta.key) и создаем файл openvpn.ovpn:

client
proto udp
remote xxx.xxx.xxx.xxx
port 1194
dev tap
resolv-retry infinite
nobind
redirect-gateway def1
route-method exe
persist-tun
persist-key
tls-client
tls-auth ta.key 1
dh dh1024.pem
ca ca.crt
cert client.crt
key client.key
cipher DES-EDE3-CBC
comp-lzo
verb 3
tun-mtu 1500
fragment 1300
mssfix

где xxx.xxx.xxx.xxx адрес сервера VPN.

После этого запускаем OpenVPN GUI и в трее появляется иконка, жмем по ней правой клавишей мышки и выбираем Connect, после чего проверяем какой у нас ip адрес через сервис 2ip.ru.

Оставьте комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.