Установка и настройка OpenVPN версии 2.1.3 на арендованом VDS/VPS с CentOS 5. Пошаговый мануал со слайдами.
UPD: Исправил ман под разные архитерктуры серверов.
Введение.
Описывать отличие PPTP от OpenVPN здесь не буду, это тема отдельной статьи, поверьте на слово, что OpenVPN на порядок лучше и безопастнее PPTP.
Для желающих узнать больше на эту тему - кратко в сравнительной таблице.
Что нам понадобится?
-Арендованый VPS/VDS с root доступом.
Список провайдеров и организаций, предоставлющих такие сервера, можно найти на любом сайте, посвященному обзору хостинга, например тут
-Установленная на сервере CentOS 5.
Зачастую при заказе VPS/VDS провайдеры и организации предлогают сразу выбрать предустановленную ОС. Выбираем CentOS 5.
-Для полной анонимности - платежный метод, по которому невозможно узнать ваши личные данные.
Это может быть, например, виртуалка, купленная на plati.ru или платежная система типа w1.ru, персонализация в которой ПОКА не нужна и кошелек в которой можно пополнить через терминалы или обменом другой валюты. Списки обменников ищем на bestchange.ru или любом другом мониторинге обменников.
-Клиент для удаленного доступа на сервер по SSH под названием PuTTY
-Клиент для передчи данных по SFTP (Secret FTP) WinSCP
-OpenVPN GUI клиент для Windows, с помощью которого мы и будем подключаться к нашему VPN-у.
Что мы получим в итоге?
Как минимум:
-Сокрытие реального IP адреса.
-Сжатие траффика благодаря установленному алгоритму сжатия данных имени Лемпеля-Зива-Оберхеймера (LZO). Актуально для тех кто сидит на 3G.
-Собственноручный контроль над логами, как следствие - спокойный сон и крепкое здоровье.
-Небольшой опыт в собственноручном администрировании сервера, работающего на nix-ах =)
Итак, поехали
После оплаты VPD/VDS вам выдадут IP-адрес сервера и пароль для пользователя root.
Нам нужно зайти на сервер как root.
Запускаем PuTTY и вводим в строку Host Name (or IP address) IP нашего сервера, порт оставляем 22 (это порт SSH), жмем Open.
Для примера я буду использовать IP-адресс 156.156.156.156

Видим следующую картину:

