Настройка L2TP/IPsec VPN: пошаговое построение защищённого туннеля | AdminWiki

Настройка L2TP/IPsec VPN: пошаговое построение защищённого туннеля

29 июля 2026 12 мин. чтения
Содержание статьи

Введение: зачем нужен L2TP/IPsec и когда его выбирать

L2TP/IPsec - это связка двух протоколов, которая десятилетиями обеспечивает удалённый доступ в корпоративных сетях. L2TP (Layer 2 Tunneling Protocol) создаёт туннель для передачи PPP-сессий, а IPsec шифрует и аутентифицирует каждый пакет внутри этого туннеля. Результат: проверенная временем, предсказуемая технология с нативной поддержкой во всех операционных системах.

Выбор между L2TP/IPsec, OpenVPN и WireGuard сводится к трём критериям: совместимость, производительность и сложность внедрения. L2TP/IPsec выигрывает по первому пункту - он встроен в Windows, macOS, Linux, Android и iOS без установки стороннего ПО. OpenVPN требует клиентское приложение на каждой машине. WireGuard быстрее и проще в настройке, но до сих пор не везде доступен из коробки, особенно в старых версиях Windows и корпоративных сборках Android.

Недостатки протокола: два обязательных порта (UDP 500 для IKE и UDP 4500 для NAT-Traversal) плюс протокол ESP, который некоторые провайдеры и отельные сети блокируют на уровне маршрутизатора. Производительность ниже, чем у WireGuard, из-за двойной инкапсуляции и работы IPsec в режиме туннеля. Если вам нужна максимальная совместимость без развёртывания клиентского ПО на сотнях устройств - L2TP/IPsec остаётся рабочим выбором в 2026 году. Если приоритет - скорость и минималистичный код, обратите внимание на настройку WireGuard на Android и других платформах.

Архитектура L2TP/IPsec: как работает защищённый туннель

Понимание архитектуры избавляет от слепого копирования конфигов. Когда клиент инициирует соединение, первой вступает в работу фаза IKEv1 (Internet Key Exchange version 1). Стороны договариваются о параметрах шифрования, проходят взаимную аутентификацию - по сертификатам или pre-shared key - и устанавливают ISAKMP SA (Security Association). Это защищённый управляющий канал.

Внутри этого канала IPsec создаёт ESP (Encapsulating Security Payload) SA для шифрования данных. ESP инкапсулирует трафик, добавляя заголовок и трейлер с контрольной суммой. AH (Authentication Header) в связке L2TP/IPsec практически не применяется - он не поддерживает NAT-Traversal.

Поверх IPsec поднимается L2TP-туннель. Демон xl2tpd на сервере принимает L2TP-пакеты и передаёт их демону PPP (pppd). PPP выполняет аутентификацию пользователя по логину и паролю через CHAP или PAP, назначает IP-адрес клиенту из пула и устанавливает сетевые параметры - DNS, MTU, маршрут по умолчанию.

Клиент за NAT - стандартная ситуация. Здесь вступает в дело NAT-Traversal: IPsec-пакеты инкапсулируются в UDP-датаграммы на порт 4500. Это позволяет ESP-трафику проходить через устройства, которые не умеют отслеживать IP-сессии протокола 50 (ESP). Без NAT-Traversal клиент за NAT просто не установит соединение.

Подготовка сервера: установка StrongSwan и необходимых компонентов

Серверная часть состоит из трёх компонентов: StrongSwan (IPsec), xl2tpd (L2TP-демон) и ppp (PPP-демон). Установка на Ubuntu 22.04/24.04 LTS или Debian 12 выполняется одной командой.

apt update && apt install strongswan xl2tpd ppp -y

После установки проверяем версии:

ipsec --version
xl2tpd --version
pppd --version

StrongSwan 5.9.8 и выше содержит все необходимые плагины для L2TP, включая attr-sql и kernel-libipsec. Останавливаем сервисы перед конфигурацией - они запустятся позже с корректными настройками:

systemctl stop strongswan-starter xl2tpd
systemctl disable strongswan-starter xl2tpd

Disable временный - после завершения настройки сервисы будут включены и запущены.

