L2TP/IPsec VPN
L2TP (Layer 2 Tunneling Protocol) в сочетании с IPsec обеспечивает удаленный доступ VPN с широкой поддержкой клиентов. L2TP/IPsec встроен в большинство операционных систем (Windows, macOS, iOS, Android), что делает его популярным выбором для remote access VPN без необходимости установки стороннего ПО.
Обзор
Что такое L2TP/IPsec
L2TP (Layer 2 Tunneling Protocol):
- Протокол туннелирования на уровне 2 (Data Link)
- Инкапсулирует PPP фреймы
- Не обеспечивает шифрование сам по себе
IPsec:
- Обеспечивает шифрование и аутентификацию
- Защищает L2TP трафик
- ESP (Encapsulating Security Payload) mode
L2TP/IPsec комбинация:
- L2TP для туннелирования
- IPsec для безопасности
- Стандартизированное решение (RFC 3193)
Преимущества L2TP/IPsec
Плюсы:
- Встроенные клиенты в OS (Windows, macOS, iOS, Android)
- Не требует установки стороннего ПО
- Хорошая совместимость
- Простая конфигурация клиентов
- Подходит для BYOD (Bring Your Own Device)
Минусы:
- Медленнее современных VPN (WireGuard, OpenVPN)
- Проблемы с NAT traversal (решается NAT-T)
- Устаревающая технология
- Менее безопасен чем современные альтернативы
- Использует UDP 500, 4500, 1701 (может блокироваться firewall)
Когда использовать L2TP/IPsec
Используйте L2TP/IPsec когда:
- Нельзя устанавливать VPN клиенты
- BYOD сценарии
- Legacy совместимость требуется
- Простота для пользователей критична
Используйте альтернативы когда:
- Производительность важна → WireGuard
- Кросс-платформа с производительностью → OpenVPN
- Максимальная безопасность → WireGuard или OpenVPN
Архитектура
Компоненты L2TP/IPsec
- L2TP Access Concentrator (LAC) - VyOS сервер
- L2TP Network Server (LNS) - VyOS сервер (same)
- IPsec SA - Security Association для шифрования
- PPP - Point-to-Point Protocol для аутентификации
Процесс подключения
- IPsec IKE negotiation (UDP 500)
- IPsec ESP tunnel создается (UDP 4500 с NAT-T)
- L2TP tunnel устанавливается (UDP 1701)
- PPP negotiation - аутентификация (CHAP/PAP)
- IP address assignment - клиент получает IP
Порты
- UDP 500 - IKE (Internet Key Exchange)
- UDP 4500 - IPsec NAT-T (NAT Traversal)
- UDP 1701 - L2TP
- ESP (IP Protocol 50) - IPsec encryption
Базовая конфигурация
Простой L2TP/IPsec сервер
# IPsec конфигурация для L2TP
set vpn ipsec authentication psk l2tp id '203.0.113.1'
set vpn ipsec authentication psk l2tp id '%any'
set vpn ipsec authentication psk l2tp secret 'MyStrongPSK123!'
# IKE group для L2TP
set vpn ipsec ike-group IKE-L2TP key-exchange 'ikev1'
set vpn ipsec ike-group IKE-L2TP lifetime '3600'
set vpn ipsec ike-group IKE-L2TP proposal 1 dh-group '2'
set vpn ipsec ike-group IKE-L2TP proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-L2TP proposal 1 hash 'sha1'
# ESP group для L2TP
set vpn ipsec esp-group ESP-L2TP lifetime '3600'
set vpn ipsec esp-group ESP-L2TP mode 'transport'
set vpn ipsec esp-group ESP-L2TP pfs 'disable'
set vpn ipsec esp-group ESP-L2TP proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-L2TP proposal 1 hash 'sha1'
# IPsec site-to-site для remote access
set vpn ipsec site-to-site peer l2tp-remote authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer l2tp-remote authentication pre-shared-secret 'l2tp'
set vpn ipsec site-to-site peer l2tp-remote connection-type 'respond'
set vpn ipsec site-to-site peer l2tp-remote ike-group 'IKE-L2TP'
set vpn ipsec site-to-site peer l2tp-remote default-esp-group 'ESP-L2TP'
set vpn ipsec site-to-site peer l2tp-remote local-address '203.0.113.1'
set vpn ipsec site-to-site peer l2tp-remote remote-address '0.0.0.0/0'
# L2TP сервер
set vpn l2tp remote-access authentication mode 'local'
set vpn l2tp remote-access authentication local-users username alice password 'AlicePass123!'
set vpn l2tp remote-access authentication local-users username bob password 'BobPass456!'
# Client IP pool
set vpn l2tp remote-access client-ip-pool start '192.168.255.10'
set vpn l2tp remote-access client-ip-pool stop '192.168.255.50'
# Gateway IP
set vpn l2tp remote-access gateway-address '192.168.255.1'
# DNS для клиентов
set vpn l2tp remote-access name-server '8.8.8.8'
set vpn l2tp remote-access name-server '1.1.1.1'
# Firewall для L2TP/IPsec
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 destination port 500,4500,1701
set firewall ipv4 input filter rule 100 protocol udp
set firewall ipv4 input filter rule 101 action accept
set firewall ipv4 input filter rule 101 protocol esp
# NAT для клиентов
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 192.168.255.0/24
set nat source rule 100 translation address masquerade
commit
saveПроверка L2TP/IPsec
# IPsec статус
show vpn ipsec sa
# L2TP сессии
show vpn l2tp remote-access sessions
# Подключенные пользователи
show vpn l2tp remote-access users
# Логи
show log vpnАутентификация
Local authentication
Пользователи хранятся в конфигурации VyOS:
set vpn l2tp remote-access authentication mode 'local'
# Пользователи
set vpn l2tp remote-access authentication local-users username user1 password 'Pass1!'
set vpn l2tp remote-access authentication local-users username user2 password 'Pass2!'
set vpn l2tp remote-access authentication local-users username user3 password 'Pass3!'
# Статические IP для пользователей
set vpn l2tp remote-access authentication local-users username user1 static-ip '192.168.255.10'
set vpn l2tp remote-access authentication local-users username user2 static-ip '192.168.255.11'
commitRADIUS authentication
Централизованная аутентификация через RADIUS:
set vpn l2tp remote-access authentication mode 'radius'
# RADIUS серверы
set vpn l2tp remote-access authentication radius server 192.168.1.10 key 'RadiusSecret123!'
set vpn l2tp remote-access authentication radius server 192.168.1.11 key 'RadiusSecret123!'
# Timeout
set vpn l2tp remote-access authentication radius timeout 5
# Accounting
set vpn l2tp remote-access authentication radius acct-timeout 5
commitRequire options
# Требовать MSCHAP-v2
set vpn l2tp remote-access authentication require 'mschap-v2'
# Или CHAP
set vpn l2tp remote-access authentication require 'chap'
# Запретить слабую аутентификацию
set vpn l2tp remote-access authentication protocols pap disable
set vpn l2tp remote-access authentication protocols chap disable
commitПродвинутая конфигурация
MTU и MRU настройка
# MTU для L2TP
set vpn l2tp remote-access mtu 1400
# MRU (Maximum Receive Unit)
set vpn l2tp remote-access mru 1400
commitРекомендация: MTU 1400 для учета IPsec/L2TP overhead.
Idle timeout
# Отключить клиентов при неактивности (секунды)
set vpn l2tp remote-access idle-timeout 3600
commitWINS server
Для Windows клиентов:
set vpn l2tp remote-access wins-server 192.168.1.100
commitLNS (L2TP Network Server) настройки
# Максимум сессий
set vpn l2tp remote-access maximum-sessions 100
# Listen address
set vpn l2tp remote-access outside-address '203.0.113.1'
commitPPP options
# PPP interface prefix
set vpn l2tp remote-access ppp-options interface-cache 10
# LCP echo для keepalive
set vpn l2tp remote-access ppp-options lcp-echo-failure 3
set vpn l2tp remote-access ppp-options lcp-echo-interval 30
# IPv6 support
set vpn l2tp remote-access ppp-options ipv6 'allow'
commitClient IP pool с multiple ranges
# Pool 1
set vpn l2tp remote-access client-ip-pool start '192.168.255.10'
set vpn l2tp remote-access client-ip-pool stop '192.168.255.100'
# VyOS не поддерживает multiple pools напрямую
# Используйте RADIUS для dynamic IP assignment
commitCompression
# MPPE encryption (Microsoft Point-to-Point Encryption)
set vpn l2tp remote-access ppp-options mppe 'require-128'
commitКлиентская конфигурация
Windows клиент
Windows 10/11:
- Settings → Network & Internet → VPN
- Add a VPN connection
- VPN provider: Windows (built-in)
- Connection name: Company VPN
- Server name or address:
vpn.company.comили203.0.113.1 - VPN type: L2TP/IPsec with pre-shared key
- Pre-shared key:
MyStrongPSK123! - User name:
alice - Password:
AlicePass123! - Save → Connect
PowerShell:
Add-VpnConnection -Name "Company VPN" `
-ServerAddress "vpn.company.com" `
-TunnelType L2tp `
-EncryptionLevel Required `
-AuthenticationMethod Chap,MSChapv2 `
-L2tpPsk "MyStrongPSK123!" `
-Force `
-RememberCredential `
-PassThrumacOS клиент
- System Preferences → Network
- Click “+” to add new connection
- Interface: VPN
- VPN Type: L2TP over IPSec
- Service Name: Company VPN
- Server Address:
vpn.company.com - Account Name:
alice - Authentication Settings:
- User Authentication: Password
- Machine Authentication: Shared Secret
- Shared Secret:
MyStrongPSK123!
- Advanced: Send all traffic over VPN (optional)
- Apply → Connect
iOS клиент
- Settings → General → VPN → Add VPN Configuration
- Type: L2TP
- Description: Company VPN
- Server:
vpn.company.com - Account:
alice - Password:
AlicePass123! - Secret:
MyStrongPSK123! - Send All Traffic: On
- Save → Connect (toggle VPN on)
Android клиент
- Settings → Network & Internet → VPN
- Add VPN
- Name: Company VPN
- Type: L2TP/IPSec PSK
- Server address:
vpn.company.com - IPSec pre-shared key:
MyStrongPSK123! - Username:
alice - Password:
AlicePass123! - Save → Connect
Linux клиент (NetworkManager)
# Установка
sudo apt-get install network-manager-l2tp network-manager-l2tp-gnome
# GUI: NetworkManager → Add VPN → L2TP
# Server: vpn.company.com
# Username: alice
# Password: AlicePass123!
# IPSec Settings: Pre-shared key: MyStrongPSK123!xl2tpd manual:
# Установка
sudo apt-get install xl2tpd strongswan
# /etc/ipsec.conf
conn L2TP-PSK
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=%defaultroute
leftprotoport=17/1701
right=203.0.113.1
rightprotoport=17/1701
# /etc/ipsec.secrets
: PSK "MyStrongPSK123!"
# /etc/xl2tpd/xl2tpd.conf
[lac company]
lns = 203.0.113.1
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.client
length bit = yes
# /etc/ppp/options.l2tpd.client
ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-chap
noccp
noauth
mtu 1400
mru 1400
defaultroute
usepeerdns
connect-delay 5000
name alice
password AlicePass123!
# Подключение
sudo ipsec up L2TP-PSK
sudo xl2tpd-control connect companySplit tunnel vs Full tunnel
Full tunnel (весь трафик через VPN)
По умолчанию L2TP push default route:
# На VyOS (по умолчанию)
# Клиенты автоматически получают default route через VPN
commitКлиент (Windows): “Send all traffic over VPN” включено.
Split tunnel (только корпоративный трафик)
Для split tunnel нужно настроить клиент вручную.
Windows PowerShell:
# После подключения добавить только нужные маршруты
Add-VpnConnectionRoute -ConnectionName "Company VPN" -DestinationPrefix 192.168.0.0/16
Add-VpnConnectionRoute -ConnectionName "Company VPN" -DestinationPrefix 10.0.0.0/8
# Отключить "Send all traffic"
Set-VpnConnection -Name "Company VPN" -SplitTunneling $TruemacOS/Linux: Настроить routing вручную после подключения.
Мониторинг и диагностика
Проверка L2TP сессий
# Активные сессии
show vpn l2tp remote-access sessions
# Подробности
show vpn l2tp remote-access users
# Статистика
show vpn l2tp remote-access statisticsПример вывода:
User Interface IP Address Calling Station Time
alice ppp0 192.168.255.10 198.51.100.50 00:15:32
bob ppp1 192.168.255.11 198.51.100.51 01:23:45Проверка IPsec
# IPsec SA
show vpn ipsec sa
# Детали peer
show vpn ipsec sa peer 198.51.100.50Проверка connectivity
# Ping клиента
ping 192.168.255.10
# На клиенте ping gateway
ping 192.168.255.1
# Ping через VPN
ping 192.168.1.10 # Internal resourceЛоги
# VPN логи
show log vpn
# Live monitoring
monitor log vpn
# L2TP specific
show log | grep l2tp
# IPsec specific
show log | grep ipsectcpdump
# L2TP трафик (после IPsec decryption)
sudo tcpdump -i ppp0 -n
# IPsec ESP (encrypted)
sudo tcpdump -i eth0 esp -n
# IKE negotiation
sudo tcpdump -i eth0 port 500 -nTroubleshooting
Клиент не может подключиться
Проблема: Подключение зависает или отказывается.
Причины:
- Firewall блокирует порты
- PSK не совпадает
- IPsec не устанавливается
- NAT traversal проблемы
Диагностика:
# Проверить firewall
show firewall ipv4 input filter
# Проверить IPsec SA
show vpn ipsec sa
# Проверить логи
show log vpn | grep errorРешение:
# Firewall правила
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 destination port 500,4500,1701
set firewall ipv4 input filter rule 100 protocol udp
set firewall ipv4 input filter rule 101 action accept
set firewall ipv4 input filter rule 101 protocol esp
# Проверить PSK
show vpn ipsec authentication psk
commitIPsec устанавливается, но L2TP не работает
Проблема: IPsec SA показывает UP, но L2TP туннель не создается.
Причины:
- UDP 1701 блокируется
- L2TP сервис не запущен
- Аутентификация не проходит
Диагностика:
# Проверить L2TP сервис
systemctl status xl2tpd
# Проверить L2TP порт
netstat -ulnp | grep 1701
# Логи
show log vpn | grep l2tpРешение:
# Перезапустить L2TP
restart vpn l2tp
# Проверить пользователей
show configuration vpn l2tp remote-access authentication local-usersАутентификация не проходит
Проблема: “Authentication failed” на клиенте.
Причины:
- Неправильный username/password
- Требуется другой auth protocol
- RADIUS не доступен
Диагностика:
# Проверить пользователей
show configuration vpn l2tp remote-access authentication
# RADIUS test
show vpn l2tp remote-access authentication radiusРешение:
# Проверить пароль
show configuration vpn l2tp remote-access authentication local-users username alice
# Разрешить разные auth protocols
delete vpn l2tp remote-access authentication require
commitНет доступа к локальной сети
Проблема: VPN подключен, но нет доступа к ресурсам.
Причины:
- Firewall блокирует VPN клиентов
- NAT не настроен
- Routing problems
Диагностика:
# Проверить routing
show ip route
# Ping с VPN клиента
# На VyOS:
ping 192.168.255.10 # VPN client
# Проверить firewall forward
show firewall ipv4 forward filterРешение:
# Firewall для VPN клиентов
set firewall ipv4 forward filter rule 200 action accept
set firewall ipv4 forward filter rule 200 source address 192.168.255.0/24
set firewall ipv4 forward filter rule 200 destination address 192.168.0.0/16
# NAT
set nat source rule 100 source address 192.168.255.0/24
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 translation address masquerade
commitМедленная производительность
Проблема: VPN работает, но медленно.
Причины:
- MTU проблемы (фрагментация)
- CPU overhead от encryption
- Network latency
Решение:
# MTU tuning
set vpn l2tp remote-access mtu 1400
set vpn l2tp remote-access mru 1400
# На клиенте (Windows PowerShell):
# netsh interface ipv4 set subinterface "Company VPN" mtu=1400 store=persistent
commitBehind NAT проблемы
Проблема: L2TP не работает когда VyOS за NAT.
Причины:
- NAT-T не работает корректно
- UDP 4500 проблемы
Решение:
# NAT traversal
set vpn ipsec options nat-traversal enable
# Проверить что используется UDP 4500
sudo tcpdump -i eth0 port 4500 -n
commitБезопасность
Рекомендации по безопасности
- Сильный PSK:
# Минимум 20 символов, случайные
set vpn ipsec authentication psk l2tp secret 'xR9mK2nP5qL8vW3tY7zB4cF1gH6jN0sA'- Сильные пароли пользователей:
# Минимум 12 символов
set vpn l2tp remote-access authentication local-users username alice password 'Str0ng!Pass#2024'- RADIUS вместо local auth:
set vpn l2tp remote-access authentication mode 'radius'
set vpn l2tp remote-access authentication radius server 192.168.1.10 key 'RadiusSecret'- Firewall rate limiting:
set firewall ipv4 input filter rule 100 recent count 5
set firewall ipv4 input filter rule 100 recent time minute 1- Idle timeout:
set vpn l2tp remote-access idle-timeout 1800- Логирование:
# Включить подробное логирование
set vpn l2tp remote-access ppp-options logging debug
# Monitor
monitor log vpn- IKEv2 вместо IKEv1 (если клиенты поддерживают):
set vpn ipsec ike-group IKE-L2TP key-exchange 'ikev2'- Ограничение по IP:
# Firewall для specific sources
set firewall ipv4 input filter rule 100 source address 198.51.100.0/24Примеры конфигураций
Пример 1: Small office remote access
# IPsec для L2TP
set vpn ipsec authentication psk l2tp id '203.0.113.1'
set vpn ipsec authentication psk l2tp id '%any'
set vpn ipsec authentication psk l2tp secret 'CompanyVPN2024!Secret'
set vpn ipsec ike-group IKE-L2TP key-exchange 'ikev1'
set vpn ipsec ike-group IKE-L2TP lifetime '3600'
set vpn ipsec ike-group IKE-L2TP proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-L2TP proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-L2TP proposal 1 hash 'sha256'
set vpn ipsec esp-group ESP-L2TP lifetime '3600'
set vpn ipsec esp-group ESP-L2TP mode 'transport'
set vpn ipsec esp-group ESP-L2TP pfs 'dh-group14'
set vpn ipsec esp-group ESP-L2TP proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-L2TP proposal 1 hash 'sha256'
set vpn ipsec site-to-site peer l2tp-remote authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer l2tp-remote authentication pre-shared-secret 'l2tp'
set vpn ipsec site-to-site peer l2tp-remote connection-type 'respond'
set vpn ipsec site-to-site peer l2tp-remote ike-group 'IKE-L2TP'
set vpn ipsec site-to-site peer l2tp-remote default-esp-group 'ESP-L2TP'
set vpn ipsec site-to-site peer l2tp-remote local-address '203.0.113.1'
set vpn ipsec site-to-site peer l2tp-remote remote-address '0.0.0.0/0'
# L2TP server
set vpn l2tp remote-access authentication mode 'local'
set vpn l2tp remote-access authentication local-users username admin password 'AdminPass123!'
set vpn l2tp remote-access authentication local-users username alice password 'AlicePass456!'
set vpn l2tp remote-access authentication local-users username bob password 'BobPass789!'
set vpn l2tp remote-access client-ip-pool start '192.168.255.10'
set vpn l2tp remote-access client-ip-pool stop '192.168.255.50'
set vpn l2tp remote-access gateway-address '192.168.255.1'
set vpn l2tp remote-access name-server '192.168.1.1'
set vpn l2tp remote-access name-server '8.8.8.8'
set vpn l2tp remote-access mtu 1400
set vpn l2tp remote-access idle-timeout 3600
# Firewall
set firewall ipv4 input filter rule 110 action accept
set firewall ipv4 input filter rule 110 destination port 500,4500,1701
set firewall ipv4 input filter rule 110 protocol udp
set firewall ipv4 input filter rule 111 action accept
set firewall ipv4 input filter rule 111 protocol esp
set firewall ipv4 forward filter rule 210 action accept
set firewall ipv4 forward filter rule 210 source address 192.168.255.0/24
# NAT
set nat source rule 110 outbound-interface name eth0
set nat source rule 110 source address 192.168.255.0/24
set nat source rule 110 translation address masquerade
commit
saveПример 2: Enterprise с RADIUS
# IPsec (same as above)
# ...
# L2TP с RADIUS
set vpn l2tp remote-access authentication mode 'radius'
set vpn l2tp remote-access authentication radius server 192.168.1.10 key 'RadiusSecret123!'
set vpn l2tp remote-access authentication radius server 192.168.1.11 key 'RadiusSecret123!'
set vpn l2tp remote-access authentication radius timeout 5
set vpn l2tp remote-access authentication radius acct-timeout 5
# Require strong auth
set vpn l2tp remote-access authentication require 'mschap-v2'
# IP pool
set vpn l2tp remote-access client-ip-pool start '10.99.0.10'
set vpn l2tp remote-access client-ip-pool stop '10.99.0.250'
set vpn l2tp remote-access gateway-address '10.99.0.1'
# DNS
set vpn l2tp remote-access name-server '192.168.1.1'
set vpn l2tp remote-access dns-suffix 'company.local'
# WINS для Windows
set vpn l2tp remote-access wins-server '192.168.1.100'
# Performance tuning
set vpn l2tp remote-access mtu 1400
set vpn l2tp remote-access maximum-sessions 200
# PPP keepalive
set vpn l2tp remote-access ppp-options lcp-echo-failure 3
set vpn l2tp remote-access ppp-options lcp-echo-interval 30
commit
saveЛучшие практики
Сильные credentials:
- PSK: 20+ символов, случайные
- Passwords: 12+ символов, complexity rules
RADIUS для enterprise:
- Централизованная аутентификация
- Accounting и audit
- Интеграция с AD/LDAP
MTU optimization:
- MTU 1400 для L2TP/IPsec
- MSS clamping для TCP
Firewall protection:
- Rate limiting на VPN портах
- Geo-blocking если применимо
- Логирование подключений
Monitoring:
- Отслеживать активные сессии
- Алерты на failed authentications
- Bandwidth monitoring
Idle timeout:
- Disconnect неактивных пользователей
- Освобождение IP адресов
Split tunnel:
- Экономия bandwidth
- Уменьшение latency для non-corporate трафика
Backup VPN:
- Альтернативный VPN метод (OpenVPN, WireGuard)
- Different ports/protocols
Documentation:
- Инструкции для пользователей
- Supported platforms
- Troubleshooting guide
Regular updates:
- Rotation PSK регулярно
- Update user passwords
- Review access lists
Альтернативы L2TP/IPsec
Когда рассмотреть альтернативы
WireGuard:
- Значительно быстрее
- Современная криптография
- Простая конфигурация
- Требует клиент
OpenVPN:
- Более гибкий
- Лучшая производительность
- Работает через HTTP proxy
- Требует клиент
IKEv2/IPsec:
- Современнее чем L2TP
- Лучше для мобильных (reconnect)
- Встроен в iOS/macOS
- Сложнее конфигурация
Заключение
L2TP/IPsec обеспечивает простое и совместимое remote access VPN решение для VyOS. Основные преимущества:
- Встроенные клиенты в большинстве OS
- Простота для пользователей - не нужно устанавливать ПО
- BYOD friendly - работает на личных устройствах
- Проверенная технология - стандартизировано и широко поддерживается
Используйте L2TP/IPsec когда:
- Нужна максимальная совместимость
- Пользователи не могут устанавливать ПО
- BYOD scenario
- Legacy поддержка требуется
Для новых deployments рассмотрите WireGuard (производительность) или OpenVPN (гибкость), но L2TP/IPsec остается надежным выбором для широкой совместимости и простоты использования.