Как сервис OpenVPN запускает соединения по умолчанию?

Я установил openvpn версия 2.4.6-xenial0 из официального репозитория. Похоже, что сервис был автоматически включен:

cat /etc/systemd/system/multi-user.target.wants/openvpn.service

# This service is actually a systemd target,
# but we are using a service since targets cannot be reloaded.

[Unit]
Description=OpenVPN service
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecReload=/bin/true
WorkingDirectory=/etc/openvpn

[Install]
WantedBy=multi-user.target

После перезагрузки я вижу, что VPN-соединения настроены в /etc/openvpn были начаты. Однако из файла модуля мне не ясно, как это происходит на самом деле. Может ли кто-нибудь пролить свет на это?

1 ответ

Решение

Так как openvpn использует смесь сценариев SysV и systemd.

TL; DR

Такое поведение можно настроить в /etc/default/openvpn, Вот выдержка из файла, предоставленного openvpn пакет:

...
# Start only these VPNs automatically via init script.
# Allowed values are "all", "none" or space separated list of
# names of the VPNs. If empty, "all" is assumed.
# The VPN name refers to the VPN configutation file name.
# i.e. "home" would be /etc/openvpn/home.conf
#
# If you're running systemd, changing this variable will
# require running "systemctl daemon-reload" followed by
# a restart of the openvpn service (if you removed entries
# you may have to stop those manually)
#
#AUTOSTART="all"
#AUTOSTART="none"
#AUTOSTART="home office"
...

Так AUTOSTART не установлено и так все .conf файлы из /etc/openvpn каталог запускается при загрузке.

Используя современный системный способ

  1. Задавать AUTOSTART="none" в /etc/default/openvpn
  2. sudo systemctl daemon-reload

Теперь вы можете использовать systemctl чтобы управлять вашими соединениями openvpn, сервис назван в честь файлов конфигурации, таких как:

/etc/openvpn/ABC.conf -> openvpn@ABC.service

/etc/openvpn/XYZ.conf -> openvpn@XYZ.service

И так далее...

Примеры

Поэтому, если вы хотите установить XYZ-соединение openvpn, команда должна быть:

sudo systemctl start openvpn@XYZ

Чтобы включить это соединение при запуске:

sudo systemctl enable openvpn@XYZ

Чтобы получить статус этого соединения:

sudo systemctl status openvpn@XYZ
Другие вопросы по тегам