Создание инфраструктуры открытых ключей (PKI)

Pre-shared key приемлем для тестового стенда или домашней сети. В корпоративной среде, где подключаются десятки и сотни устройств, сертификаты дают два преимущества: компрометация одного клиента не раскрывает общий ключ, и каждый сертификат можно отозвать по отдельности. StrongSwan включает утилиту ipsec pki для управления сертификатами без внешних зависимостей.

Генерация корневого сертификата (CA)

Корневой сертификат - якорь доверия для всей PKI. Приватный ключ CA должен храниться на отключённой от сети машине или как минимум с правами 600.

mkdir -p /etc/ipsec.d/private /etc/ipsec.d/certs /etc/ipsec.d/cacerts
ipsec pki --gen --type rsa --size 4096 --outform pem > /etc/ipsec.d/private/ca-key.pem
chmod 600 /etc/ipsec.d/private/ca-key.pem
ipsec pki --self --ca --lifetime 3650 --in /etc/ipsec.d/private/ca-key.pem \
  --dn "CN=Admin Wiki Root CA, O=AdminWiki, C=RU" \
  --outform pem > /etc/ipsec.d/cacerts/ca-cert.pem

Параметр --lifetime 3650 задаёт срок действия 10 лет. Distinguished Name (DN) должен быть уникальным в вашей инфраструктуре. CN (Common Name) - осмысленное имя, по которому сертификат идентифицируется в логах.

Создание серверного сертификата

Серверный сертификат предъявляется клиентам при установке IPsec-соединения. Критически важно указать subjectAltName - IP-адрес или DNS-имя, по которому клиенты подключаются к серверу. Без этого поля современные клиенты (особенно Windows и iOS) отклонят соединение.

ipsec pki --gen --type rsa --size 2048 --outform pem > /etc/ipsec.d/private/server-key.pem
chmod 600 /etc/ipsec.d/private/server-key.pem
ipsec pki --pub --in /etc/ipsec.d/private/server-key.pem --type rsa \
  | ipsec pki --issue --lifetime 1825 \
  --cacert /etc/ipsec.d/cacerts/ca-cert.pem \
  --cakey /etc/ipsec.d/private/ca-key.pem \
  --dn "CN=vpn.admin-wiki.ru, O=AdminWiki, C=RU" \
  --san "vpn.admin-wiki.ru" --san "10.0.0.1" \
  --flag serverAuth --flag ikeIntermediate \
  --outform pem > /etc/ipsec.d/certs/server-cert.pem

Флаг serverAuth указывает, что сертификат используется для аутентификации сервера. Флаг ikeIntermediate требуется для IKEv1. Если сервер имеет несколько IP-адресов или DNS-имён, добавьте их через дополнительные параметры --san.

Создание клиентских сертификатов

Каждый клиент получает уникальный сертификат. Common Name должен идентифицировать пользователя или устройство - это упрощает аудит и отзыв.

ipsec pki --gen --type rsa --size 2048 --outform pem > /etc/ipsec.d/private/client1-key.pem
chmod 600 /etc/ipsec.d/private/client1-key.pem
ipsec pki --pub --in /etc/ipsec.d/private/client1-key.pem --type rsa \
  | ipsec pki --issue --lifetime 365 \
  --cacert /etc/ipsec.d/cacerts/ca-cert.pem \
  --cakey /etc/ipsec.d/private/ca-key.pem \
  --dn "CN=ivanov-pc, O=AdminWiki, C=RU" \
  --flag clientAuth --flag ikeIntermediate \
  --outform pem > /etc/ipsec.d/certs/client1-cert.pem

Клиентский сертификат экспортируется в формат PKCS#12 для переноса на устройство:

openssl pkcs12 -export -inkey /etc/ipsec.d/private/client1-key.pem \
  -in /etc/ipsec.d/certs/client1-cert.pem \
  -name "Ivanov VPN Certificate" \
  -certfile /etc/ipsec.d/cacerts/ca-cert.pem \
  -out client1.p12

PKCS#12-файл защищается паролем экспорта. Этот пароль потребуется при импорте на клиентское устройство. Передавайте файл и пароль по разным каналам.

