NOTE: В данной статье показана настройка версий ОС NDMS 2.11 и более ранних. Настройка актуальной версии ПО представлена в статье "Объединение локальных сетей через OpenVPN".
После публикации статьи "Сервер OpenVPN" нас часто спрашивают, как сделать доступными локальные сети со стороны клиента из сети сервера или объединить сети между клиентами. Опишем необходимые условия подробно.
1. Если речь идет о первой части статьи с объединением двух Keenetic в топологии "точка-точка", для обеспечения взаимной видимости сетей, помимо маршрутов, достаточно будет сделать только две настройки:
1.1. На Keenetic-сервере дать команды:
no isolate-private
system configuration save
Это необходимо, так как интерфейсы Home и OpenVPN0 имеют уровень безопасности private. Указанная команда разрешает доступ между сегментами с уровнем private, который по умолчанию запрещен. Если же разрешать такой доступ по каким-либо причинам не желательно, можно настроить правила межсетевого экрана на интерфейсах OpenVPN0 и Home. Разрешающие правила для требуемых протоколов должны иметь следующие критерии:
Для интерфейса OpenVPN0, источник должен включать адреса хостов на сервере, а назначение должно включать адреса хостов в домашней сети;
Для интерфейса Home наоборот, источник должен включать адреса хостов в домашней сети, а назначение - адреса хостов в сети сервера.
Подробнее о работе межсетевого экрана можно прочитать здесь: Описание работы с межсетевым экраном
1.2. На Keenetic-клиенте достаточно будет открыть нужные протоколы и порты для входящего трафика на интерфейсе OpenVPN0 в настройках межсетевого интерфейса через веб-интерфейс.
2. Если рассматривать второй пример из статьи "Сервер OpenVPN" с топологией subnet и сертификатами, то помимо указанных выше настроек и стандартной маршрутизации понадобится еще настроить внутреннюю маршрутизацию OpenVPN (iroute). Это необходимо для OpenVPN в режиме subnet для корректной маршрутизации пакетов внутри себя. Одной только маршрутизации между Keenetic и интерфейсом OpenVPN, как в случае других VPN, недостаточно.
2.1. Загрузите конфигурацию сервера tls-server-Keenetic-1.ovpn в настройки OpenVPN первого Keenetic. В ней, помимо стандартных настроек:
port 5190
proto udp
dev tun
server 10.8.0.0 255.255.255.0
topology subnet
comp-lzo yes
cipher AES-256-CBC
verb 3
mute 20
добавлена команда, разрешающая обмен между клиентами:
client-to-client
а также маршруты в удаленные сети клиентов:
route 192.168.2.0 255.255.255.0
route 192.168.3.0 255.255.255.0
и маршруты, передаваемые клиентам при подключении:
push "route 192.168.1.0 255.255.255.0"
push "route 192.168.2.0 255.255.255.0"
push "route 192.168.3.0 255.255.255.0"
Это универсальная конфигурация, которая позволит использовать однотипные конфигурации на стороне клиентов, не настраивая в них никаких маршрутов. Поэтому сервер настроен для передачи подключаемым клиентам сразу всех маршрутов, включая в свою собственную сеть 192.168.1.0/24 и в сети клиентов 192.168.2.0/24 и 192.168.3.0/24. А чтобы передаваемые клиентам маршруты в их собственные сети не вызвали сбой в работе, поможет настройка iroute. Это второе ее важное предназначение.
Для использования iroute в файле конфигурации имеется директива:
client-config-dir /storage
Она укажет OpenVPN место для хранения конфигураций клиентов, которые будут использоваться при их подключении. Область /storage это служебная область памяти Keenetic, доступная через веб-интерфейс, как показано ниже.
Следующая директива является необязательной. В ней указывается путь к файлу с указанием привязок ip-адресов к именам клиентов (commonName), если необходимо выдавать каждому клиенту определенный ip-адрес из сети 10.8.0.0/24:
ifconfig-pool-persist /storage/ipp.txt
Наконец команды:
keepalive 10 120
persist-key
persist-tun
служат для контроля состояния туннеля и его автоматического восстановления.
2.2 Теперь в разделе "Системный монитор", на закладке Накопители выберите storage. Следует заметить, что эта закладка доступна только на моделях Keenetic, поддерживающих сетевые накопители. Хотя сам диск или флеш-карту подключать необязательно. Это внутренний раздел памяти Keenetic, предназначенный в том числе для работы с принтерами. Он понадобится нам только для сервера OpenVPN, клиентами же могут выступать любые Keenetic-и.
Выбрав область storage:/ загрузите в нее файлы Keenetic-2, Keenetic-3 и ipp.txt
Файлы Keenetic-2 и Keenetic-3 это текстовые файлы только без расширения txt, к которых хранятся внутренние маршруты (iroute) в сети клиентов:
iroute 192.168.2.0 255.255.255.0 - в файле Keenetic-2
и
iroute 192.168.3.0 255.255.255.0 - в файле Keenetic-3
Важно, что имена этих файлов должны соответствовать имени commonName соответствующего клиента, которое мы задавали при формировании сертификатов клиентов в пунктах 2.5 и 2.6 статьи "Сервер OpenVPN".
Файл ipp.txt содержит:
Keenetic-2,10.8.0.20
Keenetic-3,10.8.0.30
и позволяет выдать первому клиенту адрес 10.8.0.20, а второму 10.8.0.30. При отсутствии такой настройки, адреса будут выдаваться начиная с 10.8.0.2 и дальше случайным образом в зависимости от очередности подключения.
2.3. На Keenetic-сервере дайте команды:
no isolate-private
interface OpenVPN0 security-level private
system configuration save
2.4. Откройте порт используемый OpenVPN, в нашем примере UDP 5190 в настройках межсетевого экрана для используемого для подключения в интернет соединения.
На этом настройки сервера завершены, и можно приступать к настройке клиентов.
2.5. Загрузите конфигурацию первого клиента tls-client-Keenetic-2.ovpn в настройки OpenVPN второго Keenetic. Настройки стандартные, только измените имя KEENETIC-1.mykeenetic.ru на имя или ip-адрес вашего Keenetic, выполняющего роль OpenVPN-сервера:
client
dev tun
proto udp
remote KEENETIC-1.mykeenetic.ru 5190
resolv-retry infinite
nobind
keepalive 10 120
persist-key
persist-tun
verb 3
comp-lzo
cipher AES-256-CBC
2.6. Не забудьте открыть нужные вам протоколы в настройках межсетевого экрана первого клиента для интерфейса OpenVPN0:
2.7. Загрузите конфигурацию второго клиента tls-client-Keenetic-3.ovpn в настройки OpenVPN третьего Keenetic, изменив в ней имя KEENETIC-1.mykeenetic.ru на имя или ip-адрес вашего Keenetic, выполняющего роль OpenVPN-сервера. Обратите внимание, что настройки второго клиента отличаются от настроек первого лишь сертификатом и ключом. Поэтому по аналогии можно настроить и подключить любое число клиентов.
2.8. Не забудьте открыть нужные вам протоколы в настройках межсетевого экрана второго клиента для интерфейса OpenVPN0:
2.9. На этом настройки завершены. Об успешном результате их применения можно судить по журналу сервера. Видно, что он выдал заданные нами в ipp.txt ip-адреса 10.8.0.20 и 10.8.0.30:
На Keenetic-2 в разделе Интернет, на закладке Подключения видно, что он получил адрес 10.8.0.20:
А в журнале, что Keenetic-2 получил маршруты в сеть сервера 192.168.1.0/24 и в сеть второго клиента Keenetic-3 192.168.3.0/24:
На Keenetic-3 в разделе Интернет, на закладке Подключения видно, что он получил адрес 10.8.0.30:
А в журнале видим, что Keenetic-3 получил маршруты в сеть сервера 192.168.1.0/24 и в сеть первого клиента Keenetic-2 192.168.2.0/24::
В заключении проверьте доступность сети клиентов со стороны сервера:
Доступность сети сервера и второго клиента со стороны первого:
А также доступность сети сервера и первого клиента из сети второго:
Итак, все сети видят друг друга. Задача решена.