L2TP (Layer 2 Tunneling Protocol) – это протокол туннелирования, который позволяет создавать виртуальные сети путем инкапсуляции данных на канальном уровне L2 модели OSI. Данные в нём передаются в открытом виде. По сути, это виртуальный провод (туннель) без какой-либо защиты. Из-за этого возможен перехват трафика, подмена пакетов, подмена сервера, подбор логинов/паролей и тп. L2TP-туннели нельзя использовать без дополнительной защиты шифрованием. Обычно для этих целей используется IPsec.

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

Если в вашей ситуации планируется использовать L2TP через Интернет и не доверенные сети, то обязательно нужно использовать шифрование IPsec!

Следует отметить, что на стороне клиента Windows соединение устанавливается только при использовании «родного» для Huawei USG клиента UniVPN. Скачать его можно с офф. сайта. Соединение с использованием встроенного клиента Windows настроить не получилось.(если кто-то знает как это сделать – напишите в комментариях).

 

Настройка сервера.

Интерфейс.

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

 

Настройка через CLI.

 

Если интерфейс в зоне trust, то весь трафик разрешён по умолчанию. Даже с учетом того, что сеть доверенная за счет VPN провайдера, нужно обеспечить контроль доступа, и отключить всё, кроме протокола l2tp. Поэтому интерфейс добавлен в зону untrust.

Привязки интерфейса к сервису L2TP в этом сетевом экране нет. Когда активируется l2tp enable, USG начинает прослушивать UDP-порт 1701 на всех интерфейсах и разрешает L2TP трафик через политику безопасности между зонами.

 

Пул L2TP.

Создаем пул адресов, которые будут раздаваться внутри L2TP.

 

Настройка через CLI.

 

Домен и пользователи.

В домене настраиваются сценарии доступа, способ аутентификации (локально или внешний сервер), пользователи, правила после входа и тп. domain default – это домен аутентификации по умолчанию. Он используется если явно не указан другой домен. С точки зрения безопасности и удобства использования лучше создать отдельный домен для L2TP. Создаем.

 

На USG имена доменов не чувствительны к регистру, но система автоматически приводит их к нижнему регистру, даже если написать название домена большими буквами.

 

Назначаем домену сценарий использования и создаем пользователей. Если не активировать Online behavior management, пользователи не будут видны в разделе Online Users, потому что в этом случае устройство не ведёт учет их онлайн-сессий.

 

Настройка через CLI.

Создаем домен и назначаем сценарий использования.

aaa – это единая система управления доступом на USG. Механизм аутентификации, авторизации и учёта (Authentication, Authorization, Accounting). Настройки схемы и домена выполняются через неё.

internetaccess – это online behavior management в GUI.

 

user-manage – центральный модуль управления пользователями VPN. Для сравнения и понимания это выглядит так:

-системные пользователи управляются через aaa local-user;

-L2TP и другие VPN-пользователи  управляются через user-manage user.

user-manage хранит пользователей и их политики. aaa механизм использует эти данные для аутентификации и применения правил. Примерно так это связано.

Создаем пользователя vpnuser в домене l2tp-domain.

Созданные пользователи появляются в указанном домене. Если домен не указывать, то пользователь создастся в домене default. Можно использовать домен LDAP.

 

Схема (service-scheme).

service-scheme – это шаблон, который определяет параметры обслуживания пользователя после его успешной аутентификации. Простыми словами это набор правил, определяющий что получит пользователь, после того как подключился. В схеме можно указать пул (IP-адрес для клиента), DNS, время сессии, маршруты и тп. Схема настраивается напрямую только через CLI. В GUI схема автоматически создается при создании группы L2TP.

 

Просмотр схем.

 

Просмотр конкретной схемы.

 

Удаление схемы и всех ее настроек внутри (если понадобится).

 

 

Виртуальный интерфейс.

Создается автоматически при создании группы в GUI или вручную, но только через CLI.

Для Virtual-Template зона не назначается или создается отдельная зона.

Чтоб можно было пинговать с клиентов IP-адрес 192.168.50.1 на интерфейсе настроен ping permit.

 

Просмотр состояния.

 

Просмотр конфигурации.

 

