Настройка и варианты использования OpenVPN

OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT-firewall, без необходимости изменения их настроек. OpenVPN была создана Джеймсом Йонаном (James Yonan) и распространяется под лицензией GNU GPL.

Сегодня мы узнаем, как:

  • Вернуть доступ к youtube.com, если ваш провайдер его заблокировал.
  • Быстро поднять VPN и настроить клиентские устройства (Android, Windows, Debian, dd-wrt) для работу с ним.
  • Безопасно серфить Интернет на открытых точках доступа


1. Предположим, что случилась беда. и вы не можете зайти на один из очень важных для Вас сайтов - например Youtube.

Как понять, что доступ к доступ к youtube.com был заблокирован вашим провайдером? Для этого необходимо сделать трейс и отрезолвить youtube.com с DNS провайдера и Google Public DNS

tracert youtube.com
nslookup youtube.com
nslookup youtube.com 8.8.8.8


DNS провайдера отдает IP заглушки, а трейс до IP youtube.com, полученному запросом к 8.8.8.8 уходит в никуда.

Прокси, тем более публичные, это не серьезно, проблемно и очень не безопасно, нам нужен VPN подумал я, и поэтому решил — пока меня не отвлекают надо приступить к реализации. Для начала выберем сервер.

Использование публичных прокси для работы youtube.com – дело небезопасное и ненадежное, поэтому выбираем VPN-сервер. К примеру, vServer VQ 7 от Hetzner за 7.90 Евро/мес. Зарегистрироваться и купить сервер совсем несложно.

Настройка сервера

После регистрации и покупки vServer VQ 7 заходим в админку и видим наш сервер
Устанавливаем на него debian или то, что Вам по душе, переходим на вкладку Linux, выбираем конфигурацию Debian 6.0 minimal, 32bit, жмем Activate.

Установка начнется после перезагрузки сервера, сделать это можно на вкладке vServer, или по SSH.
На почту Вам придет письмо, где будет пароль root пользователя, подключаемся по SSH к серверу и приступаем к настройке.
# меняем пароль пользователя root:
passwd root


# обновляем список пакетов и установим mc (дело вкуса, но я его ставлю)
apt-get update
apt-get install mc


# установим openvpn и приступим к настройке
apt-get install openvpn
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/


# редактируем переменные
[code]nano ./vars


# меняем строки
export KEY_SIZE=1024  # Длинна ключа
export KEY_EXPIRE=3650 # Срок действия ключа в днях


# описание сертификатов по-умолчанию
 export KEY_COUNTRY="RU"
    export KEY_PROVINCE="RU"
    export KEY_CITY="Moscow"
    export KEY_ORG="http://habrahabr.ru"
    export KEY_EMAIL="org@example.com"



# инициализируем переменные, чистим папку 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


# создадим сертификаты пользователей, сколько вам нужно (вводить данные не обязательно, поля будут принимать значения переменных по-умолчанию, достаточно просто нажимать Enter. В конце будет предложено ввести пароль (Enter export password), он защитит ваш сертификат от импорта недоброжелателями, хорошенько его запомните)

./build-key-pkcs12 vpn.android
./build-key-pkcs12 vpn.windows
./build-key-pkcs12 vpn.debian
./build-key-pkcs12 vpn.ddwrt
./build-key-pkcs12 vpn.home


после этого в папке /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ появятся ваши сертификаты vpn.android.*, vpn.windows.* и другие.

Если захотите создать сертификаты поздней, подключаетесь по SSH, и:

#	cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
#	../vars
#	./build-key-pkcs12 vpn.newuser1
#	./build-key-pkcs12 vpn.newuser2


# настроим сервер
zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
nano /etc/openvpn/server.conf 


# все настройки по-умолчанию нас устроят, меняем, раскомментируем:
 local IP_АДРЕС_ВАШЕГО_СЕРВЕРА
    push "redirect-gateway def1 bypass-dhcp"
    push "dhcp-option DNS 8.8.8.8"
    push "dhcp-option DNS 8.8.4.4"
    client-to-client   # раскомментируйте, если хотите иметь доступ между клиентами внутри вашего VPN
