Настройка L2TP/IPSec на примере двух LT40/LT5x

Настройка L2TP/IPSec на примере двух LT40/LT5x

← Все разделы FAQ

Разделы FAQ:

Оглавление

Введение

В статье описана настройка туннеля L2TP с шифрованием IPSec между двумя роутерами с операционной системой OpenWrt на примере LT40, LT50 и LT51.

Схема подключения:

На схеме показаны два роутера. Первый — клиент (LT40) с динамическим IP-адресом (допускается и статический). Второй — сервер, он должен иметь статический IP-адрес.

Задача: объединить локальные подсети двух роутеров туннелем L2TP, шифрованным средствами IPSec.

Примечание: при настройке IPSec используется протокол IKEv2 как наиболее современный.

Настройка сервера

1. Настройка L2TP

Перейдите в конфигурацию L2TP.

Укажите IP-адрес сервера и диапазон IP-адресов, выдаваемых клиентам.

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

Примечание: после настройки L2TP роутер необходимо перезагрузить.

2. Настройка IPSec

L2TP используется с транспортным режимом IPSec, поэтому настроить IPSec можно только из консоли. Подключитесь к консоли по SSH, как описано в статье Как подключиться к роутеру LTx для настройки.

Откройте конфигурацию IPSec на редактирование:

nano /etc/ipsec.conf

Вставьте следующую конфигурацию:

conn L2TP/IPSec
	left=%any
	right=%any
	leftfirewall=yes
	authby=secret
	closeaction=clear
	type=transport
	ikelifetime=8h
	keylife=8h
	keyingtries=%forever
	dpdaction=clear
	dpddelay=60s
	leftsubnet=%dynamic
	rightsubnet=%dynamic
	ike=aes128-sha256-modp3072
	esp=aes128-sha256-modp3072
	leftauth=psk
	rightauth=psk
	auto=add
	leftid=%any
	rightid=%any
	keyexchange=ikev2
Важно: перед каждым параметром после строки conn L2TP/IPSec должен стоять один символ табуляции, иначе конфигурация работать не будет.

Назначение основных параметров:

  • left и right — указано %any, так как сервер только ожидает подключения и сам не инициирует их;
  • auto=add — сервер не инициирует подключение к клиенту, но принимает входящие;
  • type=transport — используется транспортный режим IPSec;
  • ike и esp — наборы предложений (proposals), которые сервер предлагает клиенту и на которых устанавливается соединение. Через запятую можно перечислить несколько наборов, например: ike=aes128-sha256-modp1024, aes128-sha256-modp1024, md5-sha1-modp1024;
  • keyexchange=ikev2 — выбран протокол IKEv2.

Описание остальных параметров приведено в документации strongSwan: https://wiki.strongswan.org/projects/strongswan/wiki/ConnSection.

Задайте общий ключ в файле /etc/ipsec.secrets:

nano /etc/ipsec.secrets
# /etc/ipsec.secrets - strongSwan IPsec secrets file
%any %any : PSK "Your Key"
include /var/ipsec/ipsec.secrets

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

service ipsec restart

3. Настройка межсетевого экрана

IPSec использует порты 500 (ISAKMP) и 4500 (NAT Traversal) — их нужно открыть в межсетевом экране. Перейдите в раздел Сеть → Межсетевой экран → Правила для трафика.

Откройте порты:

Кроме того, необходимо открыть порт 1701 для L2TP. Если открыть его напрямую, к туннелю L2TP смогут подключиться любые узлы, в том числе без шифрования IPSec. Поэтому разрешите на этом порту только трафик, прошедший через IPSec:

iptables -A input_rule -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT

Отбросьте подключения, не шифрованные IPSec:

iptables -A input_rule -p udp -m policy --dir in --pol none -m udp --dport 1701 -j DROP

Разрешите входящий, исходящий и перенаправляемый трафик через интерфейсы ppp+:

iptables -A input_rule -i ppp+ -j ACCEPT
iptables -A forwarding_rule -i ppp+ -j ACCEPT
iptables -A forwarding_rule -o ppp+ -j ACCEPT
iptables -A output_rule -o ppp+ -j ACCEPT

На этом настройка сервера окончена.


Настройка клиента

1. Настройка L2TP

Создайте интерфейс L2TP: перейдите в раздел Сеть → Интерфейсы и нажмите Добавить новый интерфейс.

Пропишите параметры подключения:

Пропишите маршрут до сервера:

