OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Для обеспечения безопасности управляющего канала и потока данных, OpenVPN использует библиотеку OpenSSL.
Подключаем репозиторий Epel
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
Устанавливаем OpenVPN
# yum -y install openvpn
Добавляем в автозагрузку
# chkconfig openvpn on
Копируем набор скриптов для генерации скриптов и сертификатов
# cp -R /usr/share/openvpn/easy-rsa/2.0/ /etc/openvpn/
Редактируем файл /etc/openvpn/2.0/vars
export KEY_COUNTRY="UA" export KEY_PROVINCE="OD" export KEY_CITY="Odessa" export KEY_ORG="bezha.od.ua" export KEY_EMAIL="vitaliy@bezha.od.ua"
Инициализируем переменные
# source ./vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/2.0/keys
Очищаем директорию keys
# ./clean-all
Создаем сертификат и ключ CA путём интерактивного вызова команды ./build-ca
# ./build-ca Generating a 1024 bit RSA private key
Создаем сертификат и ключ для сервера
# ./build-key-server server Generating a 1024 bit RSA private key
Генерируем Diffie Hellman
# ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time
Генерируем ключ и сертификат для клиента
# ./build-key client1
Копируем файлы ca.crt ca.key dh1024.pem server.crt server.key в папку openvpn
# cd /etc/openvpn/2.0/keys/ # cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn
Создаем конфигурационный файл VPN-сервера в /etc/openvpn/
# mcedit /etc/openvpn/server.conf
# Порт для подключений port 1194 proto tcp # Устройство dev tun # Расположение сертификатов и ключей ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh1024.pem # Параметры для виртуального туннеля сервера VPN server 10.10.10.0 255.255.255.0 ifconfig-pool-persist ipp.txt # Прописываем маршруты push "route 10.10.10.0 255.255.255.0" push "redirect-gateway" push "dhcp-option DNS 8.8.8.8" # Разрешаем клиентам обмениваться пакетами client-to-client # Проверяем соединение каждые 10 секунд, если его нет то через 120 секунд переподключаем keepalive 10 120 # Используем компрессию comp-lzo # Назначаем пользователя и группу для работы с OpenVPN user nobody group nobody # Не перечитывать ключи после получения SIGUSR1 или ping-restart persist-key # Не закрывать или переоткрывать TUN\TAP устройство, после получения SIGUSR1 или ping-restart persist-tun # Записывать статус сервера OpenVPN status openvpn-status.log # Логи log /var/log/openvpn.log # Уровень отладки verb 3 mute 10
Проверяем ip_forward
# grep net.ipv4.ip_forward /etc/sysctl.conf net.ipv4.ip_forward = 1
Прописываем правило в iptables и сохраняем его чтобы не потерять при перезагрузке,
где x.x.x.x — это venet0:0 inet addr
# iptables -t nat -A POSTROUTING -s 10.10.10.0/255.255.255.0 -o venet0 -j SNAT --to-source x.x.x.x # iptables-save > /etc/sysconfig/iptables # chkconfig iptables on
Проверяем правило
# iptables -L -t nat Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 10.10.10.0/24 anywhere to:x.x.x.x
Запускаем OpenVPN сервер
# service openvpn start Starting openvpn: [ OK ]
Добавился новый интерфейс tun0
# 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.10.10.1 P-t-P:10.10.10.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Настройка клиента для Linux
Устанавливаем OpenVPN на Debian
# apt-get -y install openvpn
Устанавливаем OpenVPN на CentOS
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm # yum -y install openvpn
Создаем файл /etc/openvpn/openvpn.conf, где x.x.x.x — это venet0:0 inet addr OpenVPN сервера
client dev tun proto tcp remote x.x.x.x 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client1.crt key client1.key comp-lzo verb 3
Записываем ключи ca.crt, client1.crt, client1.key c openvpn сервера безопасным способом на клиент, где y.y.y.y адрес клиентской машины
# scp ca.crt 2.0/keys/client1.key 2.0/keys/client1.crt root@y.y.y.y:/etc/openvpn
Запускаем OpenVPN CentOS-way
# service openvpn restart # chkconfig openvpn on
Запускаем OpenVPN Debian-way
# /etc/init.d/openvpn start
Проверяем поднятый интерфейс
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.10.10.6 P-t-P:10.10.10.5 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:4639 errors:0 dropped:0 overruns:0 frame:0 TX packets:4504 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:3481328 (3.4 MB) TX bytes:766042 (766.0 KB)
Проверяем что весь трафик идет через VPN сервер
# traceroute ya.ru traceroute to ya.ru (77.88.21.3), 30 hops max, 60 byte packets 1 10.10.10.1 (10.10.10.1) 29.888 ms 78.337 ms 78.386 ms ... 6 titanium-vlan908.yandex.net (213.180.208.94) 118.275 ms 155.505 ms 70.108 ms 7 gallium-vlan901.yandex.net (77.88.56.126) 201.368 ms 141.281 ms 201.208 ms 8 l3-s900-s3000.yandex.net (213.180.213.4) 201.468 ms 201.499 ms 201.498 ms 9 www.yandex.ru (77.88.21.3) 201.256 ms 201.181 ms 201.248 ms
Клиент для Windows
Устанавливаем пакет http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe
Записываем ключи ca.crt, client1.crt, client1.key c openvpn сервера безопасным способом на Windows XP в папку куда установили программу openvpn
Конфигурационный файл программы , где x.x.x.x — это venet0:0 inet addr OpenVPN сервер
client dev tun proto tcp remote x.x.x.x 1194 resolv-retry infinite persist-key persist-tun ca c:\\OpenVPN\\ca.crt cert c:\\OpenVPN\\client1.crt key c:\\OpenVPN\\client1.key comp-lzo verb 3
Выполняем Connect на клиенте openvpn-2.0.9-gui