Настройка L2TP/IPsec VPN на Ubuntu: сервер и клиент, CLI и GUI

Подробное руководство по настройке L2TP/IPsec VPN на Ubuntu: установка strongSwan и xl2tpd, конфигурация сервера и клиента, решение проблем, сравнение с другими протоколами.

Что такое L2TP/IPsec и почему он до сих пор актуален

L2TP (Layer 2 Tunneling Protocol) — это протокол туннелирования, который сам по себе не обеспечивает шифрование или аутентификацию. Он лишь упаковывает трафик в туннель, поэтому практически всегда используется в связке с IPsec, который добавляет шифрование (например, AES-256) и аутентификацию. Такая комбинация называется L2TP/IPsec и поддерживается всеми современными операционными системами, включая Windows, macOS, Android и Linux, без необходимости установки дополнительного ПО.

Несмотря на появление более современных протоколов, таких как WireGuard и OpenVPN, L2TP/IPsec остаётся востребованным благодаря своей совместимости с устаревшими системами и встроенной поддержке на многих платформах. Например, в Windows и macOS нет встроенной поддержки WireGuard, но L2TP/IPsec настраивается через стандартные сетевые настройки. Это делает его удобным выбором для корпоративных сред, где используются разнородные устройства.

Однако важно понимать ограничения: L2TP/IPsec использует предварительный общий ключ (PSK) для аутентификации, что менее безопасно, чем сертификаты, применяемые в OpenVPN или IKEv2. Кроме того, протокол часто блокируется в сетях с строгими файрволами, так как использует UDP-порты 500, 1701 и 4500. Тем не менее, для большинства сценариев, таких как удалённый доступ к офисной сети или обход гео-блокировок, L2TP/IPsec остаётся надёжным решением.

Подготовка к настройке: что нужно знать и какие пакеты установить

Перед началом настройки L2TP/IPsec на Ubuntu необходимо собрать следующую информацию: IP-адрес или hostname VPN-сервера, предварительный общий ключ (PSK), а также имя пользователя и пароль для аутентификации. Если вы настраиваете сервер, вам понадобится статический IP-адрес и доступ к настройкам файрвола.

Для работы L2TP/IPsec на Ubuntu используются два основных пакета: strongSwan (реализация IPsec) и xl2tpd (демон L2TP). В зависимости от дистрибутива установка выполняется следующими командами:

  • Для Debian/Ubuntu: sudo apt update && sudo apt install strongswan xl2tpd ppp
  • Для Fedora/RHEL: sudo dnf install strongswan xl2tpd ppp
  • Для Arch Linux: sudo pacman -S strongswan xl2tpd ppp

Также для настройки через графический интерфейс (NetworkManager) потребуется установить плагины: network-manager-l2tp и network-manager-l2tp-gnome (в Ubuntu). В некоторых версиях Ubuntu может потребоваться добавить PPA-репозиторий, например: sudo add-apt-repository ppa:nm-l2tp/network-manager-l2tp.

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

Настройка IPsec с помощью strongSwan: конфигурация сервера

Для настройки IPsec-сервера на Ubuntu необходимо отредактировать файл /etc/ipsec.conf. В большинстве устаревших инструкций используются слабые алгоритмы шифрования, такие как 3DES и SHA-1, что не соответствует современным требованиям безопасности. Рекомендуется использовать следующие параметры, взятые из официальной документации strongSwan:

conn rw-base
    fragmentation=yes
    dpdaction=clear
    dpdtimeout=90s
    dpddelay=30s

conn l2tp-vpn
    also=rw-base
    ike=aes128-sha256-modp3072
    esp=aes128-sha256-modp3072
    leftsubnet=%dynamic[/1701]
    rightsubnet=%dynamic
    leftauth=psk
    rightauth=psk
    type=transport
    auto=add

Первая секция rw-base задаёт общие параметры, включая фрагментацию IKE и обнаружение мёртвых узлов (DPD). Вторая секция l2tp-vpn определяет транспортный режим IPsec, аутентификацию по общему ключу и используемые шифры. Важно, что для L2TP используется транспортный режим, а не туннельный, так как L2TP уже создаёт туннель.

Общий ключ (PSK) хранится в файле /etc/ipsec.secrets. Его можно сгенерировать с помощью команды openssl rand -base64 18, которая создаст случайную строку длиной 18 символов. В файле /etc/ipsec.secrets строка должна выглядеть так: %any %any : PSK "mySharedKey". После внесения изменений необходимо перезапустить службу strongSwan: sudo systemctl restart strongswan (в Ubuntu) или sudo systemctl restart strongswan-starter (в некоторых версиях).

Настройка L2TP-сервера с xl2tpd: конфигурация и параметры

