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

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

В данной статье будет описана настройка L2TP/IPSec между роутерами с операционной системой OpenWRT


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

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

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

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

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

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




Укажем IP-адрес сервера и IP-адреса, выдаваемые клиентам:




В следующем пункте пропишем логин и пароль клиентам для подключения к серверу:




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


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

Так как L2TP используется с транспортным режимом IPSec, то настроить IPSec можно будет только из консоли. Подключимся в консоль в соответствии с пунктом 2.1 статьи:

Как подключиться к роутеру 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" должен быть 1 TAB, иначе конфигурация работать не будет!

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

С описанием остальных параметров можно ознакомиться в следующем руководстве: https://wiki.strongswan.org/projects/strongswan/wiki/Connsection

Указываем общий ключ:

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.

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


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


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

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

  • Создадим интерфейс L2TP, для этого перейдём в раздел "Сеть - Интерфейсы - "Добавить новый интерфейс"






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




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



  • Создаём и добавляем интерфейс в зону


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


  • Указываем следующие параметры для зоны:

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

Настроим 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" должен быть 1 TAB, иначе конфигурация работать не будет!

  • В пункте right укажем WAN-адрес сервера L2TP
  • В пункте auto укажем route, что означает, что соединение будет запущено только в том случае, если на IP-адрес 172.26.19.13 будет отправлен какой-либо пакет.
  • Указываем общий ключ:
    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"



Пинг с сервера до туннельного адреса клиента:
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:~#


Пинг с сервера до локального адреса клиента:
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

root@LT40_Server:~#


Пинг с сервера до устройства с адресом 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_Server:~#


Пинг с клиента до туннельного адреса сервера:
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:~#



Пинг с клиента до локального адреса сервера:
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

root@LT40_Client:~#


Пинг с клиента до устройства с адресом 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

root@LT40_Client:~#