Создайте зону межсетевого экрана и добавьте в неё интерфейс:

Отредактируйте созданную зону в межсетевом экране:

Задайте для зоны следующие параметры:

2. Настройка IPSec

IPSec на клиенте настраивается из консоли. Откройте конфигурацию:

nano /etc/ipsec.conf

Вставьте следующую конфигурацию:

conn L2TP/IPSec
	left=%any
	right=172.26.19.13
	leftfirewall=yes
	authby=secret
	closeaction=restart
	type=transport
	ikelifetime=8h
	keylife=8h
	keyingtries=%forever
	dpdaction=restart
	dpddelay=60s
	leftsubnet=%dynamic
	rightsubnet=%dynamic
	ike=aes128-sha256-modp3072
	esp=aes128-sha256-modp3072
	leftauth=psk
	rightauth=psk
	auto=route
	leftid=%any
	rightid=%any
	keyexchange=ikev2
Важно: перед каждым параметром после строки conn L2TP/IPSec должен стоять один символ табуляции, иначе конфигурация работать не будет.

Отличия от конфигурации сервера:

  • в параметре right указывается WAN-адрес сервера L2TP (в примере — 172.26.19.13);
  • в параметре auto указано route: соединение будет установлено только тогда, когда на адрес 172.26.19.13 будет отправлен какой-либо пакет.

Задайте общий ключ в файле /etc/ipsec.secrets:

nano /etc/ipsec.secrets
# /etc/ipsec.secrets - strongSwan IPsec secrets file
%any %any : PSK "Your Key"
include /var/ipsec/ipsec.secrets

Проверка соединения

Просмотреть лог подключения можно командой logread -f.

Лог подключения на клиенте:

Mon Jul 15 08:29:09 2024 daemon.notice xl2tpd[1335]: Connecting to host 172.26.19.13, port 1701
Mon Jul 15 08:29:09 2024 authpriv.info ipsec: 11[IKE] initiating IKE_SA L2TP/IPSec[1] to 172.26.19.13
Mon Jul 15 08:29:09 2024 daemon.info ipsec: 11[IKE] initiating IKE_SA L2TP/IPSec[1] to 172.26.19.13
Mon Jul 15 08:29:10 2024 authpriv.info ipsec: 15[IKE] establishing CHILD_SA L2TP/IPSec{2} reqid 1
Mon Jul 15 08:29:10 2024 daemon.info ipsec: 15[IKE] establishing CHILD_SA L2TP/IPSec{2} reqid 1
Mon Jul 15 08:29:10 2024 authpriv.info ipsec: 16[IKE] IKE_SA L2TP/IPSec[1] established between 172.26.19.15[172.26.19.15]...172.26.19.13[172.26.19.13]
Mon Jul 15 08:29:10 2024 daemon.info ipsec: 16[IKE] IKE_SA L2TP/IPSec[1] established between 172.26.19.15[172.26.19.15]...172.26.19.13[172.26.19.13]
Mon Jul 15 08:29:10 2024 authpriv.info ipsec: 16[IKE] CHILD_SA L2TP/IPSec{2} established with SPIs cd8f69db_i c7118620_o and TS 172.26.19.15/32 === 172.26.19.13/32
Mon Jul 15 08:29:10 2024 daemon.info ipsec: 16[IKE] CHILD_SA L2TP/IPSec{2} established with SPIs cd8f69db_i c7118620_o and TS 172.26.19.15/32 === 172.26.19.13/32
Mon Jul 15 08:29:10 2024 local0.notice vpn: + 172.26.19.13 172.26.19.13 -- 172.26.19.15
Mon Jul 15 08:29:12 2024 daemon.notice xl2tpd[1335]: Connection established to 172.26.19.13, 1701. Local: 60165, Remote: 18331 (ref=0/0).
Mon Jul 15 08:29:12 2024 daemon.notice xl2tpd[1335]: Calling on tunnel 60165
Mon Jul 15 08:29:12 2024 daemon.notice xl2tpd[1335]: Call established with 172.26.19.13, Local: 30498, Remote: 7332, Serial: 3 (ref=0/0)
Mon Jul 15 08:29:12 2024 daemon.debug xl2tpd[1335]: start_pppd: I'm running:
Mon Jul 15 08:29:12 2024 daemon.debug xl2tpd[1335]: "/usr/sbin/pppd"
Mon Jul 15 08:29:12 2024 daemon.debug xl2tpd[1335]: "plugin"
Mon Jul 15 08:29:12 2024 daemon.debug xl2tpd[1335]: "pppol2tp.so"
Mon Jul 15 08:29:12 2024 daemon.debug xl2tpd[1335]: "pppol2tp"
Mon Jul 15 08:29:12 2024 daemon.debug xl2tpd[1335]: "8"
Mon Jul 15 08:29:12 2024 daemon.debug xl2tpd[1335]: "passive"
Mon Jul 15 08:29:12 2024 daemon.debug xl2tpd[1335]: "nodetach"
Mon Jul 15 08:29:12 2024 daemon.debug xl2tpd[1335]: ":"
Mon Jul 15 08:29:12 2024 daemon.debug xl2tpd[1335]: "file"
Mon Jul 15 08:29:12 2024 daemon.debug xl2tpd[1335]: "/tmp/l2tp/options.L2TP"
Mon Jul 15 08:29:12 2024 daemon.info pppd[6779]: Plugin pppol2tp.so loaded.
Mon Jul 15 08:29:12 2024 daemon.notice pppd[6779]: pppd 2.4.7 started by root, uid 0
Mon Jul 15 08:29:12 2024 kern.info kernel: [ 1044.514439] l2tp-L2TP: renamed from ppp1
Mon Jul 15 08:29:12 2024 daemon.info pppd[6779]: Renamed interface ppp1 to l2tp-L2TP
Mon Jul 15 08:29:12 2024 daemon.info pppd[6779]: Using interface l2tp-L2TP
Mon Jul 15 08:29:12 2024 daemon.notice pppd[6779]: Connect: l2tp-L2TP <-->
Mon Jul 15 08:29:12 2024 daemon.notice pppd[6779]: CHAP authentication succeeded
Mon Jul 15 08:29:12 2024 daemon.notice pppd[6779]: local IP address 10.0.0.4
Mon Jul 15 08:29:12 2024 daemon.notice pppd[6779]: remote IP address 10.0.0.1
Mon Jul 15 08:29:12 2024 daemon.notice netifd: Network device 'l2tp-L2TP' link is up
Mon Jul 15 08:29:12 2024 daemon.notice netifd: Interface 'L2TP' is now up
Mon Jul 15 08:29:12 2024 user.notice firewall: Reloading firewall due to ifup of L2TP (l2tp-L2TP)
Mon Jul 15 08:29:14 2024 daemon.info ntpd[1347]: Listen normally on 10 l2tp-L2TP 10.0.0.4:123
Mon Jul 15 08:29:14 2024 daemon.debug ntpd[1347]: new interface(s) found: waking up resolver