Если были созданы лишние виртуальные интерфейсы, то удалить их можно так.

 

Если интерфейс привязан к default-группе, то удалить его не получится.

Отвязка всех настроек от дефолтного интерфейса.

Всё что есть – отвязываем.

и тп.

Затем

 

Группа L2TP.

Настройки группы определяют параметры L2TP-сервера: безопасность туннеля, аутентификацию пользователей и сетевые параметры (IP-адресация). Это всё то, что было настроено выше, собрано в одном месте. В GUI при создании группы автоматически создастся схема и виртуальный интерфейс. В этом же меню можно создать пул. Группу лучше создавать через CLI, чтоб у схемы было адекватное название, а не набор цифр. В CLI можно видеть конкретные настройки, чтоб в случае аварийной ситуации знать что исправлять.

 

Group Name – любое понятное название.

Group Type – тип группы.

LNS (L2TP Network Server) – режим сервера (принимает подключения).

LAC (L2TP Access Concentrator) – режим клиента (инициирует подключения к другому серверу).

Local Tunnel Name – имя туннеля на стороне сервера.

Peer Tunnel Name – ожидаемое имя туннеля на стороне клиента. Это дополнительная мера безопасности и идентификации. USG ожидает, что клиент при подключении передаст именно это имя. Если имя не совпадает – туннель не будет установлен. Позволяет различать подключения от разных клиентов или групп. Не является шифрованием. Это просто текст, который передаётся в открытом виде. Не заменяет пароль туннеля. На стороне клиента в Windows это поле не настраивается. Возможно, что это одна из причин, по которой встроенный клиент Windows не подключается к USG.

Tunnel Password – общий ключ для аутентификации туннеля (должен совпадать у клиента и сервера).

Authentication Domain – домен аутентификации пользователей.

Associated Zone – зона безопасности для туннеля.

L2TP Authentication:

PAP – пароль в открытом виде (ненадёжно).

CHAP – защищённая аутентификация (рекомендуется).

 

Создаваемой группе присваиваем IP-адрес для внутреннего сервера L2TP сети и диапазон раздаваемых адресов (пул).

User Address Assignment – назначение адреса пользователя.

Server Address/Subnet Mask – IP-адрес сервера LNS.

Address Pool – пул IP-адресов для выдачи клиентам.

 

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

Настройка группы через CLI.

 

Активация сервера L2TP.

После того как конфигурация готова, активируем глобальную настройку L2TP.

Через CLI.

 

Политика безопасности.

Политики настраивались тут. Согласно настройке запрещено всё, кроме того что явно разрешено. Поэтому создаем правило разрешающее протокол L2TP для указанных зон и IP-адресов.

 

В данном случае трафик направляется в сам USG, поэтому зона назначения – local.

Через CLI.

source-address – IP-адрес сети филиалов (или можно создать группу).

destination-address – IP-адрес USG.

 

Расположить правило нужно ближе к верху списка (выше правила полного доступа в Интернет).

Сохраняем всю настроенную конфигурацию на кнопку Save.

 

Как это всё работает.

Команда l2tp enable запускает системную службу, которая прослушивает UDP 1701 на всех интерфейсах.

Входящий трафик от клиента попадает на физический интерфейс GigabitEthernet0/0/2.

Проходит проверку политик безопасности (разрешение untrust в local на порт 1701) и передаётся L2TP-движку.

Движок это отдельный системный процесс в ОС USG, ядро обработки L2TP. Он проверяет:

-совпадение tunnel password и tunnel name в l2tp-group;

-привязку к домену l2tp-domain.

Далее запрос перенаправляется в AAA, где проверяются учётные данные через user-manage или внешний сервер.

При успехе применяется service-scheme (выдача IP из пула).

На основе Virtual-Template создаётся PPP-сессия, которая маршрутизирует трафик пользователя в целевую сеть.

В итоге получилась трех-уровневая инкапсуляция (два протокола провайдера и третьим этот созданный L2TP- туннель), но это ни как не влияет на качество и скорость.

 