то поздравляю, вы на зашли на сервер как root. Если получаем ответ Access denied - неправильно введен пароль.
Все комманды, указаные ниже, нужно просто копировать, вставлять в PuTTY и жмакать Enter ))
Для начала проверим наличие драйвера TAP\TUN такой коммандой:
Код:
modprobe tun;lsmod | grep tun
Код:
tun 13836 0
Если же нет -
1) нужно пересобрать ядро дистрибутива самостоятельно
Это не так страшно как звучит и занимает 5 минут времени.
Подробный мануал тут.
2) нужно написать в саппорт хостера следующее "Пожайлуста, активируйте TUN/TAP устройства"
Итак, TAP\TUN на месте, устанавливаем пакеты, необходимые для OpenVPN.
Код:
yum install gcc rpm-build autoconf.noarch zlib-devel pam-devel lzo lzo-devel openssl-devel automake imake pkgconfig gcc-c++ libcrypto.so.6
Код:
cat /etc/redhat-release uname -i
Для архитектуры i386
Код:
wget openvpn.net/release/openvpn-2.1.3.tar.gz wget openvpn.net/release/lzo-1.08-4.rf.src.rpm wget ftp://ftp.muug.mb.ca/mirror/fedora/e...el5.1.i386.rpm wget ftp://ftp.muug.mb.ca/mirror/fedora/e...el5.1.i386.rpm
Код:
wget openvpn.net/release/openvpn-2.1.3.tar.gz wget openvpn.net/release/lzo-1.08-4.rf.src.rpm wget ftp://ftp.muug.mb.ca/mirror/fedora/e...5.1.x86_64.rpm wget ftp://ftp.muug.mb.ca/mirror/fedora/e...5.1.x86_64.rpm
Для Centos 5.x и i386
(для x86_64 архитектуры меняем "i386" на "x86_64")
Код:
rpmbuild -–r***ild lzo-1.08-4.rf.src.rpm rpm -Uvh /usr/src/redhat/RPMS/i386/lzo-*.rpm rpm -ivh pkcs11-helper-*.rpm rpmbuild -tb openvpn-2.1.3.tar.gz rpm -Uvh /usr/src/redhat/RPMS/i386/openvpn-2.1.3-1.i386.rpm
(для x86_64 архитектуры меняем "i386" на "x86_64")
Код:
rpmbuild --r***ild lzo-1.08-4.rf.src.rpm rpm -Uvh /root/rpmbuild/RPMS/i386/lzo-*.rpm rpm -ivh pkcs11-helper-*.rpm rpmbuild -tb openvpn-2.1.3.tar.gz rpm -Uvh /root/rpmbuild/RPMS/i386/openvpn-2.1.3-1.i386.rpm
Код:
cp -r /usr/share/doc/openvpn-2.1.3/easy-rsa/ /etc/openvpn/
Код:
cd /etc/openvpn/2.0
Код:
source ./vars . ./vars
Код:
./clean-all
Код:
./build-ca
Common Name (eg, your name or your server's hostname)
Сюда вписываем
Код:
OpenVPN
Дальше генерируем сертификат для сервера:
Код:
./build-key-server server
На вопросы, требующие выбора Y/N везде отвечаем Y.
Сгенерируем сертификат клиента:
Код:
./build-key client
На вопросы, требуещие выбора Y/N везде отвечаем Y.
Сгенерируем ключ DH (Diffie Hellman):
Код:
./build-key client
Код:
openvpn --genkey --secret ta.key
После проделаных действий в каталоге /etc/openvpn/2.0/keys появятся все наши ключи.
Файл ta.key будет в каталоге /etc/openvpn/2.0, скопируем его к ключам
Код:
cp ta.key /etc/openvpn/2.0/keys/ta.key
Код:
nano /etc/openvpn/server.conf
Код:
yum install nano
Код:
nano /etc/openvpn/server.conf
Код:
local xx.xx.xx.xx #сюда пишем IP адрес своего сервера port 1194 proto udp dev tap tun-mtu 1500 tun-mtu-extra 32 mssfix fragment 1300 cipher DES-EDE3-CBC tls-server tls-auth /etc/openvpn/2.0/keys/ta.key 0 ca /etc/openvpn/2.0/keys/ca.crt cert /etc/openvpn/2.0/keys/server.crt key /etc/openvpn/2.0/keys/server.key dh /etc/openvpn/2.0/keys/dh1024.pem mode server user nobody group nobody max-clients 2 duplicate-cn server 1.2.4.0 255.255.255.0 push "route-gateway 1.2.4.5" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" keepalive 10 120 comp-lzo persist-key persist-tun verb 0 log /dev/null status /dev/null log-append /dev/null
Хочу прокомментировать некоторые параметры, указаные в конфиге.
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Это DNS-ы принадлежащие opendns.com. При желании их можно заменить любыми Free DNS серверами, список прикреплен в самом низу статьи.
max-clients 2
Здесь указано максимальное кол-во одновременных подключений к серверу, в данном случае два клиента.
duplicate-cn
Строка указывает на то, что может быть использован один сертификат для нескольких клиентов.
Это если вы хотите дать попользоваться VPN-ом другу/брату/свату.
Если будете пользоваться только вы один - можете вообще убрать эту строку, а в max-clients указать 1.
verb 0
Строка указывает, как подробно нужно вести логи, значение от 0 до 3.
0 - логи не ведуться, 3 - логи ведуться подробно.
log /dev/null
status /dev/null
log-append /dev/null
Строки указывают, куда мы пишем/шлем логи =) А шлем мы их в нулл, другими словами (не вдаваясь в подробности) - удаляем.
Вернемся к нашим баранам и настроим сетевые параметры сервера.
Разрешим ip-fowrwarding:
Код:
nano /etc/sysctl.conf
Выходим и сохраняемся.
Для применения параметров выполняем комманду:
Код:
sysctl -p
Для этого выполняем комманду:
Код:
system-config-securitylevel-tui
Код:
yum install system-config-securitylevel-tui
Код:
system-config-securitylevel-tui
Код:
openvpn:tcp openvpn:udp
Теперь добавим правила в фаервол, включающие трансляцию адресов (NAT), дабы пакеты от клиента попадая на сервак могли уйти в инет и также вернуться назад:
Код:
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 1.2.4.0/24 -o eth0 -j SNAT --to-source ХХХ.ХХХ.ХХХ.ХХХ
Сохраним настройки таблицы iptables и добавим их в автозагрузку:
Код:
service iptables save > /etc/sysconfig/iptables
Код:
chkconfig --list iptables
Код:
iptables 0 : off 1 : off 2 : on 3 : on 4 : on 5 : on 6 : off
Код:
iptables 0 : off 1 : off 2 : off 3 : off 4 : off 5 : off 6 : off
Код:
chkconfig --add iptables chkconfig --level 2345 iptables on service iptables start chkconfig --list iptables
Код:
service openvpn start
Если выдает ошибку - копируем текст ошибки в топик на обсуждение или же сами ищем в гугле решение проблемы.
Тепрь можно вернуться в любимую винду, инсталируем OpenVPN GUI.
После инсталяции не выключая PuTTY запускаем WinSCP.
В графу Host name вводим IP-адрес нашего сервера, Port number: 22, User name: root

