Пример настройки доступа между локальными сетями интернет-центров Keenetic с помощью расположенного в облачном хостинге сервера OpenVPN

Рассмотрим поставленную задачу. Несколько территориально удаленных один от другого офисов подключены к сети Интернет через интернет-центры Keenetic. Каждое подключение не имеет реального публичного IP-адреса. Плюс, в предприятии выездные сотрудники пользуются при работе услугами различных провайдеров, также подключаясь к Интернету без выделенного публичного адреса. Структура бизнеса предполагает коммуникацию между офисными ПК, и сотрудники в командировках должны иметь доступ к офисным сетям.
Предприятие использует хостинг в облачном сервисе, для размещения веб-сайта и других публичных служб. Хостинг предоставляет публичный IP-адрес, доменное имя для удобства доступа и процессорные мощности под управлением операционной системы серверного типа (Линукс).

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

В нашем примере, на хостинге установлена операционная система семейства Arch (дистрибутив Netrunner Rolling). Для развертывания сервера и генерации клиентских настроек мы используем скрипт openvpn-install. Эта программа предназначена для автоматизации процесса настройки сервера OpenVPN и поддерживает основные из обычно используемых в качестве серверных общего назначения дистрибутивов на linux-ядре системы, с архитектурой amd64 и инициализацией на основе systemd (обязательно).

OpenVPN1.png

Перейдем к настройке системы.

1. В размещенной на хостинге системе необходимо установить пакет OpenVPN. Это можно сделать как при помощи графической оболочки для управления установками программ (выбранный нами дистрибутив сразу оснащен двумя такими средствами, Octopi и Discover), так и при помощи менеджера пакетов. В Arch, для управления пакетами используется консольная утилита pacman. Приведем распечатку установки при помощи консоли.

CLI: pacman -S openvpn

Screenshot_20181002_035006.png

В системе должна быть включена директива IPv4_forwarding и поддержка сетевых интерфейсов TUN/TAP. По умолчанию, данные параметры присутствуют в современных дистрибутивах, однако, нелишним будет удостовериться, поскольку иначе дальнейшие настройки не будут работоспособными. По команде

CLI: lsmod | grep tun

должна выводиться запись о загруженном модуле.

Screenshot_20181002_170512.png

По команде

CLI: cat /proc/sys/net/ipv4/ip_forward

должна выводиться единица.

Screenshot_20181002_171022.png

Также, желательно убедиться в наличии публичного адреса на сервере. В том случае, если адрес не является публичным, клиенты из сети интернет не смогут подключиться. Назначенный на активном интерфейсе системы IPv4-адрес можно посмотреть, выполнив команду

CLI: ip -br -4 address | grep UP

2. Перейдем в каталог /etc/openvpn. Здесь, на данном этапе, располагаются две защищенные системой директории, client и server - они были созданы при установке пакета openvpn. К этим каталогам у нас нет требований, мы их в процессе настройки не используем. Добавим папку automation и закачаем в нее скрипт (его можно поместить в принципе в любой удобный каталог файловой системы). 

CLI: cd /etc/openvpn
ls
mkdir automation
cd automation

Screenshot_20181002_174829.png

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

CLI: curl -O https://raw.githubusercontent.com/Angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh

Screenshot_20181002_175436.png

Продолжая работать в созданном нами каталоге по адресу /etc/openvpn/automation, убедимся, что скрипт на месте и исполняем, и запустим его.

CLI: ls -lF
./openvpn-install.sh

Screenshot_20181003_070333.png

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

Screenshot_20181005_015931.png

Следующий вопрос касается включения поддержки IPv6, в нашем сценарии это не требуется. Ответ по умолчанию - нет, пропускаем пункт нажатием клавиши Enter.
В шаге 3 нужно указать номер порта. По умолчанию OpenVPN использует порт номер 1194, его можно поменять если необходимо. В рассматриваемом здесь сценарии менять порт не требуется.
Четвертый вопрос, относительно используемого сервером для работы с клиентами протокола. Рекомендуется использовать UDP при наличии надежных каналов доступа к интернету. Если связь, особенно на стороне сервера, ненадежная, в силу особенностей работы протокола TCP можно повысить отказоустойчивость при передаче данных по туннелю, однако и скорость может быть заметно ниже чем при использовании UDP.

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

Screenshot_20181005_020935.png

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

Screenshot_20181005_021529.png

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

Screenshot_20181005_022408.png

Согласимся на обновление и следующим шагом скрипт запрашивает имя для клиента. Укажем имя для роутера в офисе А, он будет tyllian. Шифрование ключа при помощи пароля не включаем.

Screenshot_20181005_103825-1.png

Файл с конфигурацией клиента помещен в домашнем каталоге.

CLI: ls ~ | grep ovpn

Screenshot_20181005_104329.png

3. После того как сервер установлен и настроен, подключим к нему теперь интернет-центр Keenetic. Файл с настройками клиента tyllian.ovpn, нужно открыть в текстовом редакторе и закомментировать в нем строку "setenv opt block-outside-dns # Prevent Windows 10 DNS leak", следующим образом (данная опция специфична для клиентов под управлением ОС Windows).

CLI: kate ~/tyllian.ovpn

Screenshot_20181006_140205.png

