Оглавление
Введение
В статье описана настройка туннеля L2TP с шифрованием IPSec между двумя роутерами с операционной системой OpenWrt на примере LT40, LT50 и LT51.
Схема подключения:
На схеме показаны два роутера. Первый — клиент (LT40) с динамическим IP-адресом (допускается и статический). Второй — сервер, он должен иметь статический IP-адрес.
Задача: объединить локальные подсети двух роутеров туннелем L2TP, шифрованным средствами IPSec.
Настройка сервера
1. Настройка L2TP
Перейдите в конфигурацию L2TP.
Укажите IP-адрес сервера и диапазон IP-адресов, выдаваемых клиентам.
В следующем пункте задайте логин и пароль, с которыми клиенты будут подключаться к серверу.
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.