OpenVPN


openvpn

Установка и работа.



OpenVPN — реализация виртуальной частной сети (Virtual Private Network) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Позволяет устанавливать соединения между компьютерами, находящимися за NAT и сетевым экраном, без необходимости изменения их настроек.


Действия производятся на ubuntu 12.04, для 14.04 в тексте сделано уточнение.

Настройка OpenVPN для OpenWRT описана здесь.



Установка VPN-сервера

Становимся суперпользователем:

sudo su


Устанавливаем пакет openvpn

apt-get install openvpn

Запускать сервер пока рано, надо выполнить подготовительные действия.


Создание ключей

В пакет openvpn входит набор (EASY-RSA) скриптов для управления RSA-ключами и веб-сертификатами SSL VPN. Эти скрипты расположены в папке /usr/share/doc/openvpn/examples/easy-rsa/, и их нужно скопировать в папку /etc/openvpn/.

cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn


Для Ubuntu 14.04
С 2013 года, easy-rsa не входит в OpenVPN и команда указанная выше не сработает(не найдет easy-rsa), поэтому делаем так:

apt-get install easy-rsa

mkdir /etc/openvpn/easy-rsa

cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa

mv /etc/openvpn/easy-rsa/easy-rsa /etc/openvpn/easy-rsa/2.0



Переходим в папку /etc/openvpn/easy-rsa/2.0/:

cd /etc/openvpn/easy-rsa/2.0/


Создаём символьную ссылку файла конфигурации ssl:

ln -s openssl-1.0.0.cnf openssl.cnf


Запускаем скрипт vars для настройки переменных. В этом скрипте можно изменить длину ключей, срок действия и т.д. Новички могут оставить всё как есть.

Между точкой и слешем стоит пробел.

. /etc/openvpn/easy-rsa/2.0/vars


Появится сообщение говорящее о том, что если запустить скрипт ./clean-all, то будут удалены все раннее созданые ключи. У Вас их конечно нету, но всё же выполним рекомендацию.

openvpn

Запускаем:

. /etc/openvpn/easy-rsa/2.0/clean-all





Создаём корневой сертификат PKI. На все вопросы нажимаем Enter.
В дальнейшем, когда обретёте уверенность, можете вписать свои данные, в конце скрипта vars.

. /etc/openvpn/easy-rsa/2.0/build-ca




В папке /etc/openvpn/easy-rsa/2.0/keys/ появятся сертификат и ключ — ca.crt и ca.key




Генерируем сертификат и ключ для VPN-сервера. Так же как и в предыдущем случае, нажимаем несколько раз Enter и два раза букву y (для подтверждения подписи). Пароль можно не создавать.

. /etc/openvpn/easy-rsa/2.0/build-key-server server

В папке /etc/openvpn/easy-rsa/2.0/keys/ появятся файлы — server.crt, server.csr и server.key




Для усиления безопасности можно создать TLS-ключ. Ещё он будет мешать DoS-атакам.

openvpn --genkey --secret /etc/openvpn/ta.key

В папке /etc/openvpn/ появятся файл — ta.key. Этот файл должен быть и на сервере и на клиенте, но об этом позже.





Создаём сертификаты и ключи для клиента. Для каждого клиента создаются свои ключи. Опять же повторится история с Enter и y.

. /etc/openvpn/easy-rsa/2.0/build-key client1

Это для первого клиента...


. /etc/openvpn/easy-rsa/2.0/build-key client2

Это для второго и т.д...

В папке /etc/openvpn/easy-rsa/2.0/keys/ появятся файлы — client1.crt, client1.csr и client1.key


Если в дальнейшем у Вас будут появляться клиенты, то создать для них сертификаты можно в любое время, выполнив команды:

cd /etc/openvpn/easy-rsa/2.0/

. /etc/openvpn/easy-rsa/2.0/vars

. /etc/openvpn/easy-rsa/2.0/build-key client3





Генерируем файл с параметрами протокола Диффи-Хеллмана, он будет определять метод обмена ключами между VPN-сервером и VPN-клиентом.

Это займёт некоторое время, будут бежать плюсики и точечки.)

. /etc/openvpn/easy-rsa/2.0/build-dh


После этого, в папке /etc/openvpn/easy-rsa/2.0/keys/ будет создан файл dh2048.pem.
Его название говорит нам о длине ключа — 2048 бита. Это значение можно менять в файле /etc/openvpn/easy-rsa/2.0/vars.




