🌐 Настройка L2TP/IPsec VPN между офисами (MikroTik + Ubuntu)

Полное руководство по объединению локальных сетей нескольких офисов через центральный сервер в облаке.

✅ Итоговая схема: Сервер (Ubuntu) в Timeweb, публичный IP – SERVER_PUBLIC_IP, VPN-сеть 10.8.9.0/24. Роутеры MikroTik получают фиксированные IP: Офис1 – 10.8.9.101 (сеть 192.168.1.0/24), Офис2 – 10.8.9.102 (192.168.2.0/24) и т.д. Маршрутизация через сервер.

1. Настройка сервера Ubuntu

1.1. Установка пакетов

sudo apt update sudo apt install strongswan xl2tpd ppp lsof

1.2. Настройка IPsec (strongSwan)

/etc/ipsec.conf (замените SERVER_PUBLIC_IP):

config setup charondebug="ike 2, knl 2, cfg 2" uniqueids=no conn l2tp-psk auto=add keyexchange=ikev1 authby=secret type=transport left=%defaultroute leftid=SERVER_PUBLIC_IP leftprotoport=17/1701 right=%any rightprotoport=17/%any ikelifetime=24h lifetime=24h margintime=30m rekey=yes rekeyfuzz=10% keyingtries=%forever

/etc/ipsec.secrets (замените SERVER_PUBLIC_IP и IPSEC_PSK):

SERVER_PUBLIC_IP %any : PSK "IPSEC_PSK"

1.3. Настройка L2TP (xl2tpd)

/etc/xl2tpd/xl2tpd.conf:

[global] port = 1701 auth file = /etc/ppp/chap-secrets [lns default] ip range = 10.8.9.100-10.8.9.200 local ip = 10.8.9.1 require chap = yes refuse pap = yes require authentication = yes name = l2tpd pppoptfile = /etc/ppp/options.xl2tpd length bit = yes

1.4. Настройка PPP

/etc/ppp/options.xl2tpd:

refuse-pap refuse-chap refuse-mschap require-mschap-v2 ms-dns 8.8.8.8 ms-dns 8.8.4.4 asyncmap 0 auth crtscts lock hide-password modem proxyarp lcp-echo-interval 30 lcp-echo-failure 4 noipx

1.5. Пользователи (chap-secrets)

/etc/ppp/chap-secrets (замените пароли):

"office1" l2tpd "PASSWORD_OFFICE1" 10.8.9.101 "office2" l2tpd "PASSWORD_OFFICE2" 10.8.9.102 "office3" l2tpd "PASSWORD_OFFICE3" 10.8.9.103 "office55" l2tpd "PASSWORD_OFFICE55" 10.8.9.55

1.6. Включение IP forwarding

sudo sysctl net.ipv4.ip_forward=1 # для постоянного сохранения: echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p

1.7. Автоматические маршруты через ip-up.d

Создайте скрипт /etc/ppp/ip-up.d/99-vpn-routes:

#!/bin/sh case "$PPP_REMOTE" in 10.8.9.101) ip route add 192.168.1.0/24 via $PPP_REMOTE dev $PPP_IFACE 2>/dev/null ;; 10.8.9.102) ip route add 192.168.2.0/24 via $PPP_REMOTE dev $PPP_IFACE 2>/dev/null ;; 10.8.9.103) ip route add 192.168.3.0/24 via $PPP_REMOTE dev $PPP_IFACE 2>/dev/null ;; 10.8.9.55) ip route add 192.168.55.0/24 via $PPP_REMOTE dev $PPP_IFACE 2>/dev/null ;; esac exit 0

Сделайте скрипт исполняемым:

sudo chmod +x /etc/ppp/ip-up.d/99-vpn-routes

1.8. Фаервол (ufw)

sudo ufw allow 500/udp sudo ufw allow 4500/udp sudo ufw allow 1701/udp sudo ufw allow ssh sudo ufw enable

1.9. Запуск служб

