Подключаемся к удаленному роутеру ZyXEL по IPsec VPN через StrongSwan на Headless Ubuntu 14LTS

Несмотря на жутко сложное название статьи, изобилующее множеством непонятных терминов, суть ниже пойдет о весьма тривиальной вещи. Понадобилось мне, по неочевидной причине, подсоединить сервер на Ubuntu к другой локальной сети, в которой тоже есть сервера на Ubuntu. Соединить через интернет, разумеется. Локальная сеть, по счастливому стечению обстоятельств, подключена к интернету посредством «роутера» ZyXEL с «белым» публичным IPv4. Особенности роутеров ZyXEL в том, что даже в бытовых моделях есть возможность устанавливать и использовать дополнительные модули программного обеспечения роутера. Соответственно, на начало 2017 года на бытовой роутер ZyXEL можно установить две разновидности VPN: PPTP и IPSec. Именно этим и воспользуемся.

Поддержка ZyXEL своих устройств неоднократно меня радовала, но для настройки VPN соединения на роутере можно обойтись и без помощи со стороны живого инженера компании. Достаточно воспользоваться базой знаний русскоязычного портала поддержки ZyXEL. Поскольку роутер от ZyXEL у нас подключен к глобальной сети посредством публичного IP-адреса, то на нем будет установлена серверная часть VPN, а сервер с Ubuntu, находящийся в другой локальной сети и подключенный к интернету с «серым» непубличными IP-адресом, будет выступать в качестве клиента. Схема подключения получается примерно следующей:

схема сети, сетевая диаграмма, ZyXel, Internet, клеточка

Схема "сети" при подключении сервера Ubuntu из-за "серого" адреса к ZyXel с белым адресом.

Именно наличие публичного IP-адреса позволяет стать стороне с роутером ZyXEL сервером. А сторона с непубличным адресом может выступать только в качестве клиента. Установка и настройка VPN подключения PPTP достаточно подробно описана в статье базы знаний ZyXEL. Тем не менее, против использования PPTP есть два небольших «но». Во-первых, несмотря на всю простоту подключения, протокол PPTP был и остается уязвимым. Его применение не рекомендуется для случаев, когда компрометация данных, передаваемых посредством PPTP, крайне нежелательна. Во-вторых, протокол PPTP использует для своей работы другой протокол туннелирования — GRE. Но протокол GRE у некоторых прижимистых провайдеров, например, у МГТС, фильтруется еще до абонента и воспользоваться соединением PPTP можно только при покупке услуги «Публичный IP-адрес».

zyxel, веб-интерфейс, ipsec, VPN, IKEv1, DES, MD5, tunnel

Настройки IPsec сервера на ZyXel согласно рекомендации ZyXel. Возможно использование усиленного шифрования канала.

Остается IPsec VPN. Реализация IPsec для ZyXEL не самая современная, но вполне рабочая. Если сравнить IPsec и PPTP в плане настроек, то первый примерно на пару порядков сложнее. Но, благодаря статье базы знаний на сайте производителя роутера проделать сию процедуру можно даже без особого понимания того, что же там настраивается. Заодно, в статье присутствует информация по возможности настройки клиентской части под Windows с использование приложения и драйвера Shrew. И именно в такой последовательности я рекомендую проводить настройку. Сначала настраиваем сервер на роутере, а затем устанавливаем драйвер Shrew на Windows-машине для проверки работоспособности VPN-канала. Shrew позволяет избавиться от боли и проверить работоспособность соединения самым легким способом.

Следующим же шагом предпринимаем попытку настройки клиентской части на нашем сервере под Ubuntu. Идеально было бы попробовать использовать все тот же самый пакет от Shrew, благо он доступен и для Linux. Но тут нас ждет первое разочарование, пакет Shrew работает только на Linux с рабочим столом. А у нас применяется система без монитора и соответственно без какого-либо рабочего стола вообще. Ну не нужен он на сервере, только ресурсы лишние потребляются.

Shrew в таком случае — не вариант. Но Linux остается Linux-ом и для него доступны альтернативные решения. Как минимум для пользователей доступны OpenSwan и StrongSwan. Мой выбор пал на StrongSwan. Проект радует подробнейшей и понятной документацией, множеством примеров и прочими мелкими да средними приятностями. Более того, StrongSwan уже включен в стандартный репозиторий пакетов Ubuntu, плюс присутствует версия для системы Android. Забегая вперед, хочу заметить, что актуальную версию StrongSwan для Android так и не получилось подключить к IPsec на ZyXEL, поскольку StrongSwan для Android не поддерживает шифрование обычной парольной фразой (PSK), а версия на ZyXEL других вариантов не предлагает.