Затем, полный текст документа нужно перенести в поле ввода конфигурации в настройке интерфейса OpenVPN роутера в офисе А.

Screenshot_2018-10-06_14-53-02.png

Сохранив установки интерфейса, включим его в меню "Другие подключения".

Screenshot_2018-10-06_15-36-27.png

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

4. Для того, чтобы по туннелям осуществлялась маршрутизация между подсетями подключенных к серверу клиентов, необходимо выполнить дополнительную настройку сервера.
Перейдем из /etc/openvpn/automation в верхний каталог /etc/openvpn и создадим в нем папку с именем ccd (аббревиатура от Client Config Directory).

CLI: cd ..
mkdir ccd
cd ccd

Screenshot_20181006_170551.png

В каталоге /etc/openvpn/ccd должны быть расположены специальные файлы, каждый названный по имени подключающегося к серверу клиента. Они предназначены, в частности, для определения расположенных за подключенным клиентом сетей. Для этого в файл нужно поместить директиву вида iroute {адрес_подсети} {маска_подсети}.

В нашем примере, офис А и офис Б являются такими клиентами. Каждый из них, фактически, подключает к серверу свою локальную подсеть, соответственно 192.168.18/24 и 192.168.101/24. Добавим для них файлы и обозначим в каждом клиентскую подсеть.

CLI: echo "iroute 192.168.18.0 255.255.255.0" | tee -a tyllian
echo "iroute 192.168.101.0 255.255.255.0" | tee -a lorelei
cat tyllian
cat lorelei

Screenshot_20181006_182949.png

Как мы убедились при помощи команд cat, файлы с директивами клиентских конфигураций созданы корректно. Далее, вернемся в основной каталог /etc/openvpn, чтобы отредактировать файл настроек собственно сервера openvpn. Этот файл, server.conf, был сгенерирован автоматически скриптом, который мы запустили на втором шаге нашей инструкции скрипт. Сначала, создадим его резервную копию bckp-server.conf.

CLI: cd ..
cp server.conf bckp-server.conf
ls

Screenshot_20181006_230201.png

Для наглядного редактирования файла вызовем программу GNU nano.

CLI: nano server.conf

Screenshot_20181006_235037.png

Изначально, сгенерированная скриптом настройка нашего сервера выглядит так.

Screenshot_20181006_234855.png

В текст файла, добавим следующие строки:
client-config-dir ccd - указание считывать файлы конфигураций клиентов в каталоге ccd
route 192.168.18.0 255.255.255.0 - осуществлять маршрутизацию из/к сети офиса А
route 192.168.101.0 255.255.255.0 - аналогично, IP-трафик сети офиса Б будет маршрутизироваться в TUN-устройстве, соединяющем ядро системы и OpenVPN-сервер
client-to-client - директива, включающая возможность передачи данных между клиентами сервера
push "route 192.168.18.0 255.255.255.0" - директива push позволяет направлять клиентам параметр, в данном случае это маршрут к сети офиса А
push "route 192.168.101.0 255.255.255.0" - также необходимо, чтобы клиенты получали маршрут к сети офиса Б

TIP: Примечание 

После запуска сервера, для локального управления можно использовать специальный telnet-интерфейс. Чтобы включить его, в конфигурацию нужно добавить строку вида management localhost 7865 - где 7865 это номер порта, незадействованный в других приложениях.

После внесения изменений, файл в редакторе нужно сохранить и закрыть программу. Для этого используются сочетания клавиш, соответственно, Ctrl+o (будет выведен запрос имени файла для записи, нужно подтвердить запись в существующий файл нажатием Enter) и Ctrl+x.

Screenshot_20181007_013317.png

Проверим содержимое файла конфигурации сервера при помощи команды cat.

CLI: cat server.conf

Screenshot_20181007_014231.png

5. Для генерации файлов конфигурации клиентов с именами lorelei (офис Б) и knight_1 (мобильный сотрудник) запустим скрипт автоматизации повторно.

CLI: ./automation/openvpn-install.sh

Screenshot_20181007_020901.png

Для добавления нового клиента, подтверждаем выбор опции 1.

Screenshot_20181007_020949.png

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

Screenshot_20181007_021101.png

Файл настроек сформирован в домашний каталог пользователя системы.

Screenshot_20181007_021158.png

Загрузим полученную конфигурацию из файла lorelei.ovpn в интернет-центр Keenetic офиса Б (аналогично как в пункте 3). Файл knight_1 нужно загрузить в клиент OpenVPN на ноутбуке или смартфоне. В случае если мобильный сотрудник не использует Windows, строку "setenv opt block-outside-dns # Prevent Windows 10 DNS leak" в файле конфигурации для него также может потребоваться закомментировать или удалить.

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

Screenshot_2018-10-11_00-22-01.png

6. Ресурсы в удаленных сетях должны быть доступны по их IP-адресам. Для проверки работы схемы, в этом можно убедиться, выполняя пинг хостов в сетях офисов, например, со смартфона с установленным подключением к серверу.

Screenshot_20181011-005928.png

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

https://openvpn.net/index.php/open-source/documentation/howto.html#scope

https://wiki.archlinux.org/index.php/OpenVPN#Connect_the_client_LAN_to_a_server

 

Была ли эта статья полезной?

Пользователи, считающие этот материал полезным: 9 из 9