Объединение локальных сетей через 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. Если рассматривать пример с топологией 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


служат для контроля состояния туннеля и его автоматического восстановления.

ovpn-01.png

2.2 Теперь на странице "Приложения" в разделе "Диски и принтеры" выберите "Встроенное хранилище" (storage). Следует заметить, что этот параметр доступен только на моделях Keenetic, поддерживающих сетевые накопители. Хотя сам диск или флеш-карту подключать необязательно. Это внутренний раздел памяти Keenetic, предназначенный в том числе для работы с принтерами. Он понадобится нам только для сервера OpenVPN, клиентами же могут выступать любые Keenetic-и. 

ovpn-02.png

Выбрав область storage:/ загрузите в нее файлы Keenetic-2, Keenetic-3 и ipp.txt

ovpn-03.png

Файлы 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 с использованием двусторонней TLS аутентификации".

Файл ipp.txt содержит:

Keenetic-2,10.8.0.20
Keenetic-3,10.8.0.30


и позволяет выдать первому клиенту IP-адрес 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


ovpn-04.png

2.6. Не забудьте открыть нужные вам протоколы в настройках межсетевого экрана первого клиента для интерфейса OpenVPN0:

ovpn-05.png

2.7. Загрузите конфигурацию второго клиента tls-client-Keenetic-3.ovpn в настройки OpenVPN третьего Keenetic, изменив в ней имя KEENETIC-1.mykeenetic.ru на имя или IP-адрес вашего Keenetic, выполняющего роль OpenVPN-сервера. Обратите внимание, что настройки второго клиента отличаются от настроек первого лишь сертификатом и ключом. Поэтому по аналогии можно настроить и подключить любое число клиентов. 

ovpn-06.png

2.8. Не забудьте открыть нужные вам протоколы в настройках межсетевого экрана второго клиента для интерфейса OpenVPN0:

ovpn-15.png

2.9. На этом настройки завершены. Об успешном результате их применения можно судить по журналу сервера. Видно, что он выдал заданные нами в ipp.txt IP-адреса 10.8.0.20 и 10.8.0.30:

ovpn-07.png

В Keenetic-2 на странице "Другие подключения" в разделе "VPN-подключения" должно быть видно, что он получил адрес 10.8.0.20. А в системном журнале, что Keenetic-2 получил маршруты в сеть сервера 192.168.1.0/24 и в сеть второго клиента Keenetic-3 192.168.3.0/24:

ovpn-08.png

На Keenetic-3 на странице "Другие подключения" в разделе "VPN-подключения" должно быть видно, что он получил IP-адрес 10.8.0.30. А в системном журнале видим, что Keenetic-3 получил маршруты в сеть сервера 192.168.1.0/24 и в сеть первого клиента Keenetic-2 192.168.2.0/24:

ovpn-10.png

В заключении проверьте доступность сети клиентов со стороны сервера:

ovpn-11.png

Доступность сети сервера и второго клиента со стороны первого:

ovpn-12.png

А также доступность сети сервера и первого клиента из сети второго:

ovpn-13.png

Итак, все сети видят друг друга. Задача решена.

 

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

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