Конфигурация StrongSwan для L2TP/IPsec

Конфигурация StrongSwan состоит из двух файлов: /etc/ipsec.conf (параметры соединений) и /etc/ipsec.secrets (приватные ключи).

Файл ipsec.conf: основные параметры

config setup
    charondebug="ike 2, knl 2, cfg 2"
    uniqueids=no

conn L2TP-IKEv1
    keyexchange=ikev1
    authby=pubkey
    left=%any
    leftid="vpn.admin-wiki.ru"
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightauth=pubkey
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,1.1.1.1
    type=transport
    auto=add
    ike=aes256-sha256-modp2048
    esp=aes256-sha256
    dpdaction=clear
    dpddelay=30s
    rekey=no
    fragmentation=yes
    forceencaps=yes

Разбор критичных параметров:

  • keyexchange=ikev1 - L2TP/IPsec работает только с IKEv1. IKEv2 используется для pure IPsec-туннелей.
  • type=transport - транспортный режим IPsec, так как L2TP сам создаёт туннель. Туннельный режим добавил бы второй уровень инкапсуляции.
  • left=%any - сервер принимает соединения на любом интерфейсе. leftid задаёт идентификатор, который сервер предъявляет клиентам - он должен совпадать с subjectAltName в сертификате.
  • rightsourceip=10.10.10.0/24 - пул адресов для клиентов. StrongSwan назначает адреса через плагин attr, xl2tpd в этой схеме не управляет IP-адресацией.
  • forceencaps=yes - принудительная инкапсуляция ESP в UDP 4500 даже при отсутствии NAT. Полезно, когда промежуточный файрвол не пропускает ESP.
  • dpdaction=clear - при обнаружении мёртвого пира соединение сбрасывается, освобождая ресурсы.

Файл ipsec.secrets: хранение ключей

: RSA server-key.pem

Синтаксис: идентификатор (двоеточие означает «любой»), тип ключа, путь к файлу. Путь относительный - StrongSwan ищет файлы в /etc/ipsec.d/private/.

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

systemctl enable strongswan-starter
systemctl start strongswan-starter
ipsec statusall

Вывод должен показать соединение L2TP-IKEv1 со статусом «loaded» и списком алгоритмов.

Настройка xl2tpd и PPP

StrongSwan обрабатывает IPsec, но L2TP-туннель и PPP-сессию поднимают xl2tpd и pppd. Их конфигурация определяет аутентификацию пользователей и параметры сетевого интерфейса.

Конфигурация xl2tpd.conf

[global]
listen-addr = 0.0.0.0
ipsec saref = yes

[lns default]
ip range = 10.10.10.100-10.10.10.200
local ip = 10.10.10.1
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

Параметр ipsec saref = yes включает привязку L2TP-сессий к IPsec SA - без этого возможны проблемы при нескольких одновременных подключениях из-за одного NAT. Диапазон ip range используется как fallback, если StrongSwan не назначил адрес через rightsourceip. local ip - адрес серверного конца PPP-соединения.

Настройка аутентификации PPP

Файл /etc/ppp/options.xl2tpd:

ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 1.1.1.1
auth
require-chap
mtu 1280
mru 1280
noccp
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

MTU 1280 - консервативное значение, которое гарантирует прохождение пакетов через любые каналы с учётом накладных расходов IPsec (около 60-80 байт) и L2TP (около 40 байт). noccp отключает сжатие - на современных процессорах сжатие PPP замедляет передачу данных.

Пользователи задаются в /etc/ppp/chap-secrets:

ivanov    l2tpd    StrongP@ssw0rd    10.10.10.100
petrov    l2tpd    An0therP@ss        10.10.10.101

Формат: имя пользователя, сервер (l2tpd - значение из конфигурации xl2tpd), пароль, IP-адрес (звёздочка для любого). Фиксированный IP удобен для аудита и применения персональных правил файрвола.

Запускаем xl2tpd:

systemctl enable xl2tpd
systemctl start xl2tpd
systemctl status xl2tpd

Настройка брандмауэра и маршрутизации