После настройки IPsec необходимо сконфигурировать L2TP-сервер, который реализуется пакетом xl2tpd. Основной файл конфигурации — /etc/xl2tpd/xl2tpd.conf. В нём нужно указать параметры глобальной секции и секции [lns default] (LNS — L2TP Network Server). Пример конфигурации:

[global]
port = 1701
auth file = /etc/ppp/chap-secrets
access control = no
ipsec saref = yes
force userspace = yes

[lns default]
exclusive = no
ip range = 10.2.2.100-10.2.2.199
hidden bit = no
local ip = 10.2.2.1
length bit = yes
require authentication = yes
name = l2tp-vpn
pppoptfile = /etc/ppp/options.xl2tpd
flow bit = yes

Параметр auth file указывает на файл с учётными данными, а pppoptfile — на файл с настройками PPP. Опция name задаёт имя сервера, которое используется для поиска аутентификационных данных в файле chap-secrets. Параметры local ip и ip range определяют IP-адрес сервера в VPN-сети и диапазон адресов для клиентов.

Существует два подхода к выдаче IP-адресов: можно выдавать адреса из диапазона локальной сети офиса и включить ProxyARP, тогда клиенты будут работать как будто в той же L2-сети, либо использовать отдельный диапазон и настраивать маршрутизацию. Для Windows-клиентов можно автоматизировать создание маршрутов с помощью PowerShell.

Далее необходимо настроить PPP-параметры в файле /etc/ppp/options.xl2tpd. Рекомендуемые опции включают mtu 1460, require-mschap-v2, refuse-pap, refuse-chap, refuse-mschap, multilink и mppe-stateful. Если используется ProxyARP, нужно добавить опцию proxyarp. Для передачи DNS-серверов клиентам добавьте ms-dns 192.168.1.1 и ms-dns 192.168.1.2.

После редактирования конфигурации перезапустите службу: sudo systemctl restart xl2tpd. Сообщение setsockopt recvref[30]: Protocol not available можно игнорировать — оно не влияет на работу.

Создание учётных записей и настройка файрвола для L2TP/IPsec

Для аутентификации клиентов используется файл /etc/ppp/chap-secrets. Каждая строка содержит логин, имя службы (должно совпадать с name из xl2tpd.conf), пароль и IP-адрес клиента. Символ * в поле IP означает, что клиенту может быть назначен любой адрес из диапазона. Пример:

ivanov l2tp-vpn Pa$$word_1 *

Если требуется закрепить за клиентом постоянный IP-адрес, укажите его явно, но он не должен входить в динамический диапазон ip range. Например: petrov l2tp-vpn Pa$$word_1 10.2.2.99.

Для доступа к L2TP/IPsec-серверу необходимо открыть в файрволе следующие UDP-порты: 500 (IKE), 1701 (L2TP) и 4500 (NAT-T). В Ubuntu с UFW это делается командами:

sudo ufw allow 500/udp
sudo ufw allow 1701/udp
sudo ufw allow 4500/udp
sudo ufw reload

В системах с firewalld (Fedora/RHEL) используйте:

sudo firewall-cmd --add-service=ipsec --permanent
sudo firewall-cmd --add-port=1701/udp --permanent
sudo firewall-cmd --reload

Важно также убедиться, что на сервере включена пересылка IP-пакетов (IP forwarding), если вы планируете предоставлять клиентам доступ в интернет. Для этого отредактируйте /etc/sysctl.conf и установите net.ipv4.ip_forward=1, затем выполните sudo sysctl -p.

Настройка L2TP/IPsec-клиента через командную строку (CLI)

Для подключения к L2TP/IPsec-серверу с Ubuntu через командную строку необходимо настроить strongSwan и xl2tpd в режиме клиента. В файле /etc/ipsec.conf создайте секцию conn my-vpn с параметрами:

conn my-vpn
    keyexchange=ikev1
    authby=secret
    type=transport
    left=%defaultroute
    leftprotoport=17/1701
    right=VPN_SERVER_IP
    rightprotoport=17/1701
    ike=aes256-sha256-modp2048
    esp=aes256-sha256
    auto=add

В /etc/ipsec.secrets укажите PSK: : PSK "your-pre-shared-key". Затем настройте xl2tpd, добавив в /etc/xl2tpd/xl2tpd.conf секцию [lac my-vpn]:

[lac my-vpn]
lns = VPN_SERVER_IP
ipsec saref = yes
length bit = yes
pppoptfile = /etc/ppp/options.xl2tpd

В файле /etc/ppp/options.xl2tpd укажите параметры PPP, включая mtu 1400, defaultroute, usepeerdns и persist. Учётные данные для аутентификации хранятся в /etc/ppp/chap-secrets в формате username * password *.

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

