ВсёПросто

Установка и настройка OpenVPN для Ubuntu

Содержание

Установка и настройка клиента OpenVPN в Ubuntu

Когда-то давным-давно, когда арбузы на деревьях были совсем ещё зелёными, я познакомился с замечательным проектом OpenVPN, сделавшим мою работу по связыванию распределённых локальных сетей воедино. Первым опытом стала настройка сервера под FreeBSD, ну а дальше, как говорится, понеслось. На сегодняшний день почти все сервера, настроенные мной, работают под Ubuntu Linux той или иной версии.

И вот недавно я обратил внимание на то, что среди барахла, хранящегося в /etc/init.d, скромненько притаился скрипт с именем «openvpn». «Ну и чё?» — тут же спросит опытный администратор.

Всё дело в том, что до недавних пор поднятие сетевых интерфейсов, в том числе и TUN, я организовывал исключительно через /etc/network/interfaces, оперируя опциями pre-up для запуска демона OpenVPN и опциями pre-down для его останова.

Всё это «безобразие» повсеместно разбавлялось различными командами, манипулирующими таблицами маршрутизации… В общем, довольно громоздкая картинка получалась.

В принципе, всё работало вполне себе прилично, но раз есть предоставленный разработчиками иной (Ubuntu-way?) путь, то почему бы им не воспользоваться, тем более, что это позволит значительно разгрузить /etc/network/interfaces. Итак, что у меня получилось.

Установка OpenVPN

Установка OpenVPN в Ubuntu не требует каких-либо финтов ушами:

$ sudo apt-get install openvpn

Обязательно подтвердите установку всех зависимостей.

Тем же, кому хочется/нужно установить OpenVPN из исходных кодов, придётся ознакомиться с соответствующей информацией.

Если вас интересуют бинарные пакеты под другие платформы, посетите страницу загрузок проекта.

Размещение файлов ключей

Раз уж в этой в этой статье я решил рассказать о настройке клиентской части OpenVPN, то будем думать, что файлы ключей шифрования у вас уже имеются (вам их выдал администратор OpenVPN-сервера).

Количество и тип ключей зависит от того, как сконфигурирован OpenVPN-сервер, к которому вы подключаетесь.

В этой статье предполагается, что  для шифрования и аутентификации используются три файла:

Получив ключ и сертификаты, обязательно позаботьтесь об их безопасности. Хорошим решением будет размещение всего этого добра на флешке, зашифрованной, например, TrueCrypt. В этой статье будем полагать, что ключи и сертификаты размещены в каталоге /media/keys. Также, обязательно оставьте минимум прав доступа к каталогу с ключом и сертификатами:

$ sudo chown -R root.root /media/keys$ sudo chmod 0700 /media/keys$ sudo chmod 0600 /media/keys/*# ls -la /media/keysdrwx—— 2 root root 1024 2010-08-18 15:32 .drwx—— 5 root root 1024 2010-08-18 15:24 ..-rw——- 1 root root 1265 2010-08-18 22:27 ca.crt-rw——- 1 root root 3821 2010-08-18 15:13 client.crt

-rw——- 1 root root 887 2010-08-18 15:13 client.key

Файл конфигурации

Фалы конфигурации OpenVPN, как правило, располагаются в каталоге /etc/openvpn или /usr/local/etc/openvpn. В этой статье я предполагаю, что вы установили OpenVPN из репозитариев Ubuntu и каталогом для хранения конфигурации является /etc/openvpn.

Если вы подключаетесь к OpenVPN-серверу, настроенному не вами, то обычно этот кто-то должен вам дать «базовый» файл конфигурации, содержащий минимально-необходимый набор параметров. Среди конфигурационных параметров OpenVPN индивидуальными для клиентского хоста, чаще всего являются пути к файлам ключей и сертификатов, а также пути к внешним скриптам скриптам инициализации.

Допустим, что сервер, к которому вы подключаетесь, называется myvpnsrv.com.

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

Так, в нашем примере файл конфигурации будет находится в /etc/openvpn/myvpnsrv.conf со следующим содержанием:

clientremote myvpnsrv.comca /media/keys/ca.crtkey /media/keys/client.keycert /media/keys/client.crtdaemondev tunproto udp

comp-lzo

Первая строка сообщает OpenVPN, что подключение будет осуществляться в режиме клиента.

Значение параметра remote определяет имя хоста или IP-адрес сервера.

Значения параметров ca, keys и cert определяют пути к файлу сертификата CA, закрытому ключу и сертификату клиента соответственно.

Указанием параметра daemon мы заставляем OpenVPN отцепиться от консоли и работать в фоновом режиме.

Параметр dev указывает тип сетевого интерфейса, который будет использоваться для обмена шифрованным трафиком с сервером. Может иметь значение tun или tap. Принципиальную разницу между этими двумя типами интерфейсов можно узнать здесь и здесь.

Параметр proto определяет протокол, в который будет заворачиваться шифрованный трафик. Предпочтительней использовать UDP.

Наличие параметра comp-lzo заставляет OpenVPN сжимать трафик, что очень полезно при наличии «узкого» канала передачи данных.

Маршрутизация и внешние скрипты

OpenVPN среди всего прочего позволяет запускать внешние программы после запуска, а также до и после остановки демона. Очень удобная штука, если вам необходимо шаманить таблицами маршрутизации при поднятии туннеля.

Сразу же отметьте себе один тонкий момент. Для того, чтобы OpenVPN-демон смог запускать внешние программы, ему необходимо это явно разрешить делать, передав параметр script-security со значением, не ниже 2. Безопасность, однако.

Для того, чтобы указать путь к программе, вызываемой автоматически после того, как сетевой интерфейс будет поднят, используйте параметр up, передав ему в качестве значения путь к программе и, возможно,  дополнительные параметры.

Для того, чтобы запускать внешнюю программу после отключения сетевого интерфейса, используйте параметр down, сообщив ему, естественно, путь и параметры вызываемой программы. Если же необходимо, что программа запускалась перед отключением интерфейса, также укажите параметр down-pre без значения.

Теперь немного о специфике вызова внешних программ демоном OpenVPN. Дело в том, что они не просто «тупо» вызываются, а им передаются ещё некоторые параметры подключения, что очень удобно при работе с таблицами маршрутизации.

Формат вызова внешней программы демоном OpenVPN при инициализации tun-интерфейса следующий:

tun_dev tun_mtu link_mtu ifconfig_local_ip ifconfig_remote_ip [init|restart]

где

Для tap-интерфейса формат тот же, за исключением того, что вместо ifconfig_remote_ip передаётся ifconfig_netmask, содержащий маску подсети, в которой находится наш клиент.

Также, следует отметить, что все параметры, которые вы будете передавать внешней программе, при помощи up/down, будут подставлены перед параметрами, перечисленными выше.

Теории, думаю, достаточно, перейдём к делу. Допустим, вам необходимо, чтобы во время запуска/перезапуска/остановки демона OpenVPN каким-то образом видоизменялась таблица маршрутизации вашего хоста. Для двух сетевых интерфейсов я решил эту задачу следующим скриптом на bash:

#!/bin/bash case ${1} in «up») case ${2} in «tun0») ip rule add … ip route add … ;; «tun1») ip rule add … ip route add … ;; esac ;; «down») case ${2} in «tun0») ip rule del … ip route del … ;; «tun1») ip rule del … ip route del … ;; esac ;; esac

А вызов скрипта осуществляется двумя параметрами OpenVPN:

up '/usr/local/bin/routes.sh up'
down '/usr/local/bin/routes.sh down'

То есть, запускаемый скрипт получает примерно такие  параметры:

Само-собой разумеется, можно (и нужно) использовать значения параметров $3 — $6. Например, если вы хотите какую-то часть трафика «завернуть» через VPN-туннель, то можно в скрипте использовать что-то вроде:

ip route add from 192.168.0.0/24 via ${6}

используя значение переменной $6, чтобы определить адрес маршрутизатора, через который необходимо направлять трафик.

Запуск и останов демона

Собственно, к чему все эти танцы с вызовом внешних скриптов и отказом от старого-доброго /etc/network/interfaces? А вот к чему.

Откройте файл /etc/default/openvpn и в переменной AUTOSTART укажите имя файла (или нескольких, через пробел) конфигурации из каталога /etc/openvpn, откусив расширение «.conf». Для нашего примера это будет выглядеть так:

AUTOSTART=»myvpnsrv»

Или же, если нужно, чтобы OpenVPN выполнил подключения на основе всех найденных файлов конфигурации:

AUTOSTART=»all»

Теперь «достаточно одной таблэтки» в виде:

sudo service openvpn start

и скрипт из /etc/init.d/openvpn заботливо запустит OpenVPN для всех найденных конфигураций.

Остановка демона также не очень сложна:

sudo service openvpn stop

И напоследок. Если вам понадобилось, чтобы ни один из существующих в /etc/openvpn конфигурационных файлов не обрабатывался, достаточно определить в /etc/default/openvpn:

Установка и настройка OpenVPN в Ubuntu 16.04

VPN (Virtual Private Network) – это технология, позволяющая объединять компьютеры через интернет так, как будто они находятся в одной локальной сети.

В результате мы можем объединять в одну сеть офисы, расположенные в разных городах и странах.

Установив VPN-сервер дома, а клиентскую часть на смартфон, можно выходить в интернет через публичные точки WiFi не боясь, что ваши пароли  будут перехвачены.

Аренда сервера в в зарубежном дата-центре стоит от 5$ в месяц и разместив VPN в американском регионе мы получаем доступ к Spotify, Pandora, Hulu и другим сервисам, недоступным в вашей стране, да и цензура в интернет вас больше не касается.

1. Установим OpenVPN

Обновим наш сервер и установим OpenVPN и центр сертификации.

sudo apt update sudo apt upgrade sudo apt install openvpn easy-rsa

OpenVPN это виртуальная частная сеть, использующая для шифрования трафика TLS/SSL. А это означает, что нам потребуются доверенные сертификаты.

2. Настройка центра сертификации

Настроим центр сертификации.

make-cadir ~/openvpn-ca cd ~/openvpn-ca nano vars

Найдем следующий фрагмент:

. . . . . export KEY_COUNTRY=»US» export KEY_PROVINCE=»CA» export KEY_CITY=»SanFrancisco» export KEY_ORG=»Fort-Funston» export KEY_EMAIL=»me@myhost.mydomain» export KEY_OU=»MyOrganizationalUnit» . . . . .

и заменим на свои данные

. . . . . export KEY_COUNTRY=»RU» export KEY_PROVINCE=»SPb» export KEY_CITY=»Sankt-Peterburg» export KEY_ORG=»admin812.ru» export KEY_EMAIL=»admin@admin812.ru» export KEY_OU=»IT» . . . . .

Несколькими строками ниже поменяем значение KEY_NAME

export KEY_NAME=»server»cd ~/openvpn-ca source vars

В ответ система должна выдать:

NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys

На всякий случай очистим каталог от всех ключей:

./clean-all

и создадим корневой центр сертификации:

./build-ca

Необходимые значения будут автоматически подставляться из файла vars, который мы редактировали чуть выше. Просто нажимаем Enter для подтверждения выбора.

Мы установили центр сертификации который мы будем использовать для создания других необходимых нам файлов.

3. Создание сертификата, ключа и файлов шифрования для сервера

Сперва создадим сертификат OpenVPN и ключи для сервера. Для этого запустим следующую команду:

./build-key-server server

Соглашаемся на все значения по умолчанию, в конце два раза выбираем “y”.
Теперь сгенерируем ключи протокола Диффи-Хеллмана командой:

./build-dh

и подпись HMAC для усиления способности сервера проверять целостность и подлинность передаваемых данных TSL:

openvpn —genkey —secret keys/ta.key

4. Создание сертификата и пары ключей для клиента

Рассмотрим процедуру создания ключа и сертификата для клиента client1. Если клиентов несколько, процесс создания аналогичен Для автоматического соединения мы создадим файл без пароля. Используем команду build-key:

cd ~/openvpn-ca source vars ./build-key client1

5. Настройка сервиса OpenVPN

Скопируем созданные файлы (сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC, файл Diffie-Hellman) из директории ~/openvpn-ca/keys в /etc/openvpn

cd ~/openvpn-ca/keys sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn

Далее нужно создать и настроить конфигурационный файл сервера.

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf sudo nano /etc/openvpn/server.conf

Найдем раздел HMAC и раскомментируем строку с tls-auth, а также добавим параметр key-direction:

tls-auth ta.key 0 # This file is secret key-direction 0

Затем ищем раздел шифрования и раскомментируем строку с шифром AES-128-CBC и после нее добавим алгоритм HMAC:

cipher AES-128-CBC auth SHA256

И в заключении найдем строки user и group и раскомментируем их:

user nobody group nogroup Для того чтобы пользоваться нашим сервером по назначению необходимо чтобы он мог перенаправлять трафик. sudo nano /etc/sysctl.confНайдите и раскомментируйте строку: net.ipv4.ip_forward=1Чтобы применить измененные настройки выполните: sudo sysctl -pПропишем как будет запускаться наш сервер. Так как имя конфигурационного файла server.conf дадим такую команду: sudo systemctl start openvpn@serverПроверим запустился ли сервер: sudo systemctl status openvpn@serverи поднялся ли интерфейс tun ip addr show tun0Если все работает – добавляем настройки в автозагрузку: sudo systemctl enable openvpn@server

7. Скрипт для настройки клиентов

mkdir -p ~/client-configs/files chmod 700 ~/client-configs/files cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf Внесём некоторые изменения в файл base.conf nano ~/client-configs/base.confТут необходимо внести изменения в пункте remote . . .

# The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote server_IP_address 1194 . . .Вместо server_IP_address пропишем ip-адрес нашего сервера OpenVPN.

Далее, необходимо убедиться по какому протоколу ( tcp или udp ) работает openvpn и от какого пользователя запускается. Настройки должны быть аналогичным настройкам в файле server.conf proto udp user nobody group nogroupСертификаты и ключи мы будем хранить прямо в конфигурационном файле, который далее создадим.

 Поэтому закомментируем  строки ca, cert и key # SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. #ca ca.crt #cert client.crt #key client.

keyПриведем настройки клиентской части  к аналогичным настройкам сервера.Проверьте на вашей клиентской системе наличие файла /etc/openvpn/update-resolv-conf. Если он есть, последние три строки нужно раскомментировать.

cipher AES-128-CBC  auth SHA256 key-direction 1 # script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf

Ну, и наконец, создадим скрипт, с помощью которого будем создавать конфигурационные файлы для клиентов.

nano ~/client-configs/make_config.sh

Вставим текст:

#!/bin/bash # First argument: Client identifier KEY_DIR=~/openvpn-ca/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf cat ${BASE_CONFIG}

Настраиваем VPN в Ubuntu Server с пакетом OpenVPN

Сегодня разберём установку и настройку конфигурационных файлов для запуска VPN сервера и клиентской части на ubuntu server 16.04 | 17.04 | 18.04

Зачем же нужен VPN? На то есть целый ряд причин. Например, чтобы ваши пароли, передаваемые по HTTP, не утекли, когда вы сидите с открытых WiFi точек. Да и вообще, даже вашему обычному провайдеру не обязательно знать, на какие сайты вы ходите.

Еще — чтобы не палить свой IP в IRC сетях и прочих сервисах, с которыми вы работаете. Им знать ваше местоположение тоже совсем никчему. Также вам может захотеться попробовать какой-нибудь новый сервис, который пока что недоступен для пользователей с российским IP.

Кроме того, трафик между вами и VPN сервером не только шифруется, но и сжимается, что нередко может создать ощущение более быстрого интернета.

Также OpenVPN может быть полезен в целом ряде других случаев — для доступа сотрудников ко внутренним ресурсам компании, при построении на VDS’ах приложения с микросервисной архитектурой и не только.

Почему VPN, а не какие-нибудь прокси или пробрасывание портов через SSH, надеюсь, тоже понятно. VPN достаточно настроить один раз и сразу весь трафик всех приложений пойдет через VPN сервер, в сжатом и зашифрованном виде.

Чтобы поднять свой VPN, вам потребуется собственный сервер с Ubuntu, Debian, а также права root’а на нем. Если сервер у вас уже есть, хорошо. Если нет, то не расстраивайтесь. В наши дни купить подходящий VDS/VPS можно за 100-150 рублей в месяц. Компаний, предлагающих соответствующие услуги — десятки.

Советовать какой-то конкретный сервис я не буду, как говорится: — «На вкус и цвет товарищей нет».

Установка OpenVPN на Ubuntu Server 16.04 | 17.04 | 18.04

приступим к установке пакетов на нашем сервере:

sudo apt updatesudo apt install openvpn

Раньше в OpenVPN входила утилита под названием easy-rsa, предназначенная для генерации ключей и сертификатов. Начиная с версии 2.3 эту утилиту из пакета выпилили, поэтому придется скачать и собрать ее самостоятельно:

cd /tmpwget https://github.com/OpenVPN/easy-rsa/archive/master.zipunzip master.zipcd easy-rsa-master./build/build-dist.shtar xvzf ./EasyRSA-git-development.tgzcd EasyRSA-git-development

Генерируем все необходимые ключи и сертификаты. Приготовьтесь вводить для них пароли. Так как мы настраиваем персональный VPN сервер, то, видимо, можно использовать один-единственный пароль, но подлиннее:

./easyrsa init-pki./easyrsa build-ca./easyrsa build-server server./easyrsa build-client client1./easyrsa gen-dh

Выполнение последней команды может занять несколько минут.
Переносим полученные ключи и сертификаты в каталог /etc/openvpn/:

mv ./pki/dh.pem /etc/openvpn/dh2048.pemmv ./pki/private/client1.key /etc/openvpn/mv ./pki/private/server.key /etc/openvpn/mv ./pki/ca.crt /etc/openvpn/mv ./pki/issued/client1.crt /etc/openvpn/mv ./pki/issued/server.crt /etc/openvpn/

Настройка конфигурационного файла openvpn на сервере

В том же каталоге создаем файл server.conf:

sudo touch server.conf

с содержимым:

# Порт для OpenVPNport 1194# Протокол для работыproto tcp# Тип интерфейсаdev tun# Сертификат центра сертификации ЦАca /etc/openvpn/ca.crt# Сертификат сервераcert /etc/openvpn/server.crt# Ключ сервераkey /etc/openvpn/server.key# Сертификат для шифрования подключенияdh /etc/openvpn/dh2048.pem# Защита от DOS атак (для сервера 0 для клиента 1)tls-servertls-auth /etc/openvpn/ta.key 0tun-mtu 1500tun-mtu-extra 32mssfix 1450# Выбор криптографического шифраcipher AES-256-CBC# IP адрес и маска VPN сетиserver 10.8.0.0 255.255.255.0#Каталог для настройки клиента:client-config-dir /etc/openvpn/ccd# Сообщает клиентам что за сервером есть локальная сеть (если есть)push «route 192.168.0.0 255.255.255.0″#Прописывает маршрут на сервере чтобы видеть сеть за клиентом (если есть)route 10.63.10.0 255.255.255.0# Шлюз#route-gateway 10.8.0.1# Каждому клиенту выдается по 1 адресу, без виртуальных портов маршрутизатораtopology subnet# Количество повторяющихся сообщенийmute 20# Максимальное кол-во одновременно подключившихся клиентовmax-clients 25# Записываем в файл IP адреса клиентовifconfig-pool-persist ipp.txt#Время жизни неактивной сессииkeepalive 10 120# Разрешаем клиентам видеть друг другаclient-to-client# Включаем сжатиеcomp-lzopersist-keypersist-tun# Логированиеstatus openvpn-status.loglog openvpn.loglog-append openvpn.log# Уровень отладочной информацииverb 3# Прописываем шлюз у клиента#push «redirect-gateway def1″# Прописываем DNS сервера у клиентаpush «dhcp-option DNS 192.168.0.1″push «dhcp-option DNS 8.8.8.8»

Попробуем запустить OpenVPN:

service openvpn start

Проверяем:

netstat -tuwpan

Сервер должен слушать порт 1194. Если это не так, курим /var/log/syslog или же /etc/openvpn/openvpn.log.

Настройка конфигурационного файла openvpn на клиенте

Теперь что касается клиентской стороны. Нам понадобятся файлы client1.crt, client1.key ta.crt и ca.crt и также установить пакет openvpn:

sudo apt install openvpncd /etc/openvpnscp vpn-server:/etc/openvpn/client1.crt ./scp vpn-server:/etc/openvpn/client1.key ./scp vpn-server:/etc/openvpn/ca.crt ./scp vpn-server:/etc/openvpn/ta.crt ./

Создадим файл client.conf:

sudo touch client.conf

с содержимым:

clientproto tcpdev tun# !!! замените на настоящий ip адрес сервераremote 111.111.111.111 1194# следующие две строчки актуальны только для Linux систем# на практике они не очень удобны, так как OpenVPN не сможет# нормально все за собой почистить по завершению работыuser nobodygroup nogroup# Не перечитывать ключи, не закрывать и переоткрывать TUNTAP устройстваpersist-keypersist-tun# Пути где располагаются сертификатыca ca.crtcert client1.crtkey client1.key# Используемое шифрованиеcipher AES-256-CBC# Сжатие трафикаcomp-lzo# Детальность логирования verb 3

Подрубаемся к серверу, внимательно читаем логи:

sudo openvpn —config client.conf

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

ping 10.8.0.1traceroute mail.ru

Если все было сделано правильно, вы обнаружите, что пинги успешно доходят до 10.8.0.1 (первая команда), но пакеты через него никуда не проходят (вторая команда). Это потому что мы забыли настроить на сервере NAT.

Настройка NAT для openvpn сервера на ubuntu 16.04

Конфиг сервера:

ppp0 — соединение с провайдером через PPPoE соединение
br0 — сетевой мост объединяющий локальный интерфейс и интерфейс WiFi enp0s3 — интерфейс смотрит в сеть интернет enp0s8 — интерфейс смотрит в локальную сеть

wlp1s0 — WiFi интерфейс

Установка и настройка OpenVPN для Ubuntu

Технология VPN хорошо известна как способ безопасного доступа к закрытым ресурсам компаний, а также различному контенту, будь то аудио, видео или архивные документы. Она позволяет создать приватную сеть, перенаправляя документы на один компьютер ресурсами другого или нескольких.

Virtual Private Network широко используется во всех современных браузерах. Без неё редко обходится удалённая работа сотрудника крупной и важной организации.

Настройка OpenVPN Ubuntu актуальна не только для технических специалистов и поборников высокой безопасности, но и всех тех, кто не желает мириться с высокой стоимостью лицензионного контента в странах, где доступ к нему ограничен.

В Linux настройка виртуальных сетей тонкая.

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

Или использовать её для получения многих других важных преимуществ свободного пребывания в сети. В организациях вопрос использования ВПН назрел из-за трудностей настройки фаерволов.

Их использование требовало постоянно менять параметры подключённой техники и настройки доступа. Раньше это приводило к немалым временным и финансовым затратам.

Установка OpenVPN — это применение свободно распространяемой технологии виртуальных частных сетей. Она возможна как в Windows, так и в Linux-образных ОС. Поскольку в среде Linux тонкая настройка всех параметров этой функции проще, мы рассмотрим именно её.

 Тема Виртуальных Частных сетей широко освещается на множестве тематических сайтов и форумов, благодаря чему приобщится к ней смогли как профессионалы, так и новые приверженцы технологий безопасности во всём мире.

Установка OpenVPN Ubuntu позволяет не только повысить уровень сохранности личных данных, но и правильно организовать свою деятельность в сети.

Зачем использовать именно ВПН, а не другие способы защиты личной информации? Этот способ достаточно настроить лишь однажды. Все данные будут автоматически проходить через сервер частной сети, сразу в зашифрованном виде.

Что нужно знать в теории?

OpenVPN — это достаточно функциональное, быстрое и гибкое ПО, которое позволяет работать с SSL VPN. Оно обладает открытым исходным кодом. Это значит, что каждый желающий может использовать его возможности по отдельности, а также модифицировать код программы для собственных нужд.

На деле такая технология предлагает использование небезопасных сетей так, как если бы они обладали мощной защитой. Это будет очень актуально, если:

  1. Вы используете для доступа в интернет-соединение со слабой защитой.
  2. В месте вашего пребывания действует цензура на доступ к информации.
  3. Вы находитесь в месте с точками доступа Wi-Fi для общественного пользования.
  4. Вам нужно хорошо скрыть своё местонахождение от других пользователей сети.
  5. Вы хотите ещё лучше защитить свои личные данные и пароли.

СОВЕТ. Сеть VPN называется виртуальной, поскольку все её элементы объединены с помощью программного обеспечения, которое применяет виртуальные соединения. 

Она частная, поскольку к ней не может получить доступ любой желающий. Это могут сделать только отдельные участники, создавшие между собой такое соединение. Каждый элемент сети должен содержать защитную информацию. Эта информация позволяет легко получить доступ к сети одним участникам интернета, и также просто запрещает доступ другим.

Базовые понятия

Туннель — это безопасное, защищённое соединение, которое использует ресурсы небезопасной сети (в этом случае интернета), и позволяет обмениваться информацией по частному каналу, настроенному только на доверенные устройства.

Клиент — это программа, которая устанавливается на оборудование, где нужно обеспечить канал обмена данными сервером. Этот канал обладает защитой.

Сервер — компьютер или место, где хранятся учётные записи пользователей виртуальной частной сети. Использование сервера позволяет ускорить работу программ и уменьшить трафик (объём передаваемых данных).

Публичные ключи и сертификаты — особые данные, служащие для шифрования информации. При обмене данными они попадают в удостоверяющий центр, где подписываются. Позже они возвращаются на исходный элемент сети.

Переходим к практике

Чтобы выполнить настройку своего сервера OpenVPN Ubuntu, потребуется приобрести свой сервер с установленной Ubuntu Linux. На нём необходимо получить права root. В настоящее время приобрести решение можно по невысокой цене, а количество компаний, которые предлагают такие услуги — всё больше. Сама по себе установка OpenVPN Ubuntu не потребует значительных затрат времени.

Приступаем к установке и настройке

Для начала необходимо подключиться к серверу и дать ему такие команды:

«apt-get update
apt-get install openvpn»

Эти инструкции начнут установку OpenVPN. Далее необходимо установить и подготовить к работе утилиту для создания ключей и сертификатов:

«cd /tmpwget https://github.com/OpenVPN/easy-rsa/archive/master.zipapt-get install unzipunzip master.zipcd easy-rsa-master./build/build-dist.shtar xvzf ./EasyRSA-git-development.tgz

cd EasyRSA-git-development»

Далее нужно провести генерацию ключей и сертификатов:

«./easyrsa init-pki./easyrsa build-ca./easyrsa build-server-full server./easyrsa build-client-full client1

./easyrsa gen-dh»

После генерации необходимо перенести полученные данные в /etc/openvpn/:

«mv ./pki/dh.pem /etc/openvpn/dh.pemmv ./pki/private/client1.key /etc/openvpn/mv ./pki/private/server.key /etc/openvpn/mv ./pki/ca.crt /etc/openvpn/mv ./pki/issued/client1.crt /etc/openvpn/

mv ./pki/issued/server.crt /etc/openvpn/»

Создайте в том же каталоге файл server.conf с такими параметрами:

«mode serverdev tunserver 10.128.0.0 255.255.255.0push «redirect-gateway def1»push «dhcp-option DNS 8.8.8.8»tls-serverca ca.crtcert server.crtkey server.keydh dh.pemproto tcp-serverport 1194client-to-clientcomp-lzokeepalive 10 120verb 4cipher AES-256-CBCuser nobodygroup nogroup

max-clients 10»

Проведите запуск

«service openvpn start»

Далее необходимо ввести данные для клиентской стороны. Потребуется создать несколько новых файлов.

«mkdir vpncd vpnscp vpn-server:/etc/openvpn/client1.crt ./scp vpn-server:/etc/openvpn/client1.key ./

scp vpn-server:/etc/openvpn/ca.crt ./»

Здесь в строке remote требуется написать IP-адрес сервера так, как показано в примере.

«clientproto tcpdev tunremote 123.45.67.89 1194persist-keypersist-tunca ca.crtcert client1.crtkey client1.keycipher AES-256-CBCcomp-lzo

verb 3»

Далее необходимо изучить log-файлы на сервере на предмет ошибок:

«sudo openvpn —config client.conf»

В соседнем окне терминала необходимо ввести команду:

«ping 10.128.0.1
traceroute mail.ru»

Если всё было сделано правильно, вы обнаружите, что 10.128.0.1 успешно пингуется. Однако отправки пакетов получателю происходить не будет, так как на сервере не настроен NAT. Нам ещё потребуется выполнить этот шаг.

Настройка OpenVPN в Ubuntu

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

Понятие VPN в наши дни стало очень растянутым, после появления частных виртуальных сетей, которые доверяют всем и распространения HTTPS.

Многие из сетей VPN представляют из себя коммерческие решения с минимальным количеством настроек для обеспечения удаленного доступа сотрудников. Но не все доверяют этим решениям.

Частная виртуальная сеть соединяет две сети в одну, например, сеть офиса и домашнюю сеть работника. Сервер VPN необходим для того чтобы сервер и клиент могли пройти аутентификацию друг с другом.

Настройка аутентификации сервера и клиента требует много работы, и поэтому коммерческие решения с минимумом настроек проигрывают в этом плане. Но на самом деле не так уж трудно установить сервер OpenVPN.

Вам понадобится два узла в разных сетях чтобы организовать тестовое окружение, например, можно использовать несколько виртуальных машин или реальные серверы.

Как вы уже поняли, в этой статье будет рассмотрена настройка OpenVPN в Ubuntu для создания полноценной частной виртуальной сети.

Настройка центра сертификации

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

Собственный центр сертификации дает несколько преимуществ, у вас будет собственный орган сертификации, который упростит распространение ключей и управление ими. Например, вы можете отозвать сертификаты клиента на сервере.

Также теперь не нужно хранить все клиентские сертификаты, центру сертификации будет достаточно знать, что сертификат подписан CA. Кроме сложной системы ключей, вы можете использовать статические ключи, если нужно предоставить доступ только нескольким пользователям.

Обратите внимание, что все секретные ключи должны находится в надежном месте. В OpenVPN открытый ключ называется сертификатом и имеет расширение .crt, а закрытый ключ так и называется ключом, его расширение — .key.

Сначала создайте папку для хранения сертификатов Easy-RSA. Фактически, конфигурация OpenVPN выполняется вручную, так что папку можно разместить где угодно:

sudo mkdir /etc/openvpn/easy-rsa

Затем скопируем в эту папку все необходимые скрипты easy-rsa:

sudo cp -R /usr/share/easy-rsa /etc/openvpn/

Далее нам нужно создать центр сертификации в этой папке. Для этого перейдите в нее и выполните такие команды:

cd /etc/openvpn/easy-rsa/

sudo -i# source ./vars# ./clear-all

# ./build-ca

Первой командной мы переключаемся в консоль от имени суперпользователя, второй загружаем переменные окружения из файла ./vars. Команда ./clear-all создает папку keys если ее нет и очищает ее содержимое. И последняя команда инициализирует наш центр сертификации. Теперь в папке .keys появились все необходимые ключи:

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

Дальше нужно повторить процедуру копирования скриптов управления RSA, как мы это делали на сервере:

sudo cp -R /usr/share/easy-rsa /etc/openvpn/

Теперь нам нужно скопировать сертификат, файл с расширением .crt в папку /etc/openvpn на всех клиентах. Например, скачаем этот файл для нашего клиента с помощью scp:

sudo scp пользователь@хост:/etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys

Только теперь можно создать свой секретный ключ на основе сертификата CA:

cd /etc/openvpn/easy-rsa/

sudo -i# source ./vars

# build-req Sergiy

Обратите внимание, что ca.crt должен лежать в папке с ключами, иначе ничего не сработает. Теперь утилита создаст ключ, на основе которого, вы сможете подключиться к OpenVPN серверу, но вам еще осталось подписать его на сервере. Отправьте полученный .csr файл на сервер с помощью того же самого scp:

scp /etc/openvpn/easy-rsa/keys/Sergiy.csr пользователь@хост:~/

Затем уже на сервере в папке /etc/openvpn/easy-rsa нужно выполнить команду подписи сертификата:

./sign-req ~/Sergiy

Подпись сертификата нужно подтвердить. Затем программа сообщит что он был подписан и добавлен в базу данных. В папке с сертификатом csr появится файл .crt, который нужно вернуть назад на клиентскую машину:

sudo scp пльзователь@хост:/home/Sergiy.crt /etc/openvpn/easy-rsa/keys

Только после этого сервер и клиент имеют все необходимые ключи для подключения и установки связи. Осталось еще несколько настроек. Если вы планируете использовать шифрование TLS, то необходимо создать на сервере набор данных Диффи-Хафмана, для этого используйте команду:

./build-dh

Дальше будет рассмотрена настройка OpenVPN для сервера и клиента, осталось совсем немного до получения рабочей конфигурации.

Настройка OpenVPN

Теперь настройка сервера OpenVPN. По умолчанию, в папке конфигурационных файлов OpenVPN ничего нет. Их нужно создать самостоятельно в зависимости от того, что планируется настраивать, сервер или клиент. Нужный файл конфигурации OpenVPN можно найти по адресу /usr/share/doc/openvpn/examples/sample-config-files/. Сначала создадим конфигурационный файл для сервера:

zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Здесь вам нужно настроить несколько параметров:

port и proto — порт и протокол, по которым будет работать программа;

port 1194
proto udp

Все созданные ключи нужно прописать в конфигурационном файле. Наши ключи хранятся по адресу /etc/openvpn/easy-rsa/keys:

ca /etc/openvpn/easy-rsa/keys/ca.crtcert /etc/openvpn/easy-rsa/keys/ca.crtkey /etc/openvpn/easy-rsa/keys/ca.key
dh /etc/openvpn/easy-rsa/keys/dh.pem

Настраиваем диапазон адресов для виртуальной сети, наш сервер будет доступен по первому из них — 10.8.0.1:

server 10.8.0.0 255.255.255.0

После завершения настройки сохраните изменения в файле, вы можете либо вставить всю эту конфигурацию себе или отредактировать файл с примером. Готовые рабочие настройки сервера:

port 1194proto udpcomp-lzodev tunca /etc/openvpn/easy-rsa/2.0/keys/ca.crtcert /etc/openvpn/easy-rsa/2.0/keys/ca.crtdh /etc/openvpn/easy-rsa/2.0/keys/dh2048.pemtopology subnetserver 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

Настройка сервера OpenVPN завершена. Дальше необходимо запустить OpenVPN сервер. Это можно сделать прямо из командной строки, просто укажите адрес конфигурационного файла:

openvpn /etc/openvpn/server.conf

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

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf  /etc/openvpn/client.conf

Вы можете создать несколько конфигурационных файлов клиента для подключения к разным серверам. Откройте конфигурационный файл и измените в нем такие параметры:

remote — это ваш адрес сервера OpenVPN, адрес и порт должны совпадать с настроенными на сервере, например:

remote 194.67.215.125 1194

ca — ключ, который вы получили от центра сертификации, мы расположили его в папке /etc/openvpn/.

cert и key — это открытый и секретный ключи клиента, с помощью них вы и будете подключаться к серверу. Как вы помните, мы сохранили их в папке /etc/openvpn/easy-rsa/keys/.

ca /etc/openvpn/easy-rsa/keys/ca.crtcert /etc/openvpn/easy-rsa/keys/Sergiy.crt

key /etc/openvpn/easy-rsa/keys/Sergiy.key

Остальные настройки можно оставить как есть. Вот файл настройки целиком, который вы можете скопировать:

clientdev tunproto udpremote 194.67.215.125 1194resolv-retry infinitenobindpersist-keypersist-tunca /etc/openvpn/easy-rsa/keys/ca.crtcert /etc/openvpn/easy-rsa/keys/Sergiy.crtkey /etc/openvpn/easy-rsa/keys/Sergiy.keytls-auth ta.key 1comp-lzo

verb 3

Сохраните настройки, теперь клиент готов к подключению. Обратите внимание, что конфигурационные файлы должны максимально совпадать, отсутствие определенных опций в одном из файлов может привести к ошибкам. Это не значит, что файлы будут идентичны, но основные параметры openvpn должны быть одинаковыми. Вам осталось запустить OpenVPN на этой машине используя этот конфигурационный файл:

openvpn /etc/openvpn/client.conf

Готово, теперь все работает, если вы выполните ifconfig, то увидите что был добавлен интерфейс tun0:

ifconfig

Также вы можете попробовать выполнить ping адреса 10.8.0.1, именно этот адрес мы настроили для нашего сервера OpenVPN, пакеты ping будут нормально отправляться.

Если пакеты не идут, или еще что-то не работает, обратите внимание на вывод обоих программ, возможно, возникли какие-либо ошибки или предупреждения, также убедитесь, что брандмауэр сервера разрешает доступ извне по udp для порта 1194. Еще можно запустить сервер или клиент, настроив в конфиге уровень подробности на максимум verb 9.

Очень часто это помогает понять почему что-то не работает. Но вы еще не можете направлять трафик через туннель. Для этого нужно разрешить форвардинг и добавить несколько правил iptables. Сначала разрешаем транзит пакетов на сервере:

 sysctl -w net.ipv4.ip_forward=1

Затем добавьте такие правила. Разрешаем всем подключаться к нашему серверу:

 iptables -A INPUT -p udp —dport 1194 -j ACCEPT

Разрешаем пользователям OpenVPN доступ к интернету:

 iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT# iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Выводы

В этой статье мы рассмотрели как выполняется установка и настройка OpenVPN Ubuntu, а также как настроить openvpn для работы с аутентификацией по ключу. Организация частных виртуальных сетей может быть очень полезной не только в организациях, но и скажем для обмена данными между двумя вашими компьютерами или для повышения безопасности в сети.