Что такое L2TP и зачем он нужен
L2TP (Layer 2 Tunneling Protocol) — протокол туннелирования второго уровня, разработанный на основе PPTP и проприетарного L2F от Cisco. В отличие от PPTP, L2TP не использует выделенный канал управления: все управляющие сообщения передаются через сам туннель. Это решает проблему прохождения через NAT, поскольку данные инкапсулируются в UDP-пакеты (порт 1701), а не в GRE, у которого нет портов.
Однако сам по себе L2TP не обеспечивает шифрование и аутентификацию — он лишь создаёт туннель. Поэтому на практике его всегда используют в связке с IPsec, который добавляет шифрование (например, AES-256) и проверку подлинности. Такая комбинация называется L2TP/IPsec и поддерживается встроенными средствами всех популярных операционных систем: Windows, macOS, iOS, Android, Linux.
Протокол работает по клиент-серверной модели: один узел выступает сервером, принимающим подключения, другой — клиентом, инициирующим соединение. Для организации доступа к корпоративной сети или для обхода блокировок L2TP/IPsec остаётся востребованным благодаря своей универсальности и отсутствию необходимости устанавливать сторонние приложения.
Как работает связка L2TP и IPsec
Когда клиент инициирует подключение L2TP/IPsec, происходит двухэтапный процесс. Сначала устанавливается защищённый канал IPsec: стороны обмениваются ключами через протокол IKE (Internet Key Exchange), используя UDP-порт 500 (ISAKMP) и порт 4500 для NAT-T (Network Address Translation Traversal). После согласования параметров шифрования создаётся ESP-туннель (Encapsulating Security Payload), который шифрует все последующие данные.
Затем внутри этого защищённого канала устанавливается L2TP-туннель. L2TP инкапсулирует PPP-кадры, которые несут пользовательские данные. В результате трафик получает множественную обёртку: пользовательские данные → PPP → L2TP → UDP → IPsec ESP → IP. Это обеспечивает конфиденциальность и целостность, но добавляет значительные накладные расходы.
Важно понимать: IPsec в связке с L2TP обычно настраивается в режиме транспорта, а не туннеля, поскольку L2TP уже создаёт туннель. При этом используется предварительный общий ключ (PSK) для аутентификации IPsec и отдельные учётные данные (имя пользователя и пароль) для L2TP. Такая двухуровневая схема повышает безопасность, но усложняет диагностику при сбоях.
Преимущества и недостатки L2TP/IPsec
Преимущества:
- Встроенная поддержка — клиенты L2TP/IPsec есть во всех основных ОС, не нужно устанавливать дополнительное ПО.
- Высокая безопасность — IPsec с AES-256 обеспечивает защиту корпоративного уровня.
- Стабильность — протокол хорошо документирован и предсказуем в работе.
- Прохождение NAT — благодаря инкапсуляции в UDP и поддержке NAT-T соединение работает даже за маршрутизаторами с NAT.
Недостатки:
- Проблемы с NAT на стороне клиента — в Windows часто требуется правка реестра для включения UDP-инкапсуляции (параметр AssumeUDPEncapsulationContextOnSendRule).
- Низкая скорость на слабых устройствах — двойная инкапсуляция нагружает процессор, что снижает пропускную способность на дешёвых роутерах и старых смартфонах.
- Лёгкая блокировка — фиксированные порты (UDP 500, 4500, 1701) позволяют провайдерам и системам DPI (например, ТСПУ) блокировать трафик.
- Ограниченная гибкость — при быстрой настройке IPsec нельзя изменить большинство параметров, что может не подойти для специфических требований.
Эти ограничения важно учитывать при выборе протокола: для корпоративных сетей L2TP/IPsec остаётся надёжным решением, но для личного использования в условиях жёстких блокировок лучше рассмотреть альтернативы с обфускацией, такие как OpenVPN или WireGuard.
Настройка L2TP/IPsec-сервера на Ubuntu Server
Для быстрого развёртывания L2TP/IPsec-сервера на Ubuntu удобно использовать готовый скрипт IPsec VPN Server Auto Setup Scripts, доступный на GitHub. Он проверен для Ubuntu 20.04 и 22.04 и автоматически устанавливает и настраивает Libreswan (IPsec) и xl2tpd (L2TP).
Базовые команды:
wget https://get.vpnsetup.net -O vpn.sh
sudo sh vpn.shСкрипт сгенерирует случайные учётные данные (IPsec PSK, имя пользователя и пароль) и выведет их на экран. Если нужно задать свои параметры, отредактируйте файл vpn.sh перед запуском, заменив переменные YOUR_IPSEC_PSK, YOUR_USERNAME и YOUR_PASSWORD.
После завершения установки вы получите готовый сервер с поддержкой L2TP/IPsec и IKEv2. Для IKEv2 дополнительно создаются клиентские конфигурации: .p12 для Windows/Linux, .sswan для Android, .mobileconfig для iOS/macOS. Это удобно, если планируется использовать несколько протоколов.
Важно: сервер должен иметь публичный IP-адрес, иначе внешние клиенты не смогут к нему подключиться. Если сервер находится за NAT, потребуется проброс портов UDP 500, 4500 и 1701.
Настройка L2TP/IPsec на MikroTik для объединения офисов
MikroTik RouterOS поддерживает L2TP/IPsec как на стороне сервера, так и клиента. Рассмотрим пример объединения двух офисов (site-to-site VPN). Пусть R1 — сервер в головном офисе, R2 — клиент в филиале. Оба маршрутизатора имеют публичные IP-адреса.
Настройка L2TP-сервера на R1:
- Включить L2TP-сервер и задать аутентификацию MS-CHAPv2 (наиболее безопасную).
- Активировать параметр use-IPsec=required, чтобы без IPsec подключение было невозможно.
- Создать учётную запись (PPP secret) с именем, указывающим на офис, например, office-2.
- Создать статическую запись L2TP-сервера, чтобы интерфейс не исчезал после разрыва соединения.
Команды CLI:
/interface/l2tp-server/server set authentication=mschap2 enabled=yes IPsec-secret=IPsec_password use-IPsec=required
/ppp/secret add local-address=172.16.1.1 name=office-2 password=office-2_password profile=default-encryption remote-address=172.16.1.2 service=l2tp
/interface/l2tp-server add name="L2TP Server for office-2" user=office-2Настройка L2TP-клиента на R2:
/interface/l2tp-client add connect-to=100.64.111.1 disabled=no IPsec-secret=IPsec_password name="L2TP office-1 connection" password=office-2_password use-IPsec=yes user=office-2После установления соединения на обоих устройствах появится флаг R (running). Проверить состояние можно командами /interface/l2tp-server print и /interface/l2tp-client print.
Настройка маршрутизации и брандмауэра для L2TP/IPsec
Для того чтобы клиенты из одной офисной сети могли обращаться к ресурсам другой, необходимо настроить маршрутизацию. В примере с MikroTik внутренние сети: 10.11.11.0/24 (офис 1) и 10.22.22.0/24 (офис 2). Адреса VPN-интерфейсов: 172.16.1.1/32 (сервер) и 172.16.1.2/32 (клиент).
На R1 нужно добавить маршрут к сети 10.22.22.0/24 через VPN-интерфейс:
/ip/route add dst-address=10.22.22.0/24 gateway=172.16.1.2На R2 — маршрут к сети 10.11.11.0/24 через 172.16.1.1:
/ip/route add dst-address=10.11.11.0/24 gateway=172.16.1.1Также необходимо настроить брандмауэр, чтобы разрешить L2TP и IPsec-трафик. На сервере (и при необходимости на клиенте) нужно разрешить:
- UDP-порт 1701 (L2TP)
- UDP-порты 500 (ISAKMP) и 4500 (NAT-T) для IPsec
- Протокол IPsec ESP (IP protocol 50)
Пример правил для MikroTik:
/ip/firewall/filter add chain=input protocol=udp dst-port=1701,500,4500 action=accept
/ip/firewall/filter add chain=input protocol=ipsec-esp action=acceptВажно помнить, что порядок правил брандмауэра имеет значение, и они должны рассматриваться как единое целое. Если соединение не устанавливается, можно временно отключить все правила фильтрации, чтобы проверить, не в них ли причина.
Подключение клиентов: Windows, macOS, Android, iOS
Windows 11:
- Откройте Параметры → Сеть и Интернет → VPN → Добавить VPN.
- В поле «Поставщик услуг VPN» выберите «Windows (встроенный)».
- Укажите имя подключения и адрес сервера.
- В типе VPN выберите «L2TP/IPsec с общим ключом».
- Введите имя пользователя и пароль, сохранённые на сервере.
- Нажмите «Сохранить» и подключитесь.
Если возникает ошибка «Не удалось установить связь по сети...», скорее всего, проблема связана с NAT. Решение — изменить параметр реестра AssumeUDPEncapsulationContextOnSendRule:
- Откройте regedit.exe.
- Перейдите в ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent.
- Создайте DWORD-параметр AssumeUDPEncapsulationContextOnSendRule со значением 2 (если и сервер, и клиент за NAT) или 1 (если только клиент за NAT).
- Перезагрузите компьютер.
macOS: В системных настройках выберите «Сеть», добавьте новое подключение VPN, тип L2TP/IPsec, укажите адрес сервера, имя пользователя и общий ключ IPsec.
Android и iOS: В настройках сети выберите VPN → Добавить VPN, укажите тип L2TP/IPsec, адрес сервера, учётные данные и общий ключ. На iOS также можно использовать .mobileconfig-профиль, сгенерированный скриптом на сервере.
Типичные проблемы и способы их решения
1. Неверный IP-адрес сервера. Убедитесь, что клиент указывает правильный публичный адрес L2TP-сервера. Если сервер за NAT, настройте проброс портов.
2. Несовпадение учётных данных. Для L2TP нужны имя пользователя и пароль, для IPsec — только общий ключ (PSK). Проверьте, что они совпадают на сервере и клиенте.
3. Блокировка брандмауэром. Разрешите UDP-порты 1701, 500, 4500 и ESP. На MikroTik можно временно отключить все правила фильтра, чтобы проверить.
4. Проблемы с NAT на клиенте Windows. Ошибка «удалённый сервер не отвечает» часто решается правкой реестра (см. выше).
5. Блокировка провайдером или РКН. В России возможна блокировка IPsec и других VPN-протоколов. Чтобы проверить, блокируется ли именно IPsec, попробуйте временно отключить его на сервере (если это допустимо). Если L2TP без IPsec устанавливается, значит, проблема в IPsec.
6. Низкая скорость. Из-за двойной инкапсуляции на слабых устройствах скорость может быть низкой. Попробуйте использовать более мощное оборудование или рассмотрите альтернативные протоколы.
Сравнение L2TP/IPsec с альтернативами: OpenVPN и WireGuard
L2TP/IPsec — не единственный протокол VPN. Рассмотрим его место среди популярных альтернатив.
OpenVPN — работает поверх TCP или UDP, использует TLS для аутентификации и шифрования. Гибко настраивается, поддерживает обфускацию (например, через порт 443), что затрудняет блокировку. Требует установки клиентского ПО, но доступен на всех платформах. Скорость ниже, чем у WireGuard, но выше, чем у L2TP/IPsec на слабых устройствах.
WireGuard — современный протокол, работающий на UDP, с использованием современных криптографических примитивов (ChaCha20, Curve25519). Отличается высокой скоростью и простотой настройки, но менее устойчив к блокировкам DPI, так как его трафик легко идентифицировать. Встроен в ядро Linux и поддерживается многими ОС.
L2TP/IPsec — выигрывает во встроенной поддержке без установки ПО, но проигрывает в скорости и устойчивости к блокировкам. Для корпоративных сценариев, где важна совместимость и не требуется высокая скорость, он остаётся разумным выбором. Для личного использования в условиях цензуры лучше подходят OpenVPN с обфускацией или WireGuard.
Выбор протокола зависит от задач: если нужен быстрый и простой доступ к корпоративной сети — L2TP/IPsec; если важна скорость и современная криптография — WireGuard; если нужна максимальная совместимость и обход блокировок — OpenVPN.
Безопасность L2TP/IPsec: что нужно знать
L2TP/IPsec считается безопасным, если правильно настроен. Однако есть нюансы:
- Слабые алгоритмы — по умолчанию могут использоваться устаревшие алгоритмы (3DES, SHA-1). Рекомендуется настраивать AES-256 и SHA-256.
- Аутентификация MS-CHAPv2 — уязвима к атакам перебора, поэтому используйте сложные пароли и ограничьте количество попыток входа.
- Предварительный общий ключ (PSK) — должен быть достаточно длинным и случайным, иначе возможен подбор.
- Логирование — на сервере могут храниться логи подключений. Если важна анонимность, отключите логирование или используйте протоколы с лучшей анонимностью.
- Блокировки — в некоторых странах (включая Россию) L2TP/IPsec может блокироваться на уровне DPI. Это не проблема безопасности, но ограничивает доступность.
Для повышения безопасности рекомендуется использовать IKEv2 вместо IKEv1, так как IKEv2 поддерживает более современные алгоритмы и устойчив к некоторым атакам. Многие современные реализации (например, strongSwan) поддерживают IKEv2.
Также важно регулярно обновлять серверное ПО для устранения известных уязвимостей.
Вопросы и ответы
Чем L2TP отличается от L2TP/IPsec?
L2TP сам по себе не шифрует трафик — он только создаёт туннель. IPsec добавляет шифрование и аутентификацию. Поэтому связка L2TP/IPsec обеспечивает конфиденциальность и целостность данных. Без IPsec использовать L2TP небезопасно, так как данные передаются в открытом виде.
Какие порты нужно открыть для L2TP/IPsec?
Для работы L2TP/IPsec необходимо разрешить UDP-порт 1701 (L2TP), UDP-порт 500 (ISAKMP для IKE), UDP-порт 4500 (NAT-T) и протокол IPsec ESP (IP protocol 50). Если сервер за NAT, также нужно настроить проброс этих портов на сервер.
Почему L2TP/IPsec не работает из-за NAT?
IPsec изначально плохо работает через NAT, так как ESP не имеет портов. Для решения используется NAT-T (Network Address Translation Traversal), который инкапсулирует ESP в UDP-пакеты на порту 4500. Однако на стороне Windows иногда требуется включить поддержку NAT-T через параметр реестра AssumeUDPEncapsulationContextOnSendRule. Если этого не сделать, соединение может не устанавливаться.
Можно ли использовать L2TP/IPsec для обхода блокировок?
Технически да, но L2TP/IPsec легко блокируется, так как использует фиксированные порты. Провайдеры и системы DPI (например, ТСПУ) могут обнаружить и заблокировать такой трафик. Для обхода блокировок лучше использовать протоколы с обфускацией, например OpenVPN на порту 443 или WireGuard с дополнительными мерами маскировки.
Какой протокол VPN выбрать: L2TP/IPsec, OpenVPN или WireGuard?
Выбор зависит от задач. L2TP/IPsec — встроенная поддержка без установки ПО, но низкая скорость и уязвимость к блокировкам. OpenVPN — гибкий, поддерживает обфускацию, но требует установки клиента. WireGuard — самый быстрый и современный, но его трафик легко идентифицировать. Для корпоративных сетей часто выбирают L2TP/IPsec или OpenVPN, для личного использования с обходом блокировок — OpenVPN, для максимальной скорости — WireGuard.
Как исправить ошибку «Не удалось установить связь по сети» при подключении L2TP/IPsec в Windows?
Эта ошибка часто возникает из-за проблем с NAT. Решение: откройте редактор реестра (regedit), перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent, создайте DWORD-параметр AssumeUDPEncapsulationContextOnSendRule и установите значение 2 (если и сервер, и клиент за NAT) или 1 (если только клиент за NAT). После этого перезагрузите компьютер. Также проверьте, что на сервере открыты нужные порты и учётные данные верны.