Иногда бывает необходимость закрыть свой реальный 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.