sudo systemctl restart strongswan xl2tpd
sudo ipsec up my-vpn
echo "c my-vpn" | sudo tee /var/run/xl2tpd/l2tp-control

Проверьте интерфейс ppp0 командой ip a show ppp0 — он должен получить IP-адрес от сервера. Также проверьте маршрут по умолчанию: ip route show default.

Настройка L2TP/IPsec-клиента через NetworkManager (GUI)

Для пользователей, предпочитающих графический интерфейс, NetworkManager предоставляет удобный способ настройки L2TP/IPsec. Сначала установите плагины:

sudo apt install network-manager-l2tp network-manager-l2tp-gnome

Затем откройте настройки сети (значок сети в системном трее → Network Settings), нажмите «+» рядом с VPN и выберите «Layer 2 Tunneling Protocol (L2TP)». В открывшемся окне заполните поля:

  • Name: произвольное имя соединения
  • Gateway: IP-адрес или hostname VPN-сервера
  • User name: ваше имя пользователя
  • Password: ваш пароль
  • Pre-shared key: общий ключ IPsec

Нажмите кнопку «IPsec Settings», установите флажок «Enable IPsec tunnel to L2TP host» и введите PSK. При необходимости укажите алгоритмы Phase 1 и Phase 2, если они отличаются от стандартных (например, aes256-sha256-modp2048 для IKE и aes256-sha256 для ESP).

После сохранения соединения включите его переключателем. Если подключение прошло успешно, индикатор станет зелёным. Проверьте IP-адрес интерфейса ppp0 и маршруты, как описано в CLI-разделе. В случае проблем с DNS убедитесь, что в настройках IPv4 включена опция «Use this connection’s DNS servers».

Решение типичных проблем при подключении L2TP/IPsec

При настройке L2TP/IPsec на Ubuntu могут возникать различные проблемы. Рассмотрим наиболее частые из них.

Ошибки IPsec. Если strongSwan не запускается или соединение не устанавливается, проверьте журналы: journalctl -xeu strongswan. Часто причина — неверный PSK в /etc/ipsec.secrets или несовпадение алгоритмов шифрования. Убедитесь, что параметры ike и esp в конфигурации клиента совпадают с серверными.

Проблемы с L2TP-туннелем. Если IPsec установлен, но L2TP не работает, проверьте журналы xl2tpd: journalctl -xeu xl2tpd или tail -f /var/log/syslog | grep xl2tpd. Убедитесь, что порт 1701 не блокируется файрволом и что конфигурация [lac] или [lns] корректна.

Ошибки аутентификации. Если сервер отклоняет учётные данные, проверьте файл /etc/ppp/chap-secrets на сервере и убедитесь, что имя службы совпадает с name в xl2tpd.conf. На клиенте проверьте правильность введённых логина и пароля.

Проблемы с маршрутизацией и DNS. Если VPN-соединение устанавливается, но интернет не работает, проверьте, что в /etc/ppp/options.xl2tpd есть опции defaultroute и usepeerdns. Также убедитесь, что маршрут по умолчанию указывает на интерфейс ppp0 (команда ip route).

Блокировка портов провайдером. Некоторые интернет-провайдеры блокируют UDP-порт 1701. В этом случае можно попробовать использовать протоколы, работающие через другие порты, например WireGuard (UDP 51820) или OpenVPN (UDP 1194).

Сравнение L2TP/IPsec с другими VPN-протоколами

L2TP/IPsec часто сравнивают с OpenVPN и WireGuard. Вот основные различия:

  • Безопасность: L2TP/IPsec использует PSK, что менее безопасно, чем сертификаты в OpenVPN или современные криптографические примитивы WireGuard. Однако при правильной настройке (сильные алгоритмы, длинный PSK) он обеспечивает достаточный уровень защиты для большинства задач.
  • Скорость: WireGuard обычно быстрее благодаря использованию современных алгоритмов и меньшему количеству операций. L2TP/IPsec может быть медленнее из-за двойной инкапсуляции (L2TP + IPsec).
  • Совместимость: L2TP/IPsec встроен в большинство ОС, включая Windows, macOS и Android, что упрощает настройку на клиентах без установки дополнительного ПО. OpenVPN требует установки клиента, а WireGuard — отдельного приложения.
  • Обход блокировок: L2TP/IPsec часто блокируется файрволами, так как использует фиксированные UDP-порты. OpenVPN и WireGuard могут работать через порт 443 (TCP) или использовать obfuscation, что делает их более устойчивыми к блокировкам.

Если вам нужна максимальная совместимость с устаревшими системами, выбирайте L2TP/IPsec. Для высокой скорости и современной безопасности лучше использовать WireGuard. OpenVPN — хороший компромисс, если требуется гибкость настройки и поддержка сертификатов.

Практические советы по безопасности и производительности

