LINUX.ORG.RU
решено ФорумAdmin

nmcli не получается сделать автозапуск vpn соединения

 ,


0

2
#cat /usr/lib/systemd/system/vpn-restore.service
Description=Template Settings Service
#After=network.target
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/sbin/vpn-service
[Install]
WantedBy=multi-user.target

#cat /usr/local/sbin/vpn-service
#!/usr/bin/env bash
/usr/bin/nmcli connection up id myvpn
/usr/sbin/iptables -t nat -A POSTROUTING -s 192.168.17.0/24 -j MASQUERADE

Если сделать на запущенной системе:

systemctl start vpn-restore.service

То все прекрасно запускается.

А вот при рестарте системы - нет.

systemctl status vpn-restore.service 
○ ipt-restore.service - Template Settings Service
     Loaded: loaded (/usr/lib/systemd/system/vpn-restore.service; enabled; preset: disabled)
     Active: inactive (dead) since Wed 2023-11-08 14:27:21 MSK; 36s ago
   Duration: 424ms
    Process: 1156 ExecStart=/usr/local/sbin/vpn-service (code=exited, status=0/SUCCESS)
   Main PID: 1156 (code=exited, status=0/SUCCESS)
        CPU: 31ms

ноя 08 14:27:21 dragonfly systemd[1]: Started ipt-restore.service - Template Settings Service.
ноя 08 14:27:21 dragonfly vpn-service[1158]: Ошибка: сбой активации подключения: The base device for the VPN connection was not active.
ноя 08 14:27:21 dragonfly systemd[1]: ipt-restore.service: Deactivated successfully.


Последнее исправление: HighMan (всего исправлений: 1)

Ты творишь дичь. Если используешь для настройки сети Network Manager, то и используй его. Там всё это есть - и автоматический старт vpn-соединения после подключения к сети, и хуки, в которых ты сможешь настроить фаервол.

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 1)
Ответ на: комментарий от eternal_sorrow

Ты творишь дичь. Если используешь для настройки сети Network Manager, то и используй его. Там всё это есть - и автоматический старт vpn-соединения после подключения к сети, и хуки, в которых та сможешь настроить фаервол.

Вы имеете в виду как-то назначить vpn соединению autostart?

HighMan
() автор топика
Ответ на: комментарий от HighMan

VPN-соединение не самостоятельно, оно не может автоматически стартовать если у тебя нет уже работающего подключения. Поэтому нужно привязать соединение VPN к другому сетевому соединению (может даже больше чем к одному, тут я не уверен, давно не использовал NM), и тогда VPN будет стартовать автоматически когда поднимется сеть.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

VPN-соединение не самостоятельно, оно не может автоматически стартовать если у тебя нет уже работающего подключения. Поэтому нужно привязать соединение VPN к другому сетевому соединению (может даже больше чем к одному, тут я не уверен, давно не использовал NM), и тогда VPN будет стартовать автоматически когда поднимется сеть.

Так ради этого я и нагородил автозапуск через systemd. Соединение, по идее, должно подниматься после network.target

Кстати, а как в это VPN соединение хукнуть правило для iptables?

HighMan
() автор топика
Ответ на: комментарий от utanho

Там юнит прямо говорит, почему не может запуститься. Но кому это интересно…

Вы имеете в виду: «The base device for the VPN connection was not active.»?

А что это за базовый девайс?

HighMan
() автор топика
Ответ на: комментарий от HighMan

Кстати, а как в это VPN соединение хукнуть правило для iptables?

Смотри документацию по хукам NM. Они размещаются в /etc/NetworkManager/dispatcher.d, если я не ошибаюсь. Точнее я тебе подсказать не смогу, так как давно уже на своей машине NM не держу.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

Как у тебя подключение к интернету организовано? По проводу или wifi? Вот этот девайс.

У меня все там наворочено :)

Сделан мост br0, он и является базовым девайсом для vpn

nmcli connection show
NAME                    UUID                                  TYPE      DEVICE 
myvpn                   f09b04fe-bebf-49a9-ba43-8e59b6644ffb  vpn       br0

Заработало!

В /usr/lib/systemd/system/vpn-restore.service изменил After=network.target на After=network-online.target

Правда, пока все корявенько через автозапуск в systemd.

Хотелось бы все сделать правильно, а не костылить…

HighMan
() автор топика
Последнее исправление: HighMan (всего исправлений: 1)