# сохраняем


# применим настройки файрвола через rc.local, можно сделать иначе, но я остановился на этом варианте.
nano /etc/rc.local


 # добавляем строки до exit 0
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE


nano /etc/sysctl.conf # раскомментируем строчку
    net.ipv4.ip_forward=1 


Серверная часть теперь готова, можно подключаться. Для перехода к следующим этапам выгружаем с нашего сервера сертификаты из папки:

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/


Это можно сделать при помощи SSH, либо mc если у вас есть ftp сервер. Нам нужны только некоторые файлы.

Настройка android клиента (root не требуется)

1. Устанавливаем на телефон OpenVPN for Android
2. Загружаем на карту памяти сертификат p12, брать тут
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/vpn.android.p12
3. Запускаем OpenVPN for Android
4. VPN Profiles > Add, вводим любое имя. Приступаем к настройке профиля:
• Basic > Server Address: IP адрес вашего VPN сервера, либо имя домена, если вы его привязали
• Type: PKCS12 File
• Select: Выбираем наш файл *.p12
• PKCS12 Password: вводим пароль импорта сертификата, заданный при его генерации.
5. Готово. Подключаемся и проверяем: текущий статус подключения доступен в панели уведомлений (можно добавить на рабочий стол ярлык для конкретного VPN, он будет стартовать сразу по клику на ярлык).

Настройка Windows клиента

1. Скачиваем и устанавливаем клиент: 32bit | 64bit
2. Создаем файл конфигурации myvpnconfig.ovpn (обычный текстовый файл):

remote IP_вашего_сервера 1194
client
dev tun
ping 10
comp-lzo
proto udp
tls-client
pkcs12 vpn.windows.p12
verb 3
pull


3. Создаем batch-скрипт (start_my_vpn.cmd) для запуска VPN сессии:

 cd C:\some\path\openvpn\
"C:\Program Files\OpenVPN\bin\openvpn.exe" --config C:\some\path\openvpn\myvpnconfig.ovpn


4. Скрипт и конфиг кладем в одну папку, в эту же папку кидаем vpn.windows.p12 сертификат, брать его тут

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/vpn.windows.p12


5. Готово, ярлык на скрипт копируем на рабочий стол, запускаем от имени администратора или от пользователя с его правами, при запуске он попросит ввести пароль для «импорта» сертификата.
Для автостарта туннеля без ввода пароля можно вместо p12 использовать связку сертификатов ca.crt, vpn.windows.key и vpn.windows.crt:

вместо

pkcs12 vpn.windows.p12


пишем:

ca ca.crt
cert vpn.windows.crt
key vpn.windows.key


Файлы брать все там же:

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/


и положить в папку с myvpnconfig.ovpn и start_my_vpn.cmd.

Настройка Linux клиента

Настройка на примере debian 6.0

 # ставим пакет openvpn
apt-get install openvpn


# создаем папку, в любом удобном месте для хранения сертификатов и скрипта подключения к VPN
mkdir /opt/openvpn


# создаем скрипт подключения
echo 'cd /opt/openvpn /usr/sbin/openvpn --config /opt/openvpn/myvpnconfig.ovpn' > /opt/openvpn/start_vpn.run


# создаем файл конфигурации
echo 'remote IP_ВАШЕГО_СЕРВЕРА 1194
client
dev tun
ping 10
comp-lzo
proto udp
tls-client
pkcs12 vpn.debian.p12
verb 3
pull' > /opt/openvpn/myvpnconfig.ovpn

- vpn.debian.p12 берем как обычно на сервере /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/
- вместо p12 можно использовать ca.crt, vpn.debian.key и vpn.debian.crt, как в примере с windows, для того чтобы не вводить пароль для подключения к VPN, это пригодиться например для автозапуска VPN.
chmod +x /opt/openvpn/start_vpn.run


Готово. Не забудьте положить vpn.debian.p12 или ca.crt, vpn.debian.key и vpn.debian.crt в папку со скриптом и файлом конфигурации. Для подключения к VPN, просто выполните с повышенными привилегиями:
/opt/openvpn/start_vpn.run