Чтобы повысить безопасность L2TP/IPsec-сервера, следуйте этим рекомендациям:

  • Используйте длинный случайный PSK (не менее 18 символов), сгенерированный с помощью openssl rand -base64 18.
  • Обновляйте strongSwan и xl2tpd до последних версий, чтобы получать исправления уязвимостей.
  • Ограничьте доступ к VPN-серверу по IP-адресам с помощью файрвола, если это возможно.
  • Включайте DPD (Dead Peer Detection) для автоматического разрыва неактивных соединений.
  • Используйте современные алгоритмы шифрования, такие как AES-256 и SHA-256, и избегайте устаревших 3DES и SHA-1.

Для повышения производительности:

  • Уменьшите MTU до 1400–1460, чтобы избежать фрагментации пакетов.
  • Настройте mppe-stateful для улучшения сжатия, если это поддерживается.
  • Используйте ProxyARP, если клиенты должны быть в одной L2-сети с сервером, чтобы избежать дополнительной маршрутизации.
  • Регулярно проверяйте журналы на предмет ошибок и атак.

Также рекомендуется настроить мониторинг VPN-соединений с помощью инструментов вроде iftop или vnstat, чтобы отслеживать трафик и выявлять аномалии.

Вопросы и ответы

Безопасен ли L2TP/IPsec для использования?

L2TP/IPsec безопаснее, чем PPTP, но менее безопасен, чем WireGuard или OpenVPN. Он использует предварительный общий ключ (PSK), который может быть скомпрометирован при слабом ключе. Однако при использовании длинного случайного PSK и современных алгоритмов шифрования (AES-256, SHA-256) L2TP/IPsec обеспечивает достаточный уровень защиты для большинства сценариев, таких как удалённый доступ к офисной сети. Для передачи особо чувствительных данных рекомендуется использовать WireGuard или OpenVPN с сертификатами.

Можно ли настроить L2TP/IPsec на сервере без графического интерфейса?

Да, настройка L2TP/IPsec на сервере без GUI полностью поддерживается. Для этого используются файлы конфигурации strongSwan (/etc/ipsec.conf, /etc/ipsec.secrets) и xl2tpd (/etc/xl2tpd/xl2tpd.conf, /etc/ppp/options.xl2tpd, /etc/ppp/chap-secrets). Все операции выполняются через командную строку, что делает этот метод идеальным для headless-серверов. Подробные инструкции приведены в разделах о настройке сервера и клиента через CLI.

Почему VPN-соединение устанавливается, но не работает интернет?

Это чаще всего связано с проблемами маршрутизации или DNS. Убедитесь, что в файле /etc/ppp/options.xl2tpd (на клиенте) присутствуют опции defaultroute и usepeerdns. Проверьте маршрут по умолчанию командой ip route show default — он должен указывать на интерфейс ppp0. Также проверьте DNS-серверы командой resolvectl status или в /etc/resolv.conf. Если проблема не решается, возможно, сервер не настроен на пересылку трафика (IP forwarding) или файрвол блокирует пакеты.

Что делать, если провайдер блокирует UDP-порт 1701?

Если ваш интернет-провайдер блокирует UDP-порт 1701, используемый L2TP, вы не сможете установить соединение. В этом случае рекомендуется перейти на другой VPN-протокол, который использует другие порты, например WireGuard (UDP 51820) или OpenVPN (UDP 1194, TCP 443). Эти протоколы также обеспечивают более высокую производительность и устойчивость к блокировкам. Альтернативно можно попробовать настроить L2TP через NAT-T (порт 4500), но это не всегда помогает.

Как проверить, что L2TP/IPsec-соединение работает корректно?

После подключения выполните несколько проверок: 1) ip a show ppp0 — убедитесь, что интерфейс получил IP-адрес от VPN-сервера. 2) ip route show default — маршрут по умолчанию должен указывать на ppp0. 3) ping 8.8.8.8 — проверьте связь с внешним миром. 4) nslookup google.com — проверьте работу DNS. Также можно посетить сайт типа whatismyipaddress.com, чтобы убедиться, что ваш публичный IP-адрес соответствует IP-адресу VPN-сервера.

Какие алгоритмы шифрования лучше использовать для L2TP/IPsec?

Для L2TP/IPsec рекомендуется использовать современные алгоритмы: для IKE (Phase 1) — aes128-sha256-modp3072 или aes256-sha256-modp2048, для ESP (Phase 2) — aes128-sha256 или aes256-sha256. Избегайте устаревших алгоритмов, таких как 3DES, SHA-1 и modp1024, так как они уязвимы к атакам. Точные значения зависят от сервера, поэтому убедитесь, что клиент и сервер используют совместимые алгоритмы. В strongSwan эти параметры задаются в файле /etc/ipsec.conf.