С точки зрения безопасности вся ответственность за защиту сети лежит на провайдере. До настройки туннеля трафик уже передавался по этой сети в не зашифрованном виде. Нет разницы что передавать: просто трафик, или траффик в виде туннеля. Это всё передается одинаковыми способами через выданные провайдером IP-адреса и шлюзы, защищенные от Интернета его IPsec-ом. Теоретически провайдер может видеть незашифрованный трафик от созданного туннеля на своих интерфейсах, но для гос. организаций это норма.

У кого ситуация другая, и туннель настраивается через Интернет, обязательно нужно применять собственное шифрование IPsec. Такая возможность у  сетевого экрана есть.

 

Настройка клиента.

Клиент с ОС Windows 11. Скачиваем и устанавливаем UniVPN. При установке создастся виртуальный сетевой адаптер. Запускаем.

Создаем новое соединение.

 

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

Connection name – любое понятное имя.

LNS Server Address – IP-адрес сервера L2TP «внешний», на который будет происходить подключение.

Tunnel Name – название туннеля на стороне клиента, такое же как вводили при настройке сервера.

Authentication Mode – режим аутентификации CHAP.

Enable Tunnel Authentication – активация аутентификации для туннеля.

Tunnel Authentication Password – пароль туннеля.

 

Нажимаем кнопку Connect.

 

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

Можно отметить галками сохранение пароля и авто логин.

 

После нажатия кнопки Login происходит подключение к серверу. Об это сообщит статистика в левой части окна программы.

 

Всплывающее сообщение так же подтверждает успешность подключения.

 

Чтоб минимизировать действия пользователя активируем автозапуск клиента при включении компьютера.

На этом настройка клиента завершена.

Если подключение не происходит, то о причинах этого появляются различные сообщения. Читаем их и устраняем причину. Или смотрим логи и мониторинг сессии.

 

Мониторинг.

Установившиеся туннели отображаются в USG на вкладке Monitoring.

 

Мониторинг сессии позволяет отследить некоторые этапы подключения.

 

Например, по сессии можно увидеть был ли обратный трафик или под какое правило политики безопасности попало соединение.

 

Подключенные пользователи отображаются на соответствующей вкладке.

Просмотр через CLI.

 

Привязка IP-адреса к пользователю.

В GUI это делается в атрибутах пользователя.

Настройка через CLI.

 

Просмотр конфигурации пользователя.

 

Маршрут в сеть за USG.

Если в главном офисе сеть, например, 192.168.1.0/24, то чтобы попасть в эту сеть на клиенте через cmd нужно прописать следующий маршрут:

Запуск cmd от имени администратора.

В маршруте шлюзом указан внутренний адрес L2TP-сервера.

На стороне сервера маршруты к клиентам создаются автоматически.

 

Просмотр созданного маршрута.

 

Трафик должен идти через туннель. Для проверки выполняем трассировку в любой ПК локальной сети.

 

Политика безопасности для проходящего L2TP-трафика.

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

Если мы указываем зоны из untrast в trust то мы открываем широкие возможности для проникновения в нашу сеть. Потому что в такое описание попадает WAN интерфейс и кто-нибудь подделав IP-адрес попадает под эту политику и сможет проникнуть в локальную сеть из Интернета.

Для того чтоб сузить возможности доступа необходимо присвоить виртуальному интерфейсу дополнительную зону и указать её в политике вместо untrust. Сделаем это.

Создаем новую зону с произвольным приоритетом.

 

Добавляем в созданную зону виртуальный интерфейс. Сделать это можно только через CLI.

 

Просмотр.

 

Удаление интерфейса из зоны (если понадобится).

 

Далее создаем политику безопасности с указанием созданной зоны.

Через CLI.

Расположить правило нужно там же где и предыдущее правило L2TP.

В первой фазе при установлении туннеля трафик идет из untrust в local. После создания туннеля проходящий трафик идет от клиента в локальную сеть, тоесть он идет через виртуальный интерфейс, который добавили в зону vpn_access (из vpn_access в trust) . В результате такой настройки нет прямого доступа из untrust в trust. Не затрагиваются другие интерфейсы с зонами untrust. Поэтому такой вариант безопаснее.

Если на сервере установлен антивирус или встроенный брандмауэр, то в нем так же нужно настроить разрешение для доступа из сети клиента или указать доверенную сеть.