Состояние интерфейса после подключения:

Лог подключения на сервере:

Thu Apr 11 14:49:55 2024 authpriv.info ipsec: 09[IKE] 172.26.19.15 is initiating an IKE_SA
Thu Apr 11 14:49:55 2024 daemon.info ipsec: 09[IKE] 172.26.19.15 is initiating an IKE_SA
Thu Apr 11 14:49:57 2024 authpriv.info ipsec: 10[IKE] IKE_SA L2TP/IPSec[1] established between 172.26.19.13[172.26.19.13]...172.26.19.15[172.26.19.15]
Thu Apr 11 14:49:57 2024 daemon.info ipsec: 10[IKE] IKE_SA L2TP/IPSec[1] established between 172.26.19.13[172.26.19.13]...172.26.19.15[172.26.19.15]
Thu Apr 11 14:49:57 2024 authpriv.info ipsec: 10[IKE] CHILD_SA L2TP/IPSec{1} established with SPIs c344a35c_i c70ba987_o and TS 172.26.19.13/32 === 172.26.19.15/32
Thu Apr 11 14:49:57 2024 daemon.info ipsec: 10[IKE] CHILD_SA L2TP/IPSec{1} established with SPIs c344a35c_i c70ba987_o and TS 172.26.19.13/32 === 172.26.19.15/32
Thu Apr 11 14:49:57 2024 local0.notice vpn: + 172.26.19.15 172.26.19.15 -- 172.26.19.13
Thu Apr 11 14:50:05 2024 daemon.notice xl2tpd[1341]: Connection established to 172.26.19.15, 1701. Local: 51448, Remote: 2223 (ref=0/0). LNS session is 'l2tp-server'
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: control_finish: Warning: Peer did not specify transmit speed
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: start_pppd: I'm running:
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "/usr/sbin/pppd"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "plugin"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "pppol2tp.so"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "pppol2tp"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "8"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "pppol2tp_lns_mode"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "pppol2tp_tunnel_id"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "51448"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "pppol2tp_session_id"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "15953"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "passive"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "nodetach"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "file"
Thu Apr 11 14:50:05 2024 daemon.debug xl2tpd[1341]: "/var/etc/options.xl2tpd"

