11
8月
2023
VPN по протоколу L2TP за 5 минут
17:04

VPN по протоколу L2TP за 5 минут

11 8月 2023 17:04

В статье рассказано о настройке VPN типа L2TP/IPSec под ОС Linux Mint 21.2.

Введение

Ранее мною была выполнена настройка сервера и клиента по протоколу PPTP. В отличие от PPTP, протокол L2TP не имеет уязвимостей и соединение происходит также значительно быстрее.

Для использования типа VPN типа L2TP/IPSec PSK.

(Инструкция была переработана и проверена 04.12.2023 для совместимости с Ubtuntu 20.04 и 22.04 / Linux Mint 21 / LxLE).

Удаление Libreswan

Обновление кеша apt:

sudo apt update

Данная команда удалит libreswan и автоматически установит strongswan:

sudo apt-get remove libreswan

Запуск и регистрация службы strongswan в systemd:

sudo systemctl strongswan-starter.service start
sudo systemctl strongswan-starter.service enable

Переустановка плагина Strongswan для NetworkManager

sudo apt reinstall network-manager-l2tp network-manager-l2tp-gnome

Генерация общего ключа Pre-shared key

В качестве общего ключа можно использовать любую последовательность (часто рекомендуют 12345678 🙂),
но лучше использовать по крайней мере 128-битный ключ.

dd if=/dev/random count=16 bs=1 | xxd -ps

PSK ключ следует передать между машинами безопасным образом (не через электронную почту, а, например, через другой VPN или с помощью USB-флешки).

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

Настраиваем роутер, на котором запускаем VPN типа L2TP - вводим общий ключ, имя пользователя и пароль.

Общие настройки - Изменить набор компонентов
Изменить набор компонентов роутера Zyxel

Добавление VPN L2TP/IPSec на роутере Zyxel

Добавляем сервер L2TP/IPsec

Выполняем настройку VPN сервера. Для этого, заходим в меню "Приложения" в левой части окна и нажимаем мышью на название VPN L2TP/IPSec. Откроется экран для настройки VPN сервера:
Основные настройки сервера L2TP/IPSec
Предоставление прав пользователю (имя пользователя и пароль добавили ранее).
Предоставляем пользователю возможность подключения

Запуск службы на клиенте Ubuntu / Linux Mint

sudo systemctl enable ipsec.service
sudo systemctl start ipsec.service

Создаем подключение к L2TP серверу (настройка L2TP на клиенте)

Следующие настройки для L2TP/IPSec PSK.

В системном лотке Ubuntu / Linux Mint левой кнопкой мыши щелкнуть по иконке сети

  • Соединения VPN - Настроить VPN
    l2tp-01

Выбираем вместо Ethernet тип VPN в выпадающем списке
l2tp-02

Тип "Layer2 tunneling protocol (L2TP)"
l2tp-03

Кнопка "Создать".
l2tp-04

Параметры протокола должны соответствовать серверу, в качестве которого выступает домашний роутер:

  • Шлюз (Gateway - белый IP адрес домашнего роутера)

  • Тип - Пароль

  • Имя пользователя

  • Пароль
    l2tp-05

  • Enable IPSec tonnel to L2TP host

  • Pre-shared key
    l2tp-06

В системном лотке нажимаем на значок сети - Соединения VPN и выбираем подключение по L2TP.

Подключение к VPN в моём случае заработало сразу.
connected

Если нет - проверяем параметры (IP-адрес сервера, pre-shared ключ, имя пользователя, пароль, возможность подключения).
На клиенте, поскольку он является инициатором, открывать порты на брандмауэре не нужно. На сервере должны быть открыты на вход порты 1701/UDP, 500/UDP и 4500/UDP (при включении приложения VPN L2TP/IPSec правила для Firewall добавляются в Zyxel Keenetik автоматически).