Без правил файрвола VPN-сервер не пропустит трафик, даже если IPsec и L2TP настроены корректно. Требуется открыть три типа трафика и включить форвардинг.

Правила iptables для L2TP/IPsec

iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -j ACCEPT
iptables -A FORWARD -s 10.10.10.0/24 -j ACCEPT
iptables -A FORWARD -d 10.10.10.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE

UDP 500 - IKE, UDP 4500 - IPsec NAT-Traversal, ESP - протокол 50. Правила FORWARD разрешают трафик между VPN-подсетью и остальной сетью. MASQUERADE подменяет адрес источника на внешний IP сервера, обеспечивая доступ клиентов в интернет и локальную сеть.

Включение форвардинга пакетов

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

Для сохранения правил iptables после перезагрузки установите iptables-persistent:

apt install iptables-persistent -y
netfilter-persistent save

Проверка доступности портов с внешней машины:

nmap -sU -p 500,4500 vpn.admin-wiki.ru

Оба порта должны быть в состоянии open|filtered (UDP-сканирование не даёт однозначного ответа без ответа прикладного уровня).

Подключение клиентов: Windows, Linux, Android, iOS

Серверная часть готова. Подключение клиентов различается в деталях - импорт сертификатов, выбор типа аутентификации, настройка дополнительных параметров.

Настройка на Windows

Windows 10 и 11 требуют установки корневого сертификата в хранилище «Доверенные корневые центры сертификации» до создания VPN-подключения.

  1. Перенесите файл ca-cert.pem на Windows-машину.
  2. Нажмите Win+R, введите mmc, добавьте оснастку «Сертификаты» для учётной записи компьютера.
  3. Импортируйте ca-cert.pem в «Доверенные корневые центры сертификации».
  4. Импортируйте клиентский PKCS#12-файл в «Личные» сертификаты.
  5. Панель управления → Центр управления сетями и общим доступом → Создание и настройка нового подключения → Подключение к рабочему месту → Использовать моё подключение к интернету (VPN).
  6. Укажите адрес сервера, имя подключения.
  7. В свойствах VPN-подключения: вкладка «Безопасность» → Тип VPN: L2TP/IPsec с сертификатом → Дополнительные параметры → Использовать сертификат для проверки подлинности.
  8. Выберите импортированный клиентский сертификат.

Типичная ошибка Windows - «Ошибка 809: не удалось установить соединение». Причина в 90% случаев: заблокирован ESP-трафик на промежуточном устройстве. Решение: принудительное использование NAT-Traversal через параметр реестра AssumeUDPEncapsulationContextOnSendRule со значением 2 в ветке HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent.

Настройка на Linux (NetworkManager)

NetworkManager поддерживает L2TP/IPsec через плагин network-manager-l2tp:

apt install network-manager-l2tp network-manager-l2tp-gnome -y
  1. Настройки → Сеть → VPN → Добавить → Layer 2 Tunneling Protocol (L2TP).
  2. Gateway: адрес сервера.
  3. Аутентификация: User name и Password - из chap-secrets.
  4. Вкладка «IPsec Settings»: Enable IPsec tunnel to L2TP host, выберите «Use certificate», укажите пути к клиентскому сертификату, ключу и CA-сертификату.
  5. Вкладка «PPP Settings»: отключите EAP, включите CHAP и MSCHAPv2.

Настройка на Android и iOS

Android требует импорта PKCS#12-файла через Настройки → Безопасность → Шифрование и учётные данные → Установить из памяти устройства. После импорта сертификата:

  1. Настройки → Сеть и интернет → VPN → Добавить VPN.
  2. Тип: L2TP/IPsec RSA.
  3. Адрес сервера, пользователь и пароль.
  4. В поле «Сертификат IPsec» выберите импортированный клиентский сертификат.
  5. Сертификат CA: выберите корневой сертификат.

iOS: импорт сертификатов выполняется через Safari или почту - откройте PKCS#12-файл на устройстве, система предложит установить профиль. После установки сертификатов:

  1. Настройки → Основные → VPN → Добавить конфигурацию VPN.
  2. Тип: L2TP.
  3. Сервер, учётная запись, пароль.
  4. Секретный ключ: оставьте пустым (используется только для PSK).
  5. Включите «Отправлять весь трафик» для маршрутизации всего трафика через VPN.