Настройка роутера на dd-wrt (Big или Mega)

Настройка роутера как клиента сети VPN для возможности удаленного подключения к роутеру требуется, если подключение по внешнему адресу недоступно, например, провайдер внезапно выдал вам NAT'ированный IP. Подключаться можно будет с любого устройства внутри вашего VPN.

1. Перейдите на страницу router_ip/Diagnostics.asp (тех.обслуживание->команды)
2. Если у вас уже есть «Параметры запуска», то нажмите «Редактировать» и добавьте ниже приведенный код после или до вашего. Если «нет», то просто вставьте его в «Командный процессор» и нажмите «Сохранить параметры запуска»
3. Собственно сам код запуска:

#### CERT ####
CA_CRT='-----BEGIN CERTIFICATE-----
C4dczC6ZeWIgri7krQzPIrX5hNYAc676PNv6iomNWVJNkugr
-----END CERTIFICATE-----'

CLIENT_CRT='-----BEGIN CERTIFICATE-----
C4dczC6ZeWIgri7krQzPIrX5hNYAc676PNv6iomNWVJNkugr
-----END CERTIFICATE-----'

CLIENT_KEY='-----BEGIN RSA PRIVATE KEY-----
C4dczC6ZeWIgri7krQzPIrX5hNYAc676PNv6iomNWVJNkugr
-----END RSA PRIVATE KEY-----'                                  
#### CERT ####

#### OPEN VPN ####
OPVPNENABLE=`nvram get openvpncl_enable | awk '$1 == "0" {print $1}'`

if [ "$OPVPNENABLE" != 0 ]
then
   nvram set openvpncl_enable=0
   nvram commit
fi

sleep 30
mkdir /tmp/openvpn; cd /tmp/openvpn

echo "$CA_CRT" > ca.crt
echo "$CLIENT_CRT" > client.crt
echo "$CLIENT_KEY" > client.key

chmod 644 ca.crt client.crt
chmod 600 client.key

sleep 30

echo 'remote IP_ВАШЕГО_СЕРВЕРА 1194
client
dev tun
ping 10
comp-lzo
proto udp
tls-client
ca ca.crt
cert client.crt
key client.key
verb 3
pull' > openvpn.conf

killall openvpn
openvpn --config /tmp/openvpn/openvpn.conf&

### MASQUERADE
iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
iptables -I INPUT -i tun0 -j ACCEPT
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
###

4. Переменные CA_CRT, CLIENT_CRT и CLIENT_KEY - это содержимое файлов ca.crt, vpn.ddwrt.crt и vpn.ddwrt.key соответственно, открывайте их текстовым редактором и копируйте содержимое в vpn.ddwrt.crt (блок будет в самом конце), в двух других копируем содержимое полностью. Брать файлы из:
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/
5. Не забудьте заменить IP_ВАШЕГО_СЕРВЕРА и нажать «Сохранить параметры запуска».
6. Перезагружаем роутер, пробуем подключиться к нему с другого устройства в вашем VPN. Посмотреть VPN IP адрес роутера можно через ifconfig.
fin
Когда вы запустили OpenVPN на любом из клиентских устройств, можете выполнить проверку, что вы выходите в интернет через защищенный канал. Для этого откройте 2ip.ru. Если там будет IP адрес вашего сервера, а провайдером значится Hetzner, - всё в порядке.

Помимо прочего, вы получаете возможность подключаться между устройствами, даже если они находятся за NAT провайдера, что очень удобно. Разумеется .если вы раскомментировали строку client-to-client в конфиге сервера.

Ресурсы в помощь:
1. www.opennet.ru/base/sec/openvpn_server.txt.html
2. wiki.hidemyass.com/DD-WRT_OpenVPN_Setup
3. www.hetzner.de/





Вас также может заинтересовать:

Релиз OpenVPN 2.2.0
Сервер OpenVPN на CentOS
Бесплатное ПО: преимущества и сфера использования
Fedora на пути полного ухода от использования suid-программ в дистрибутиве
Команда Ubuntu Touch надеется представить пререлизы своей ОС, пригодные для ежедневного использования, к концу мая
Настройка SVN + TRAC Centos