Теперь для удобства (чтоб не прописывать пути в конфигурационном файле сервера) перенесём файлы ca.crt, ca.key, dh2048.pem, server.crt и server.key в папку /etc/openvpn.

Переходим в папку /etc/openvpn/easy-rsa/2.0/keys:

cd /etc/openvpn/easy-rsa/2.0/keys


И копируем:

cp ca.crt ca.key dh2048.pem server.crt server.key /etc/openvpn


С ключами разобрались.




Конфигурирование

Сервер


Разрешим форвардинг на сервере:

nano /etc/sysctl.conf


Необходимо раскомментировать строчку:

net.ipv4.ip_forward=1

Сохранить...

И применить изменения:

sysctl -p /etc/sysctl.conf



В папке /usr/share/doc/openvpn/examples/sample-config-files находятся примеры конфигурационных файлов для сервера и клиентов.

Переходим в папку с примерами:

cd /usr/share/doc/openvpn/examples/sample-config-files


Распаковываем файл server.conf.gz

gunzip -d server.conf.gz


Копируем его в папку /etc/openvpn/

cp server.conf /etc/openvpn/


И переходим в неё:

cd /etc/openvpn/


Открываем server.conf

nano /etc/openvpn/server.conf

Здесь можно почитать про различные настройки.

Если Вы не хотите разбираться в этом, тогда удалите всё и вставьте нижеследующее:


port 1194

proto udp

dev tun

topology subnet

server 10.25.0.0 255.255.255.0

keepalive 10 120

comp-lzo # Использовать сжатие

persist-key
persist-tun

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

#tls-auth ta.key 0 # если создавали ta.key, то раскомментируйте

#client-to-client # если нужно чтоб клиенты видели друг-друга, то раскомментируйте

log-append /var/log/openvpn.log

verb 3 # уровень информативности отладочных сообщений (0 - 10)

Сервер OpenVPN получит адрес 10.25.0.1, а клиенты будут получать адреса 10.25.0.2 и т.д.


Если сервер находится за NAT, то добавьте в /etc/rc.local правило:

iptables -t nat -A POSTROUTING -s 10.25.0.0/24 -o eth0 -j MASQUERADE

Где eth0 — интерфейс смотрящий в интернет.

Ещё может пригодится вот это:

iptables -A FORWARD -s 10.25.0.0/24 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT


И это:

iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -j ACCEPT



Можно запускать:

/etc/init.d/openvpn restart


Проверьте статус:

/etc/init.d/openvpn status



OK...


Смотрим сеть:

netstat -rn





Посмотреть лог:

tail -f /var/log/openvpn.log






Клиент


Предположим что сервер который мы настроили находится где-то в Нидерландах, а подключаться к нему будем из дома.
На домашнем роутере нужно пробросить порт (1194).


Клиент для Linux

Так же как и в случае с сервером, нужно установить openvpn:

sudo su

apt-get install openvpn


В папку /etc/openvpn нужно скопировать (любым доступным способом) файлы ключей с сервера — ca.crt client1.crt client1.key ta.key.

Создать в этой же папке файл client.conf

nano /etc/openvpn/client.conf


И вписать в него это:

client

dev tun

proto udp

remote ip-адрес 1194  # Здесь адрес сервера (и/или который смотрит в интернет) 
# пример remote 5.19.231.153 1194 или так remote istarik.ru 1194

resolv-retry infinite

nobind  # использовать динамический порт для подключения

#daemon  # работать как демон

persist-tun
persist-key

comp-lzo # Использовать сжатие

verb 3 # уровень информативности отладочных сообщений (0 - 10)

redirect-gateway 

ca ca.crt
cert client1.crt
key client1.key
#tls-auth ta.key 1 # если создавали ta.key, то раскомментируйте


Теперь можно запускать клиента:

cd /etc/openvpn

openvpn --config /etc/openvpn/client.conf



Initialization Sequence Completed

Для проверки посмотрим маршрут:

traceroute google.com




Теперь весь трафик идёт через наш VPN.

Чтоб выключить клиента, откройте ещё один терминал и дайте команду:

sudo killall openvpn





Клиент для Win

Скачайте и установите OpenVPN

Зайдите в папку C:\Program Files\OpenVPN\config