sudo systemctl restart strongswan-starter sudo systemctl enable strongswan-starter sudo service xl2tpd restart sudo update-rc.d xl2tpd enable

2. Настройка роутера MikroTik (на примере Офиса 1)

2.1. Настройка IPsec

/ip ipsec peer add address=SERVER_PUBLIC_IP/32 name=peer1 exchange-mode=main send-initial-contact=yes /ip ipsec identity add peer=peer1 auth-method=pre-shared-key secret=IPSEC_PSK /ip ipsec policy add peer=peer1 tunnel=yes src-address=0.0.0.0/0 dst-address=0.0.0.0/0 protocol=udp dst-port=1701 action=encrypt

2.2. L2TP клиент

/interface l2tp-client add name=l2tp-out connect-to=SERVER_PUBLIC_IP user=office1 password=YOUR_PASSWORD profile=default-encryption use-ipsec=yes add-default-route=no disabled=no

2.3. Правила файрвола

/ip firewall filter add chain=input in-interface=l2tp-out protocol=icmp action=accept /ip firewall filter add chain=input in-interface=l2tp-out action=log log-prefix="DROP_ICMP " /ip firewall filter add chain=forward in-interface=l2tp-out out-interface=bridge action=accept /ip firewall filter add chain=forward in-interface=bridge out-interface=l2tp-out action=accept /ip firewall filter add chain=forward in-interface=l2tp-out out-interface=l2tp-out action=accept

2.4. Статические маршруты до удалённых сетей

/ip route add dst-address=192.168.2.0/24 gateway=10.8.9.1 distance=1 /ip route add dst-address=192.168.3.0/24 gateway=10.8.9.1 distance=1 /ip route add dst-address=192.168.55.0/24 gateway=10.8.9.1 distance=1

2.5. Автопереподключение (скрипт и планировщик)

/system script add name=vpn-check source={ :local status [/interface l2tp-client get l2tp-out running] :if ($status = false) do={ :log warning "VPN is down, reconnecting..." /interface l2tp-client disable l2tp-out :delay 5 /interface l2tp-client enable l2tp-out } } /system scheduler add name=vpn-watchdog interval=1m on-event="/system script run vpn-check"

3. Настройка второго и последующих роутеров

Аналогично, с заменой user на office2, office3 и т.д., а также с соответствующими статическими маршрутами (для Офиса 2 маршрут до 192.168.1.0/24).

4. Проверка работоспособности

На сервере:

ip addr show | grep ppp ip route show | grep via ping 192.168.1.1 ping 192.168.2.1

На роутерах:

/ping 10.8.9.1 /ping 10.8.9.102 /ping 192.168.2.1
Примечание: после перезагрузки роутеров сервер автоматически добавит маршруты благодаря скрипту ip-up.d. На роутерах маршруты сохраняются в конфигурации.

5. Дополнительно: SIP-телефония

Установите IP-АТС (например, FreePBX) на отдельном сервере в той же VPN-сети (IP 10.8.9.5). Настройте маршруты на роутерах (достаточно, чтобы он был доступен через сервер). SIP-телефоны регистрируются на внутренний IP АТС.

6. Частые проблемы и решения

ПроблемаРешение
L2TP не подключается (ошибка аутентификации)Проверьте /etc/ppp/chap-secrets – формат, кавычки, имена. Перезапустите xl2tpd.
IPsec не устанавливаетсяПроверьте открытые порты (500,4500 UDP). Смотрите логи: sudo tail -f /var/log/syslog \| grep charon
Маршруты на MikroTik неактивныУбедитесь, что шлюз доступен (ping 10.8.9.1). Используйте gateway=10.8.9.1%l2tp-out.
Сервер не пингует локальные сетиПроверьте IP forwarding и скрипты ip-up.d. Включите логирование pppd.
Финальная проверка: После настройки всех офисов пинги между любыми локальными адресами должны проходить. Например, из сети 192.168.1.0/24 до 192.168.2.1.

Документ подготовлен на основе рабочей конфигурации. Версия 2.0 (адаптивная).