Простой VPN-сервер

В свете последний событий в российском сегменте интернета становятся актуальными различные технологии туннелирования или проксирования трафика. Одной из проблем в их использовании является не совсем тривиальная процедура их развертывания. Поэтому все популярнее становятся продукты, которые автоматизируют этот процесс так, что с ним может справиться любой. Один из лидеров в этой области является enterprise grade сервер для развертывания инфраструктуры VPN на основе OpenVPN-сервера, который называется pritunl. Как его настроить мы и поговорим.

Основным преимуществом этого сервера является его простота и относительная наполненность различными функциями. В бесплатной версии этот сервер позволяет развернуть один VPN-сервер с любым из двух вариантов применения — локальная защищенная виртуальная сеть или NAT-сервер. Сервер состоит из трех компонентов: собственно сервера доступа, который управляет конфигурациями, доступом, мониторингом и т.д., сервером БД, хранящим конфигурации и статистику использвания и собственно самого VPN-сервера — OpenVPN. Немаловажным преимуществом этого сервера доступа явлется то, что у него есть собственный клиент для многих популярных платформ, в котором есть полная интеграция с обсуждаемым сервером. Установка очень проста и описывается несколькими строчками. Например для операционной системы Ubuntu 16.04:

sudo tee -a /etc/apt/sources.list.d/mongodb-org-3.6.list << EOF
deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse
EOF

sudo tee -a /etc/apt/sources.list.d/pritunl.list << EOF
deb http://repo.pritunl.com/stable/apt xenial main
EOF

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 7568D9BB55FF9E5287D586017AE645C0CF8E292A
sudo apt-get update
sudo apt-get --assume-yes install pritunl mongodb-org
sudo systemctl start pritunl mongod
sudo systemctl enable pritunl mongod  

После выполнения этих команд на сервере будут установлены все необходимые исполняемые файлы и т.д. При запуске сервера доступа systemctl start pritunl он генерирует конфигурационный файл по-умолчанию и запускает веб-сервер. Я рекомендую после запуска остановить сервер доступа и сменить порт сервера по-умолчанию с 443 на какой-то другой. Для этого в файл /etc/pritunl.conf нужно сменить строчку "port": 443 заменив 443 например на 10233. Затем зайти на https://ip_of_your.server:10233/ и завершить установку путем ввода ключа установки в БД. Для этого выполните в консоли генерацию ключа командой pritunl setup-key и затем введите его в соответствующее поле по ссылке выше. После этого БД сконфигурируется, однако сервер доступа не сможет запуститься, т.к. его порт в настройках БД остался по умолчанию. Для того, чтобы его сменить, выполните команду на сервере pritunl set app.server_port 10233 и перезапустите сервер доступа systemctl restart pritunl. И все — сервер готов. Дальнейшая настройка сервера хорошо описана тут.

UPD. Дальнейшее использование сервера показало, что ту конфигурацию клиента, которую генерирует это сервер не совсем совместима с плагином OpenVPN для NetworkManager (это система управления сетевыми подключениями большинства современных дистрибутивов GNU\Linux, ориентирванных на десктоп), отчего мы получаем ошибку при попытке импорта:

The file 'test.ovpn' could not be read or does not contain recognized VPN connection information
Error: the plugin does not support import capability.

Основных проблем две: в конфигурации добавляется метаинформация для интеграции с их собственным клиентом в виде закомментированного кода, поэтому лучше всего убарть эти комментарии в начале файла (на работу подключения это не повлияет). А так же некоторые параметры конфигурации указываются так, что их не может распарсить вышеуказанный плагин. В частности параметр remote должен содержать одно значение, а значения порта и протокола должны быть указаны через отдельные директивы port и proto. В результате строчка remote XX.XX.XX.XX 1194 tcp-client в конфигурационном файле test.ovpn должна выглядет как три строки:

remote XX.XX.XX.XX
port 1194
proto tcp

Так же рекомендую сделать значение параметра reneg-sec по умолчанию (т.е. просто убарть его из конфига) и у меня почему то при отключенном сжатии (comp-lzo no) рвалось соединение. Как только я его включил на клиенте проблема исчезла.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.