Zyxel и объединение сетей через VPN

Задача решалось применительно к OpenVPN-соединениям, но ничего не мешает применить это же решение к другим типам VPN-соединений.

Постановка задачи

Есть головная сеть (головной офис, сеть на работе и т.п.), есть удалённая сеть (филиал, домашняя сеть и т.п.). Необходимо связать сети между собой через VPN и обеспечить доступность компьютеров из одной сети в другой. Т.е. чтобы из удалённой сети можно было зайти на комп в головной сети и наоборот.

Удалённая сеть построена на основе Zyxel Keenetic Giga III

"Условные обозначения"

Головная сеть имеет следующие блоки адресов: 1.1.1.0/24, 2.2.2.0/24, 172.16.0.0/15, из них первые две сети – публично доступные адреса.

Публично доступный адрес VPN-сервера в головной сети: 1.1.1.11

Удалённая сеть имеет адресацию 192.168.1.0/24

Сеть 172.18.1.0/24 используется для организации VPN-доступа.

Решение

Ключевые настройки на стороне сервера:

server 172.18.1.0 255.255.255.0 client-config-dir ccd route 192.168.1.0 255.255.255.0 client-to-client
ifconfig-push 172.18.1.6 172.18.1.5 iroute 192.168.1.0 255.255.255.0 push "route 172.16.0.0 255.255.0.0" push "route 172.17.0.0 255.255.0.0" push "route 1.1.1.0 255.255.255.0" push "route 2.2.2.0 255.255.255.0" push "route 2.2.9.0 255.255.255.0" push "route 4.5.6.7 255.255.255.255"

Здесь последние две строки обеспечивают маршрутизацию в стороннюю сеть 2.2.9. и к сторонней машине 4.5.6.7 из удалённой сети через VPN-канал. Кроме того настраиваем трансляцию адресов:

iptables -t nat -A POSTROUTING -s 172.18.1.0/24 -d 1.1.1.0/24 -j RETURN iptables -t nat -A POSTROUTING -s 172.18.1.0/24 -d 2.2.2.0/24 -j RETURN iptables -t nat -A POSTROUTING -s 172.18.1.0/24 -d 172.16.0.0/15 -j RETURN iptables -t nat -A POSTROUTING -s 172.18.1.0/24 -j SNAT --to-source 1.1.1.11

На стороне клиента, при создании VPN-соединения, снимаем галочку в поле «Использовать для выхода в Интернет», и, наоборот, ставим в поле «Получать маршруты от удаленной стороны».

В целом, это стандартная настройка OpenVPN-сервера и клиента. На этом этапе из удалённой сети будут пингаться машины в головной сети, при условии, что тем или иным способом будет построен обратный маршрут. Но машины в головной сети будут получать пакеты, «заНАТеные» адресом 172.18.1.6. Кроме того, из головной сети машины в удалённой сети будут не доступны.

Чтобы решить эту проблему заходим на Zyxel через telnet/ssh и в командлной строке вводим следующее:

ip static Home ISP no ip nat Home interface OpenVPN0 security-level private no isolate-private

Первая строка включает НАТ для пакетов пришедших из локальной сети и уходящих через интерфейс в сторону провайдера. Вторая строка отключает безусловный НАТ пакетов из локальной сети. Две последние отмечают, что VPN-канал надо считать локальной сетью, и что локальные сети на разных интерфейсах могут взаимодействовать друг с другом.

Проверяем, если всё хорошо, в CLI говорим команду copy running-config startup-config

Tracedump:

newBaseSize: 16pt
newBaseSizeInPt: 16