Проверьте доступность узлов командой ping. Пинг с сервера до туннельного адреса клиента:

root@LT40_Server:~# ping 10.0.0.4
PING 10.0.0.4 (10.0.0.4): 56 data bytes
64 bytes from 10.0.0.4: seq=0 ttl=64 time=66.821 ms
64 bytes from 10.0.0.4: seq=1 ttl=64 time=188.003 ms
64 bytes from 10.0.0.4: seq=2 ttl=64 time=142.582 ms
64 bytes from 10.0.0.4: seq=3 ttl=64 time=253.183 ms
^C
--- 10.0.0.4 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 66.821/162.647/253.183 ms

Пинг с сервера до локального адреса клиента:

root@LT40_Server:~# ping 192.168.88.1
PING 192.168.88.1 (192.168.88.1): 56 data bytes
64 bytes from 192.168.88.1: seq=0 ttl=64 time=63.709 ms
64 bytes from 192.168.88.1: seq=1 ttl=64 time=91.983 ms
64 bytes from 192.168.88.1: seq=2 ttl=64 time=61.769 ms
64 bytes from 192.168.88.1: seq=3 ttl=64 time=121.471 ms
^C
--- 192.168.88.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 61.769/84.733/121.471 ms

Пинг с сервера до устройства в локальной сети клиента (192.168.88.25):

root@LT40_Server:~# ping 192.168.88.25
PING 192.168.88.25 (192.168.88.25): 56 data bytes
64 bytes from 192.168.88.25: seq=0 ttl=254 time=102.242 ms
64 bytes from 192.168.88.25: seq=1 ttl=254 time=199.382 ms
64 bytes from 192.168.88.25: seq=2 ttl=254 time=58.095 ms
64 bytes from 192.168.88.25: seq=3 ttl=254 time=133.443 ms
^C
--- 192.168.88.25 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 58.095/123.290/199.382 ms

Пинг с клиента до туннельного адреса сервера:

root@LT40_Client:~# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: seq=0 ttl=64 time=92.290 ms
64 bytes from 10.0.0.1: seq=1 ttl=64 time=88.572 ms
64 bytes from 10.0.0.1: seq=2 ttl=64 time=147.328 ms
64 bytes from 10.0.0.1: seq=3 ttl=64 time=122.949 ms
^C
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 88.572/112.784/147.328 ms

Пинг с клиента до локального адреса сервера:

root@LT40_Client:~# ping 192.168.89.1
PING 192.168.89.1 (192.168.89.1): 56 data bytes
64 bytes from 192.168.89.1: seq=0 ttl=64 time=247.324 ms
64 bytes from 192.168.89.1: seq=1 ttl=64 time=66.013 ms
64 bytes from 192.168.89.1: seq=2 ttl=64 time=64.526 ms
64 bytes from 192.168.89.1: seq=3 ttl=64 time=108.559 ms
^C
--- 192.168.89.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 64.526/121.605/247.324 ms

Пинг с клиента до устройства в локальной сети сервера (192.168.89.5):

root@LT40_Client:~# ping 192.168.89.5
PING 192.168.89.5 (192.168.89.5): 56 data bytes
64 bytes from 192.168.89.5: seq=0 ttl=254 time=74.430 ms
64 bytes from 192.168.89.5: seq=1 ttl=254 time=89.772 ms
64 bytes from 192.168.89.5: seq=2 ttl=254 time=206.112 ms
64 bytes from 192.168.89.5: seq=3 ttl=254 time=152.582 ms
^C
--- 192.168.89.5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 74.430/130.724/206.112 ms

Заключение

В результате настройки два роутера объединены туннелем L2TP, трафик которого шифруется средствами IPSec в транспортном режиме с обменом ключами по протоколу IKEv2. Устройства из локальной сети клиента и локальной сети сервера доступны друг другу напрямую, как если бы находились в одной сети. Схема не требует статического IP-адреса на стороне клиента — достаточно статического адреса на сервере. Дополнительные правила межсетевого экрана гарантируют, что к порту L2TP примут подключение только узлы, прошедшие проверку IPSec.