VPN через NetworkManager

Здравствуйте!
Пытаемся поднять VPN (тип сервера L2TP) через клиента NetworkManager

  1. Ставим NetworkManager-l2tp (потом висит как запущенная служба xl2tpd.service)
  2. Создаем соединение по инструкции

nmcli connection add connection.id vpn0 con-name vpn0 type VPN vpn-type l2tp ifname – connection.autoconnect no ipv4.method auto vpn.data “gateway = [ipv4], ipsec-enabled = yes, ipsec-psk = 0s”$(base64 <<<‘[PSK]’ | rev | cut -c2- | rev)“=, mru = 1400, mtu = 1400, password-flags = 0, refuse-chap = yes, refuse-mschap = yes, refuse-pap = yes, require-mppe = yes, user = [user]” vpn.secrets password=[user-password]

Где:
[ipv4] – ip адрес VPN сервера l2tp/ipsec
[PSK] – ключ PSK (pre shared key)
[user] – имя пользователя
[user-password] – пароль пользователя

  1. Запускаем соединение командой nmcli c up vpn0
  2. После непродолжительной задумчивости в секунд 5 получаем ответ

Error: Connection activation failed: The VPN service failed to start
Hint: use ‘journalctl -xe NM_CONNECTION=b0302501-1463-4457-b321-e125e17f87e5 + NM_DEVICE=eth0’ to get more details.

  1. Смотрим детали в журнале

Nov 28 11:51:56 wirenboard-A76AQGDO NetworkManager[401]: [1701172316.6493] vpn[0x76d398,b0302501-1463-4457-b321-e125e17f87e5,“vpn0”]: starting l2tp
Nov 28 11:52:06 wirenboard-A76AQGDO NetworkManager[401]: [1701172326.7716] vpn[0x76d398,b0302501-1463-4457-b321-e125e17f87e5,“vpn0”]: failed to connect: ‘Timeout was reached’

Вроде как задумчивость при поднятии соединения и истечение таймаута подходят…

  1. Смотрим логи на VPN сервере

ipsec error: parsinng packet failed, possible cause: wrong password

Кто-нибудь поднимал VPN через NetworkManager? Необязательно L2TP, можно любой другой
Куда вообще копать?

Добрый день.
У меня прямо сейчас работает несколько соединений, но l2tp - нет.
Я бы все ж запустил nm-l2tp-service с ключем debug и посмотрел что пишет. Ну и сервер тоже, включите подробный вывод отладочных сообщений.

И попробуйте без mppe: MPPE-128 L2TP Linux+Mikrotik — Admin — Форум

Добрый день.
Попробуйте указать ключ PSK без преобразования:

nmcli connection add connection.id vpn0 con-name vpn0 type VPN vpn-type l2tp ifname – connection.autoconnect no ipv4.method auto vpn.data “gateway = [ipv4], ipsec-enabled = yes, ipsec-psk = [PSK], mru = 1400, mtu = 1400, password-flags = 0, refuse-chap = yes, refuse-mschap = yes, refuse-pap = yes, require-mppe = yes, user = [user]” vpn.secrets password=[user-password]

Либо измените строку в файле “/etc/NetworkManager/system-connections/vpn0.nmconnection” и укажите свой ключ

ipsec-psk=[PSK]

1 лайк

Благодарю!
Помогло прямое указание ipsec-psk=[PSK]
А как теперь заставить NM поднимать VPN строго через определенный интерфейс? (ppp0)

Пробовали
connection.interface-name: ppp0
connection.interface-name: wb-gsm-sim1
connection.interface-name: ttyUSB1

Но все равно при поднятом wb-eth0 (eth0) vpn стартует через него

Описание connection.interface-name
The name of the network interface this connection is bound to. If not set, then the connection can be attached to any interface of the appropriate type (subject to restrictions imposed by other settings). For software devices this specifies the name of the created device. For connection types where interface names cannot easily be made persistent (e.g. mobile broadband or USB Ethernet), this property should not be used. Setting this property restricts the interfaces a connection can be used with, and if interface names change or are reordered the connection may be applied to the wrong interface.

Неважно через (с) какой интерфейса будт пакеты - отправляться они будут по дефолтному маршруту.
Если маршрут через ethernet - то пойдут по нему.

Спасибо!
А как сделать автоподключение?
Выставление connection.autoconnect: yes (true) не помогает…

Покажите вывод

nmcli connection show vpn0

интересно что стоит в

connection.autoconnect:           
connection.autoconnect-priority:
connection.autoconnect-retries: 

connection.autoconnect: yes
connection.autoconnect-priority: 0
connection.autoconnect-retries: -1 (default)

Я б поставил
connection.autoconnect-retries 0

В основном соединении ещё в настройках нужно в connection.secondaries добавить uuid от VPN. Например, для eth0:

UUID=$(nmcli --get-values connection.uuid connection show vpn0)
nmcli connection modify wb-eth0 connection.secondaries “$UUID”

не помогло :frowning:

ПОМОГЛО!!!
Но если это делать применительно не к wb-eth0, а к wb-gsm-sim1, то заодно можно решить вопрос поднятия VPN через GSM соединение!

Если руками, то можно сделать проще
nmcli connection edit wb-gsm-sim1
goto connection
set secondaries и по TAB он сам подставляет UUID от vpn0 (я так понимаю если VPN несколько по двойному TAB он предложит все)

Новая беда… VPN соединение поднимается при загрузке, но спустя какое то время падает, команда nmcli с up vpn0 его снова поднимает, но потом оно снова падает :frowning:

root@wirenboard-A76AQGDO:~# nmcli monitor
\NetworkManager is running
vpn0: connection profile changed
ppp1: device created
ppp1: unavailable
ppp1: disconnected
‘vpn0’ is now the primary connection
ppp1: unmanaged
ppp1: device removed
‘wb-eth0’ is now the primary connection

Это не связано с приоритетами соединений (как это было с GSM для экономии трафика)?

Еще наблюдение - если нет Eth0 то VPN не падает…

Да, это происходит при переключении в менеджере сети на более приоритетное соединение. При переключении обратно можно решить так (пример для eth0):

В “/etc/NetworkManager/dispatcher.d/vpn-up”:

#! /bin/bash

REQUIRED_CONNECTION_NAME="eth0"
VPN_CONNECTION_NAME="vpn0"


activ_con=$(nmcli c s --active | grep -n "" | grep -w 2 |  grep "${REQUIRED_CONNECTION_NAME}")
activ_vpn=$(nmcli c s --active | grep "${VPN_CONNECTION_NAME}")
if [ "${activ_con}" -a ! "${activ_vpn}" ];
then
sleep 5
nmcli con up id "${VPN_CONNECTION_NAME}"
fi
chmod +x /etc/NetworkManager/dispatcher.d/vpn-up

Работает, только скачет постоянно туда сюда…
Можно как-то primary connection сделать VPN?

Нет, поскольку сервис wb-nm-helper и wb-connection-manager, входящий в его пакет не умеют работать с VPN.
Перейдите на вкладку «Приоритеты соединений» в разделе «Настройки → Конфигурационные файлы → Сетевые соединения» и задайте высокий приоритет для вашего основного соединения, который работает с VPN, а для остальных сделайте приоритет ниже.

  1. Можете прислать диагностический архив? Хочется знать версию релиза и версии установленных пакетов.
  2. Можете описать всю задачу целиком? Какие интерфейсы должны быть активны на контроллере, и как они должны использоваться? Какой трафик должен идти через VPN?

Спасибо за помощь, но на текущий момент задача решена. Мы вынесли настройки VPN в WEB-интерфейс, все работает