Подключаемся, вводим пароль на сервер, видим каталоги и файлы на сервере в знакомом графическом формате =)
Переходим в папку /etc/openvpn/2.0/keys/
Копируем себе на винт в папку C:\Program Files(x86)\OpenVPN\config\ следующие файлы:
Код:
ca.crt dh1024.pem client.crt client.key ta.key
В него пишем следующее:
Код:
client proto udp remote ХХХ.ХХХ.ХХХ.ХХХ 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 remote-cert-tls server
Ну и последний шаг - запускаем OpenVPN GUI, в трее на иконке правой кнопкой мыши -- Connect.
Видим примерно следующую картину:

Если иконка в трее загорелась зеленым - радуемся и гордимся собой =)
Идем на Whoer.net/Ip-Score, проверяем IP адрес.
Должен быть IP вашего VPS/VDS.
Если по Whoer светятся ваши родные DNS:
1) Ставим плагин для FireFox под названием DNS Cache, перезагружаем браузер, на иконке плагина (внизу справа) - правая кнопка мыши -- Flush DNS Cache.
Если не юзаем FireFox - жмем Win+R (Выполнить), вписываем ipconfig /flushdns
2) Если не помогла - заходим в настройки подключения (для основного адаптера + TAP-Win32 адаптера) и в свойствах IP4 прописываем DNS-ы от opendns.com (208.67.222.222 и 208.67.220.220) или любые другие Free DNS.
Для проверки входящего/ исходящего канала на сервере можно воспользоваться утилитой tcpdump.
Инсталируем ее:
Код:
yum install tcpdump
На сервере запускаем tcpdump для прослушивания интерфейса tap0 и сниффинга уходящих с сервера пакетов:
Код:
tcpdump -i tap0 -lenx
Для прослушивания канала между клиентом (компом) и сервером по интерфейсу eth0:
Код:
tcpdump -i eth0 udp port 1194 -lenx
Для полной уверености можно скачать и заснифать исходящий канал интернета с помошью программы WireShark.
Основная проблема с которой можно столкнуться:
При подключении к серверу в статусе OpenVPN GUI видим следующее
Код:
Note: Cannot open TUN/TAP dev /dev/net/tap: No such file or directory (errno=2) Note: Attempting fallback to kernel 2.2 TUN/TAP interface TUN/TAP device /dev/tap0 opened /sbin/ip link set dev tap0 up mtu 1500 SIOCSIFMTU: No such device