Протокол L2TP работает на втором, пакетном уровне OSI и не блокируется внутри РФ ни мобильными операторами, ни провайдерами фиксированного Интернет при передаче между российскими автономными системами. Например, между Мегафоном и Ростелекомом.

Настройка маршрута VPN соединения на клиенте

Если не настраивать маршрут в свойствах подключения, то будет доступен только роутер (шлюз).

Чтобы иметь доступ к всем компьютерам локальной домашней сети, нужно на клиенте в свойствах соединения настроить маршрут через шлюз.

1) Вначале открываем свойства подключения (на панели Network Manager в системном лотке нажимаем левую кнопку мыши - "СоединенияVPN" - "Параметры соединений". Откроется окно с со списком подключений подключений:
Маршруты на клиенте

Выбираем нужное подключение VPN и нажимаем на шестерню "свойства".

Выполняем настройку маршрута - на закладке IPv4 нажимаем "Маршруты", затем "Добавить":
Добавление маршрута
Заполняем параметры:

  • адрес - 192.168.100.0
  • маска сети - 255.255.255.0
  • шлюз - 192.168.100.1
  • метрика - 1

(Где вместо IP-адреса 192.168.100.0 указываем адрес своей локальной домашней сети, например, 192.168.77.0,
вместо шлюза 192.168.100.1 указываем IP-адрес шлюз домашней сети, например 192.168.77.1).

Через VPN в домашнюю сеть можно заходить на компьютеры в доме (FTP и т.д.). Доступ в Интернет клиентов из домашней сети также работает.

Такие же настройки можно выполнить на смартфоне под ОС Android.
Настройка VPN в Android
Настройка VPN в Android - продолжение

Дополнение от 27.11.2023 с исправлением от 31.03.2026:

Если часть трафика с ПК проходит мимо VPN тоннеля

Проблема: соединение VPN с сервером успешно установлено, но часть трафика клиента идёт не через VPN.

Решение: На клиенте (ПК на работе или ноутбуке) настраиваем маршрут по умолчанию.*

1) удалил старый маршрут со шлюзом по умолчанию

sudo ip route del default via 192.168.1.1

где 192.168.1.1 - IP адрес маршрутизатора рабочего ПК.

2) _добавил новый маршрут - шлюз по умолчанию через устройство ppp0 связанное с домашним VPN.

sudo ip route add default via 192.168.100.1 dev ppp0

где:
192.168.100.1 - IP адрес шлюза (роутера) домашней локальной сети где установлен сервер VPN,
ppp0 - имя устройства L2TP VPN.

Сохранил сценарий в домашней папке под именем gw.sh, задал права:
chmod +x gw.sh

Пример скрипта:
#!/bin/sh
sudo ip route del default via 192.168.1.1
sudo ip route add default via 192.168.100.1 dev ppp0

Запуск скрипта - командой:

./gw.sh

Если посмотреть в Wireshark, после запуска скрипта пакеты от рабочего ПК идут только до внешнего IP адреса домашнего ПК. Никакие пакеты больше не обходят тоннель, т.е. весь трафик завёрнут в тоннель VPN к домашнему ПК.

После отключения от домашней VPN сети, восстановить работу сети можно cкриптом, который меняет шлюз по умолчанию на исходный.

#!/bin/sh
sudo ip route add default via 192.168.1.1

где 192.168.1.1 - IP-адрес маршрутизатора сети на работе.

Добавил право выполнения (eXecute):

sudo chmod +x gw-off.sh

Трафик клиента при подключенном домашнем VPN до исполнения скрипта:
before
Трафик клиента при подключенном домашнем VPN после исполнения скрипта:
after
Соединения с посторонними IP адресами исчезли. Весь трафик идет через тоннель.
При этом способе могут не работать торренты, но просмотр WWW работает отлично.

Скрипт gw-off.sh для восстановления настроек нужно запустить после отключения от VPN.

./gw-off.sh

Либо после отключения от домашнего VPN можно перезапустить сеть командой.

sudo service networking restart


相关出版物