В данной статье будет описана настройка 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 |
Интерфейс после подключения:

Лог подключения со стороны сервера:
Thu Apr 11 14:49:55 2024 authpriv.info ipsec: 09[IKE] 172.26.19.15 is initiating an IKE_SA |
root@LT40_Server:~# ping 10.0.0.4PING 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.1PING 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.25PING 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.1PING 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.1PING 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.5PING 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:~#