Что такое L2TP/IPsec и почему он до сих пор актуален
L2TP (Layer 2 Tunneling Protocol) — это протокол туннелирования, который сам по себе не обеспечивает шифрование и аутентификацию. Поэтому на практике он почти всегда используется в связке с IPsec, который добавляет шифрование и защиту целостности данных. Такая комбинация называется L2TP/IPsec и поддерживается практически всеми современными операционными системами, включая Windows, macOS, Android, iOS и, конечно, Linux.
Несмотря на появление более современных протоколов, таких как WireGuard и OpenVPN, L2TP/IPsec остаётся востребованным благодаря своей совместимости с устаревшими системами и встроенной поддержке во многих VPN-сервисах. Например, встроенный клиент Windows и многие корпоративные VPN-шлюзы до сих пор используют именно L2TP/IPsec.
В этой статье мы рассмотрим настройку L2TP/IPsec как на стороне сервера (на базе Debian/Ubuntu), так и на стороне клиента (через командную строку и графический интерфейс NetworkManager). Вы узнаете, как установить необходимые пакеты, настроить IPsec и L2TP, подключиться к VPN и решить типичные проблемы.
Предварительные требования и подготовка системы
Прежде чем приступать к настройке, убедитесь, что у вас есть:
- Сервер или клиент с установленным Linux (рекомендуются Debian, Ubuntu, Fedora или CentOS).
- Права суперпользователя (sudo) для установки пакетов и изменения конфигурационных файлов.
- Для клиента: IP-адрес или имя хоста VPN-сервера, предварительный общий ключ (PSK), имя пользователя и пароль.
- Для сервера: статический IP-адрес, доступный из интернета, и открытые порты UDP 500, 1701 и 4500.
Также рекомендуется обновить систему перед началом работы:
sudo apt update && sudo apt upgrade # Debian/Ubuntu
sudo dnf update # Fedora/RHELУбедитесь, что ваша система поддерживает strongSwan версии 5.0 и выше, так как более старые версии могут не поддерживать рекомендуемые алгоритмы шифрования.
Установка необходимых пакетов для L2TP/IPsec
Для работы L2TP/IPsec на Linux потребуются два основных компонента: strongSwan (реализация IPsec) и xl2tpd (демон L2TP). В зависимости от дистрибутива команды установки будут различаться.
Debian/Ubuntu/Linux Mint:
sudo apt install strongswan xl2tpd pppFedora/RHEL/CentOS Stream:
sudo dnf install strongswan xl2tpd pppArch Linux/Manjaro:
sudo pacman -S strongswan xl2tpd pppДля настройки через графический интерфейс NetworkManager дополнительно установите плагины:
- Debian/Ubuntu:
network-manager-l2tpиnetwork-manager-l2tp-gnome - Fedora/RHEL:
NetworkManager-l2tpиNetworkManager-l2tp-gnome - Arch:
networkmanager-l2tpиnetworkmanager-l2tp-gnome
После установки перезапустите NetworkManager, если вы планируете использовать GUI:
sudo systemctl restart NetworkManagerНастройка IPsec с помощью strongSwan
IPsec отвечает за шифрование и аутентификацию. В strongSwan конфигурация хранится в файлах /etc/ipsec.conf (параметры соединений) и /etc/ipsec.secrets (ключи).
Конфигурация ipsec.conf для сервера:
Откройте файл /etc/ipsec.conf и добавьте следующие секции:
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Первая секция задаёт общие параметры: фрагментацию IKE и обнаружение мёртвых узлов (DPD). Вторая секция определяет параметры для L2TP-соединений: транспортный режим, аутентификацию по общему ключу и используемые шифры. Рекомендуемые значения взяты из официальной документации strongSwan.
Конфигурация ipsec.conf для клиента:
Для клиента конфигурация будет выглядеть иначе:
config setup
charondebug="ike 2, knl 2, cfg 2, net 2, esp 2"
uniqueids=no
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Замените VPN_SERVER_IP на реальный IP-адрес вашего VPN-сервера.
Сохранение предварительного общего ключа (PSK):
В файле /etc/ipsec.secrets укажите PSK. Для сервера:
%any %any : PSK "mySharedKey"Для клиента:
: PSK "your-pre-shared-key"Рекомендуется генерировать надёжный ключ с помощью команды:
openssl rand -base64 18После изменения конфигурации перезапустите strongSwan:
sudo systemctl restart strongswan # Debian/Ubuntu
sudo systemctl restart strongswan-starter # Ubuntu (в некоторых версиях)Настройка L2TP с помощью xl2tpd
Демон xl2tpd управляет L2TP-туннелями. Его конфигурация находится в /etc/xl2tpd/xl2tpd.conf, а параметры PPP — в /etc/ppp/options.xl2tpd.
Конфигурация xl2tpd.conf для сервера:
Отредактируйте файл /etc/xl2tpd/xl2tpd.conf следующим образом:
[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Здесь ip range задаёт диапазон адресов для клиентов, local ip — адрес сервера в VPN-сети, name — имя службы, используемое для поиска учётных данных в файле chap-secrets.
Конфигурация xl2tpd.conf для клиента:
Для клиента добавьте секцию [lac]:
[global]
debug = 3
[lac my-vpn]
lns = VPN_SERVER_IP
ipsec saref = yes
length bit = yes
pppoptfile = /etc/ppp/options.xl2tpdНастройка PPP-опций:
Скопируйте стандартный файл опций и отредактируйте его:
sudo cp /etc/ppp/options /etc/ppp/options.xl2tpdДля сервера добавьте в /etc/ppp/options.xl2tpd:
asyncmap 0
auth
crtscts
lock
hide-password
modem
mtu 1460
lcp-echo-interval 30
lcp-echo-failure 4
noipx
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
multilink
mppe-statefulДля клиента используйте:
mtu 1400
mru 1400
noauth
defaultroute
usepeerdns
persist
maxfail 0Учётные данные пользователей:
Для сервера создайте учётные записи в /etc/ppp/chap-secrets:
ivanov l2tp-vpn Pa$$word_1 *Формат: логин, имя службы (должно совпадать с name в xl2tpd.conf), пароль, IP-адрес (или * для любого).
Для клиента укажите свои данные в том же файле:
your-username * your-password *После изменений перезапустите xl2tpd:
sudo systemctl restart xl2tpdПодключение к L2TP/IPsec VPN через командную строку
Для подключения к VPN-серверу с клиента Linux через CLI выполните следующие шаги.
1. Запустите IPsec-соединение:
sudo ipsec up my-vpnВы должны увидеть сообщение об успешном установлении IKE_SA.
2. Инициируйте L2TP-туннель:
echo "c my-vpn" | sudo tee /var/run/xl2tpd/l2tp-control3. Проверьте интерфейс ppp0:
ip a show ppp0Если всё прошло успешно, вы увидите назначенный IP-адрес.
4. Проверьте маршрутизацию:
ip route show defaultМаршрут по умолчанию должен указывать на ppp0.
5. Проверьте связь и DNS:
ping 8.8.8.8 -c 3
nslookup google.comЕсли ping проходит, но DNS не работает, проверьте настройки DNS в /etc/resolv.conf или используйте usepeerdns в опциях PPP.
Настройка L2TP/IPsec через графический интерфейс NetworkManager
Для пользователей десктопа NetworkManager предоставляет удобный графический интерфейс для настройки L2TP/IPsec.
Установка плагинов:
Как уже упоминалось, установите пакеты network-manager-l2tp и network-manager-l2tp-gnome (или аналогичные для вашего дистрибутива).
Создание нового VPN-подключения:
- Откройте «Настройки» → «Сеть».
- Нажмите «+» рядом с VPN.
- Выберите «Layer 2 Tunneling Protocol (L2TP)».
- Введите имя подключения, адрес шлюза (Gateway), имя пользователя и пароль.
- Нажмите «IPsec Settings».
- Установите флажок «Enable IPsec tunnel to L2TP host».
- Введите предварительный общий ключ (PSK).
- При необходимости укажите алгоритмы Phase 1 и Phase 2 (например,
aes256-sha256-modp2048иaes256-sha256). - Сохраните подключение и включите его.
Проверка подключения:
После включения VPN проверьте IP-адрес и маршрутизацию, как описано выше. Если соединение не устанавливается, проверьте журналы NetworkManager:
journalctl -u NetworkManager -fТипичные проблемы и их решение
При настройке L2TP/IPsec могут возникнуть следующие проблемы:
1. IPsec-сервис не запускается:
Проверьте журналы:
journalctl -xeu strongswanЧастые причины: неправильный PSK, несовпадение алгоритмов шифрования, ошибки в конфигурации.
2. L2TP-туннель не устанавливается:
Проверьте журналы xl2tpd:
journalctl -xeu xl2tpdУбедитесь, что порт 1701 UDP открыт и не блокируется брандмауэром.
3. Ошибки аутентификации:
Проверьте правильность имени пользователя и пароля в /etc/ppp/chap-secrets. Для GUI убедитесь, что данные введены верно.
4. Проблемы с маршрутизацией или DNS:
- Убедитесь, что в опциях PPP есть
defaultrouteиusepeerdns. - Проверьте, что маршрут по умолчанию указывает на ppp0.
- Если DNS не работает, проверьте
/etc/resolv.conf.
5. Брандмауэр блокирует трафик:
Откройте порты UDP 500, 1701 и 4500. Для UFW:
sudo ufw allow 500/udp
sudo ufw allow 1701/udp
sudo ufw allow 4500/udpДля firewalld:
sudo firewall-cmd --add-service=ipsec --permanent
sudo firewall-cmd --add-port=1701/udp --permanent
sudo firewall-cmd --reload6. Проблемы с NAT:
Если сервер находится за NAT, добавьте в /etc/ipsec.conf:
nat_traversal=yes
forceencaps=yesИ перезапустите strongSwan и xl2tpd.
Сравнение L2TP/IPsec с другими VPN-протоколами
L2TP/IPsec — не единственный протокол VPN, и у него есть свои сильные и слабые стороны.
Преимущества L2TP/IPsec:
- Широкая совместимость: встроенная поддержка в большинстве ОС и устройств.
- Использование IPsec обеспечивает надёжное шифрование (AES-256).
- Простота настройки на стороне клиента (особенно через GUI).
Недостатки:
- Более низкая производительность по сравнению с WireGuard из-за двойной инкапсуляции.
- Использование PSK менее безопасно, чем сертификаты.
- Порт 1701 UDP может блокироваться некоторыми провайдерами.
Сравнение с OpenVPN:
OpenVPN использует TLS и может работать через любой порт (обычно UDP 1194), что делает его более устойчивым к блокировкам. Однако он требует установки дополнительного ПО и более сложной настройки.
Сравнение с WireGuard:
WireGuard — современный протокол с высокой производительностью и простотой настройки, но он менее совместим со старыми системами. Если вам нужна максимальная совместимость, L2TP/IPsec остаётся хорошим выбором.
Рекомендации по безопасности и производительности
Чтобы обеспечить безопасность и стабильность вашего L2TP/IPsec VPN, следуйте этим рекомендациям:
- Используйте длинные и случайные PSK (не менее 18 символов).
- Регулярно обновляйте strongSwan и xl2tpd для получения исправлений безопасности.
- Ограничьте доступ к VPN-серверу по IP-адресам, если это возможно.
- Используйте современные алгоритмы шифрования (например, aes128-sha256-modp3072 или aes256-sha256-modp2048).
- Включайте DPD для автоматического разрыва неактивных соединений.
- Настраивайте брандмауэр так, чтобы разрешать только необходимые порты.
- Для повышения производительности уменьшите MTU до 1400–1460, чтобы избежать фрагментации пакетов.
- Если вы используете сервер за NAT, обязательно включите NAT-T.
Следуя этим советам, вы сможете создать надёжное и безопасное VPN-соединение, которое будет работать стабильно.
Вопросы и ответы
Безопасен ли L2TP/IPsec?
L2TP/IPsec считается более безопасным, чем PPTP, но менее безопасным, чем WireGuard или OpenVPN. Он использует PSK для аутентификации, что менее надёжно, чем сертификаты. Для повседневного использования он приемлем, но для передачи чувствительных данных лучше выбрать WireGuard или OpenVPN.
Можно ли использовать L2TP/IPsec на сервере без графического интерфейса?
Да, CLI-настройка, описанная в этой статье, полностью подходит для headless-серверов. Вы управляете strongSwan и xl2tpd через текстовые конфигурационные файлы и команды.
Почему VPN подключается, но не работает интернет?
Это обычно связано с проблемами маршрутизации или DNS. Убедитесь, что в опциях PPP указаны defaultroute и usepeerdns. Проверьте маршрут по умолчанию (ip route) и настройки DNS (resolvectl status или /etc/resolv.conf).
Мой провайдер блокирует UDP-порт 1701. Что делать?
Некоторые провайдеры блокируют L2TP (порт 1701). Попробуйте использовать другой протокол, например WireGuard (UDP 51820) или OpenVPN (UDP 1194). Также можно попробовать изменить порт на сервере, но это потребует дополнительной настройки.
Как настроить L2TP/IPsec на Linux через терминал без GUI?
Используйте CLI-метод, описанный в разделе «Подключение через командную строку». Установите strongSwan и xl2tpd, настройте файлы конфигурации и выполните команды ipsec up и echo "c my-vpn" | tee /var/run/xl2tpd/l2tp-control.
Что делать, если VPN-сервер находится за NAT?
Убедитесь, что NAT-T (NAT Traversal) включён. Добавьте в /etc/ipsec.conf параметры nat_traversal=yes и forceencaps=yes, затем перезапустите strongSwan и xl2tpd. Также откройте порты UDP 500 и 4500 на брандмауэре.