Подробнее о настройке VPN на мобильных устройствах - в руководствах по настройке VPN на Android и ручной настройке VPN на Windows и Linux.

Диагностика и устранение типичных ошибок

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

Ошибки аутентификации и проблемы с сертификатами

Симптом: IPsec-соединение сбрасывается на фазе IKE_AUTH. В логах StrongSwan (journalctl -u strongswan-starter -f) появляется запись «no trusted certificate found» или «certificate validation failed».

Проверки:

ipsec listcerts
openssl verify -CAfile /etc/ipsec.d/cacerts/ca-cert.pem /etc/ipsec.d/certs/server-cert.pem
openssl verify -CAfile /etc/ipsec.d/cacerts/ca-cert.pem /etc/ipsec.d/certs/client1-cert.pem

Убедитесь, что срок действия сертификатов не истёк, subjectAltName сервера совпадает с адресом, который клиент использует для подключения, и корневой сертификат импортирован в доверенные на клиенте.

Проблемы с MTU и фрагментацией

Симптом: HTTPS-сайты не открываются или открываются частично, SSH-сессия зависает при выводе больших объёмов данных. Причина: пакеты превышают MTU канала, а ICMP Fragmentation Needed блокируется.

Определите максимальный MTU без фрагментации:

ping -M do -s 1472 8.8.8.8

Уменьшайте значение -s на 10, пока ping не начнёт проходить. Добавьте 28 байт (заголовки IP/ICMP) - получите оптимальный MTU. Для L2TP/IPsec типичное значение - 1280-1350 байт. Установите его в /etc/ppp/options.xl2tpd (параметры mtu и mru) и в настройках клиента.

Ошибки маршрутизации и доступа к локальной сети

Симптом: VPN подключён, клиент получил IP-адрес, но пинги до локальных ресурсов не проходят. Диагностика:

ip route show table all | grep 10.10.10
iptables -L FORWARD -v -n
tcpdump -i any host 10.10.10.100 and icmp

Частая причина: в целевом устройстве локальной сети отсутствует маршрут к VPN-подсети. Добавьте на шлюзе локальной сети статический маршрут к 10.10.10.0/24 через IP-адрес VPN-сервера. Вторая причина: политика FORWARD в iptables по умолчанию DROP. Добавьте правила для VPN-подсети, как показано в разделе настройки брандмауэра.

Для углублённой диагностики VPN-соединений используйте руководство по диагностике и устранению неисправностей VPN и руководство по VPN-маршрутизации на Linux.

Заключение: обеспечение безопасности и дальнейшая поддержка

Развёртывание L2TP/IPsec VPN - это не разовая акция. StrongSwan, xl2tpd и ядро Linux получают обновления безопасности, которые необходимо применять. Настройте автоматические обновления безопасности через unattended-upgrades или поддерживайте регламент ручного обновления раз в месяц.

Мониторинг: ipsec statusall показывает активные соединения и объём переданного трафика. Настройте алертинг в систему мониторинга (Zabbix, Prometheus) на метрики количества SA и состояния сервисов.

Ротация сертификатов: запланируйте перевыпуск клиентских сертификатов за месяц до истечения срока. Процесс можно автоматизировать скриптом, который генерирует PKCS#12-файлы и рассылает уведомления пользователям.

Ограничение доступа: если VPN-сервер используется только сотрудниками определённого отдела или подрядчиками, ограничьте входящие подключения по IP через iptables. Это снизит поверхность атаки и нагрузку от сканеров.

При выборе хостинга для VPN-сервера обратите внимание на облачную инфраструктуру Timeweb Cloud - VDS/VPS с гибким масштабированием ресурсов и предустановленными образами Ubuntu и Debian. Для автоматизации рутинных задач, включая генерацию конфигураций и скриптов диагностики, используйте AiTunnel - агрегатор API для доступа к нейросетевым моделям без VPN и с оплатой в рублях.

Поделиться:
Сохранить гайд? В закладки браузера