Всем привет. Данная инструкция рассчитана на новичков и для тех кто не готов вникать в детали и проводить долгое время в консоле, а необходимо сделать защищенный удаленный доступ на работу определенным сотрудникам компании сегодня\сейчас\вчера. Короткая инструкция по настройке OpenVPN используя бесплатный дистрибутив проекта www.nethserver.org.

Почему я решил написать данный пост, ведь по этой теме и так полным полно ресурсов. К сожалению, слишком часто вижу, что системные администраторы различных организаций, пренебрегают безопасностью и для удаленного доступа используют проброс портов на маршрутизаторе с доступом по протоколу рдп (порты как стандартные, так и не стандартные), неоднократно был свидетелем того, как на удаленном сервере внезапно появлялся майнер монеро даже были хорошо написанные, которые при увеличении числа пользователей меньше майнили. Самое главное — это простота настройки, безопасно и удобство администрирования ну и конечно же, бесплатность решения. Также данный сервер можно использовать для VPN подключения телефонов серии Yealink (есть встроенная возможность подключения по OpenVPN) которые могут работать из любого места и подключение будет по локальным адресам т.е. наружу сервер АТС публиковать нет необходимости. Данная статья будет разделена на 2 части. Первая часть- это настройка самого сервера. Вторая — это настройка на клиентах, под управлением Windows, MacOS, Linux и телефон Yealink, на некоторых тонких моментах заострю внимание.
Какое оборудование необходимо иметь для настройки:
1. Маршрутизатор который «умеет» пробрасывать порты, например mikrotik (можно zyxel, keenetic или даже Eltex от Ростелекома);
2. Гипервизор (Vmware ESXI, proxmox) чтобы установить виртуальную машину или хороший компьютер с поддержкой виртуализации.
3. Выделенный статический ip адрес от провайдера.
Начинаем с установки дистрибутива www.nethserver.org, тут нет ничего сложного, стандартная установка Centos 7. Следует обратить внимание на адрес, статический или динамический с резервированием адреса на роутере, ну и конечно сетевой интерфейс на хосте виртуализации — Мост.

Адрес локальной сети в нашем случае 192.168.97.0/24:
1. адрес маршрутизатора 192.168.97.1/24
2. адрес OpenVPN сервера 192.168.97.5/24
3. VPN сеть 172.35.1.0/24
4. Статический ip адрес от провайдера, например будет 50.18.187.81

Сервер установили, заходим по адресу 192.168.97.5:980, сначала мастер первоначальной настройки попросит уточнить данные: имя сервера, порт подключения по ssh, настройки времени.

Далее заходим в «Software center», смотрим что в доступных пакетах есть OpenVPN, ставим галочку и устанавливаем (также можно установить поддержку русского языка, кому необходимо).

Небольшое отступление. Если у вас есть свой домен с пользователями и группами, то можно сделать авторизацию впн по следующему типу: сетевое имя пользователя и пароль+ сертификат. Для этого необходимо зайти в «Configuration»>>«Accounts provider» и указать данные для подключения к домену, сервер сразу «загонится» в домен, данные администратора для этого указывать не обязательно.

После этого, обновляем страницу и внизу появляется надстройка «OpenVPN roadwarrior».
Заходим, указываем настройки.

Режим авторизации:
1. Имя пользователя и пароль — можно использовать только имя и пароль, не очень удачный вариант.
2. Сертификат — подходит для тех устройств которые будут подключаться автоматически, например телефон.
3. Имя пользователя, пароль и сертификат — предпочтительный вариант для удаленного доступа.

В Mode выбираем режим маршрутизации или режим моста, в нашем случае подходит только режим маршрутизации. Если интересно, про OpenVPN мост можно почитать здесь xgu.ru/wiki/OpenVPN_Bridge.

В расширенной опции под mode, выбираем, будем ли пускать весь трафик через опенвпн — Route all client traffic through VPN. И будем ли разрешать передачу трафика между клиентами — Allow client-to-client network traffic. Можно сделать так, как у меня на картинке, ниже напишу зачем я это сделал.

Далее, Есть еще расширенная опция — Включить lZO compression и передать все статические маршруты.


Указали имя домена и адрес днс сервера — если собираетесь подключаться к своим ресурсам по днс имени.

В параметрах соединения указываете либо выделенный адрес, либо днс имя и порт UDP для подключения. Нажимаем «Submit» и переходим на вторую вкладку.



Тут также все просто, если сделали привязку к AD то выбираем системный пользователь, появиться список пользователей домена, выбираем и нажимаем «Submit». В списке появляется пользователь и можно выбрать 3 опции — изменить, удалить и загрузить. Выбираем «Загрузить», самый первый пункт «Настройка OpenVPN», в данном файлике лежит уже готовый сгенерированный конфиг с сертификатами, осталось только скопировать его в клиент.