apt-get install strongswan

После установки пакета StrongSwan в Ubuntu необходимо провести его настройки. Для подключения к ZyXEL требуется подкорректировать всего два файла. Первый /etc/ipsec.conf содержит настройки подключения к серверу, а второй /etc/ipsec.secrets.

Начнем с ipsec.secrets. В этом файле указываем ту самую парольную фразу (PSK), которую мы установили на ZyXEL. Поскольку одна и та же парольная фраза используется для шифрования передаваемых данных в обе стороны, то прописать ее можно примерно следующим образом:

192.168.1.19 NameOfYourServer.com : PSK "YourPSK"

При вводе строки в файл, необходимо строго соблюдать наличие пробелов и использовать правильные кавычки для PSK. В левой части через пробел указываем идентификаторы клиентской (в терминах StrongSwan это left, «левая») и серверных частей (right, «правая»). Сами идентификаторы указываются в файле ipsec.conf. Собственно в файле ipsec.conf достаточно указать следующие настройки (в точности так, как они же указаны в настройках сервера на ZyXEL):

conn ToZyxel 
   ikelifetime=1h 
   lifetime=1h 
   ike=des-md5-modp768 
   esp=des-md5 
   left=192.168.1.19 
   leftid=Ubuntu 
   leftauth=psk 
   leftsubnet=192.168.1.0/24 
   right=NameOfYourServer.com 
   rightid=192.168.0.10 
   rightauth=psk 
   rightsubnet=0.0.0.0/0 
   keyexchange=ikev1 
   auto=start 
   dpdaction=restart 
   dpddelay=30s

Я не буду расписывать все указанные параметры, пытливый читатель сможет ознакомиться с ними самостоятельно, остановлюсь на самых критичных. Параметр ike задает метод шифрования, собственно DES, формат проверки целостности пакетов MD5 и тип DH-группы (в нашем случае она 1-я, поэтому modp768). Параметр rightsubnet задаем отличным образом от того, как он настроен на сервере. На сервере используется 192.168.0.0 с маской 255.255.255.0, но в настройке StrongSwan используется «любая» сеть 0.0.0.0/24. Почему именно так? Реализаций IPsec существует несколько и часто они не совсем совместимы между собой, так как в одних реализован механизм Cisco Unity и информация о подсети на той стороне передается во время установления туннеля, а в других механизм отсутствует. И приходится выкручиваться. Если установить параметр rightsubnet в значение 192.168.0.0/24 как задано на сервере, то при попытке подключения клиентом к серверу туннель не будет создаваться с ошибкой invalid_id_information.

Перезагружаем клиентскую часть через команду ipsec restart и проверяем наличие туннеля просто пингуя любую машину, в том числе и сам роутер по внутреннему адресу (в примере это 192.168.0.10). Если ping идет, то тоннель работает и все у нас получилось. Если нет, то посмотреть информацию можно либо посредством команды ipsec statusall или же посмотрев на записи от StrongSwan в системном лог-файле (/var/log/syslog).

Что дальше? А дальше можно настроить маршрутизацию в локальной сети клиента. Для этого необходимо настроить маршрутизацию пакетов на самом Ubuntu сервере и на роутере «левой» локальной сети. Маршрутизация в «правой» сети настроена при настройке IPsec сервера на ZуXEL. А в случае, когда и в «левой» сети установлен роутер ZyXEL, то можно облегчить себе жизнь и настроить клиентскую часть непосредственно на роутере. Подробная инструкция по настройке имеется в базе знаний ZyXEL.

Небольшое замечание по поводу настроек роутеров в отношении NAT Traversal. Технология NAT-T предназначена как раз для того, чтобы пропускать пакеты IPsec через Firewall роутера. Но, судя по отзывам некоторых пользователей NAT-T может как раз препятствовать прохождению IPsec пакетов через брандмауэр роутера. И если вы испробовали уже все настройки, но так и не смогли подключиться клиентом к удаленному IPsec серверу, то стоит поиграться с настройкой NAT-T вашего роутера. Если она включена — отключить, а если отключена, то, соответственно — включить.



Подключаемся к удаленному роутеру ZyXEL по IPsec VPN через StrongSwan на Headless Ubuntu 14LTS: 2 комментария

  1. Дмитрий

    Вот только есть одна проблема, нельзя перенаправить на этот сервер Ubuntu порты, например порт 80 со стороны зухеля с белым IP.

    1. kvv Автор записи

      Не понимаю, почему нельзя? В Зюхеле открываем порт и сопоставляем его с адресом Юбунту котоаря за Зюхелем.

Добавить комментарий