Создайте в ней файл client.ovpn со следующим содержанием:

client

dev tun

proto udp

remote ip-адрес 1194  # Здесь адрес сервера (и/или который смотрит в интернет)
# пример remote 5.19.231.153 1194 или так remote istarik.ru 1194

resolv-retry infinite

nobind  # использовать динамический порт для подключения

persist-tun
persist-key

comp-lzo # Использовать сжатие

verb 3 # уровень информативности отладочных сообщений (0 - 10)

redirect-gateway 

ca ca.crt
cert client1.crt
key client1.key
#tls-auth ta.key 1 # если создавали ta.key, то раскомментируйте


Скопируйте в эту же папку файлы — ca.crt client1.crt client1.key ta.key.

Запустите ярлычёк OpenVPN GUI (на рабочем столе) с правами администратора (правой кнопкой).

В системном трее появится значок в виде монитора, клацните по нему два раза.

Сначала значок станет жёлтым, а когда произойдёт соединение позеленеет.

Вот и всё, Вы в туннеле.

Смотрим лог на сервере:

tail -f /var/log/openvpn.log





Клиент для ipad

Создайте файл client.ovpn со следующим содержанием:

client

dev tun

proto udp

remote ip-адрес 1194  # Здесь адрес сервера (и/или который смотрит в интернет)
# пример remote 5.19.231.153 1194 или так remote istarik.ru 1194

resolv-retry infinite

nobind  # использовать динамический порт для подключения

persist-tun
persist-key

comp-lzo # Использовать сжатие

verb 3 # уровень информативности отладочных сообщений (0 - 10)

redirect-gateway 

ca ca.crt
cert client1.crt
key client1.key
#tls-auth ta.key 1 # если создавали ta.key, то раскомментируйте


Зайдите в App Store, скачайте OpenVPN Connect и откройте его.

Подключите ipad к компьютеру, откройте iTunes, выберите устройство, нажмите слева «Программы», выберите OpenVPN и нажмите «Добавить файл...».

Добавьте файлы — ca.crt client1.crt client1.key ta.key client.ovpn.

Появится картинка:



Нажмите плюсик, появится новое окно:



Нажмите Connection. Статус Disconnected поменяется на Connected.

Для iphone всё то же самое.




Клиент для Android

Скачайте OpenVPN Connect и откройте его.

Создайте файл client.ovpn:

client

dev tun

proto udp

remote ip-адрес 1194  # Здесь адрес сервера (и/или который смотрит в интернет)
# пример remote 5.19.231.153 1194 или так remote istarik.ru 1194

resolv-retry infinite

nobind  # использовать динамический порт для подключения

persist-tun
persist-key

comp-lzo # Использовать сжатие

verb 3 # уровень информативности отладочных сообщений (0 - 10)

redirect-gateway 

ca ca.crt # пропишите пути
cert client1.crt
key client1.key
#tls-auth ta.key 1 # если создавали ta.key, то раскомментируйте


Скопируйте на sdcard (или во внутреннюю память) телефона файлы ca.crt client1.crt client1.key ta.key client.ovpn.

Допустим Вы скопировали файлы на SD-карту в папку Downloads, тогда путь к ним будет выглядеть вот так:

...
ca /sdcard/Download/ca.crt 
cert /sdcard/Download/client1.crt
key /sdcard/Download/client1.key
...


В настройках OpenVPN нажмите ImportImport Profile from SD card, в открывшемся проводнике найдите папку Download, выберите файл client.ovpn и нажмите SELECT (в поле Location будет путь, который вы указали в конфиге).
Далее можно подключаться к VPN.





Принадлежность файлов




Подробное описание различных команд и параметров.


На этом всё.


  • +209
  • 9040
Telegram-канал istarik

Известит Вас о новых публикациях...


Поддержать автора








Комментарии (5)

0
Добрый день. Не могли ли Вы подробнее на примере пояснить, как правильно прописать путь к ключам?
В файле client.ovpn
ca ca.crt # пропишите пути
cert client1.crt
key client1.key
#tls-auth ta.key 1 # если создавали ta.key, то раскомментируйте
0
Здравствуйте. Добавил описание в статью.
0
Спасибо.
0
Получилось соединить андроид телефон с домашней сетью только после того, как пробросил 1194 порт на головном маршрутизаторе.
0
Да, про порт я забыл. Спасибо.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.