Теперь необходимо настроить маршрутизатор. На проброс портов и маршрутизацию до впн трафика.

В качестве примера на устройствах Mikrotik правило будет выглядеть вот так:
ip firewall nat add action=dst-nat chain=dstnat dst-address=50.18.187.81 dst-port=49537 protocol=udp to-addresses=192.168.97.5 to-ports=49537

Важный момент, без которого не будет работать маршрутизация, необходимо зайти в консоль через ssh и включить форвардинг следующими командами:
echo 1 > /proc/sys/net/ipv4/ip_forward
echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
Для применения настроек можно перезагрузить nethserver.

Теперь выбираем, либо будем будем «натить» запросы с впн сервера или добавим маршрут на роутере. Что нам это даст? Когда например будет «разбор полётов» и мы будем выяснять кто подключался на сервер в определенное время, если сделаем доступ через NAT то на сервер к которому будут подключаться удаленного через впн, мы увидим только адрес nethserver, если сделаем без NAT (укажем маршрут на роутере), то выявим адрес клиента который получил адрес от впн сервера и плюс к этому, если клиент подключен на данное время, мы сможем подключиться на сам клиент по адресу который выдает OpenVPN сервер (например для администрирования клиентского устройства по DameWare, Radmin, удаленный помощник и т.п.). Поэтому предлагаю просто добавить маршрут.
ip route add distance=1 dst-address=172.35.1.0/24 gateway=192.168.97.5

Если желаете использовать NAT, то необходимо прочитать документацию docs.nethserver.org/projects/nethserver-devel/en/v7/nethserver-firewall-base.html и добавить правило в шаблон который находится в следующей директории /etc/e-smith/templates/etc/shorewall/nat (Я специально не указал в точности, что надо добавить, надеюсь кто захочет- разберется).
На этом настройка сервера закончена. Переходим ко второй части.

Настройка клиента под Windows. Тут все просто, качаем с официального сайта клиент, устанавливаем. Копируем конфигурационный файлик с расширением ovpn в C:\Program Files\OpenVPN\config и подключаемся. Но если клиентское рабочее место ограниченно по административным привилегиям. То необходимо добавить пользователя в «Операторы сети» и для того, чтобы запускался OpenVPN используем runasinvocker, делаем файлик с расширением .reg и вставляем туда следующий текст
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
«C:\\Program Files\\OpenVPN\\bin\\openvpn-gui.exe»=«runasinvoker»

Запускаем данный файлик под тем пользователем который будет работать на данном ПК и проверяем успешный запуск программы.

Настройка клиента под MacOS. Качаем с сайта tunnelblick.net/downloads.html (Stable Tunnelblick 3.7.5a), запускаем и копируем конфигурацию в вкладку с конфигурациями, запускаем и все работает.

Настройка для Yealink. На официальном сайте есть инструкция download.support.yealink.com/download?path=upload%2Fattachment%2F2017-9-13%2F3%2F071bca93-ec62-4523-a9c6-d23d41a9eb8d%2FOpenVPN_Feature_on_Yealink_IP_Phones_V81_73.pdf можно ознакомится и посмотреть какие модели телефонов поддерживают соединения по openvpn, я лишь продублирую основные моменты. Небольшое отступление, для телефонов я тестировал только авторизацию по сертификату. Например мы выгрузили конфигурационный файл с именем Yealink.ovpn, переименовываем его в vpn.cnf и через 7zip выбираем «добавить к архиву» в поле формат архива указываем «tar». Теперь у нас есть готовый конфигурационный файл. Заходим через Web интерфейс на телефон Network>>Advanced в самом низу VPN, выбираем «Enabled» и загружаем конфигурационный файл. Перегружаем телефон и проверяем есть ли соединение на самом аппарате в правом верхнем углу будет гореть значок «VPN».

На сервере можно смотреть через WEB кто подключен, откуда и какой адрес выдал сервер на данный момент в пункте меню «Состояние», OpenVPN. Также можно смотреть логи подключений.

Для тех кто хочет разобраться с данной технологией получше и не желают использовать решения из коробки, рекомендую прочитать статью habr.com/post/233971.

Вероятно могут появится комментарии из серии «Для таких целей можно использовать PfSense, он и занимает меньше и работает „быстрее“, каждый выбирает ту систему которая ему нравится. В этом дистрибутиве (а правильнее сказать надстройкой над Centos7) практически все работает из коробки. Бэкапы всех конфигураций с установками и много других возможностей в том числе, можно вместе совместить и АТС asterisk 13, VPN сервер и nextcloud, все работает.
Спасибо за внимание. Комментарии и критика приветствуется.

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