Самостоятельно скомпилированный OpenVPN не запускается из systemd

Самостоятельно скомпилированный OpenVPN не запускается из systemd

Я скомпилировал openvpn из исходников, запуск openvpn --versionвозвращает:

OpenVPN 2.4.4 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD] built on Nov 19 2017
library versions: OpenSSL 1.0.2g  1 Mar 2016, LZO 2.08

И создал /etc/openvpn/server.confфайл с некоторыми базовыми настройками. Однако, когда я пытаюсь запустить его, sudo systemctl start openvpn@serverон возвращает

Failed to start [email protected]: Unit [email protected] not found.

И sudo systemctl status openvpnвозвращает:

● openvpn.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead) since Sun 2017-11-19 14:21:06 HKT; 4 days ago
 Main PID: 1502 (code=exited, status=0/SUCCESS)

Что наводит меня на мысль, что служба OpenVPN даже не зарегистрирована.

Я проверил /lib/systemd/system/, у него нет openvpn.serviceфайла, но /etc/systemd/system/есть. Как я понимаю, это потому, что я скомпилировал вместо apt-get install openvpn?

Может ли кто-нибудь подсказать, как мне добавить самокомпилированный OpenVPN в качестве сервиса?

Впервые компилирую из исходников, поэтому любые советы/подсказки будут приветствоваться!

ПРАВКА 1:

Я могу запустить сервер OpenVPN и подключить к нему клиентов с помощью (только служба, похоже, не работает):

sudo openvpn /etc/openvpn/server.conf

решение1

Заставил это работать, вручную создав два файла в формате /lib/systemd/system.

Первый из них openvpn.service:

[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

и второе [email protected]:

[Unit]
Description=OpenVPN connection to %i
PartOf=openvpn.service
ReloadPropagatedFrom=openvpn.service
Before=systemd-user-sessions.service
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
PrivateTmp=true
KillMode=mixed
Type=forking
ExecStart=/usr/local/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid
PIDFile=/run/openvpn/%i.pid
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn
ProtectSystem=yes
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_READ_SEARCH CAP_AUDIT_WRITE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw

[Install]
WantedBy=multi-user.target

После их создания выполните sudo systemctl daemon-reloadперезагрузку новых изменений.

В целом файлы такие же, как если бы OpenVPN был установлен из официального репозитория, единственное отличие заключается в том , что ExecStart=/usr/sbin/openvpnдолжен быть ExecStart=/usr/local/sbin/openvpn, указывающий на скомпилированный локальный OpenVPN.

Редактировать: Если вы используете OpenVPN 2.4+, удалите PIDFile=/run/openvpn/%i.pidи --writepid /run/openvpn/%i.pidиз второго файла, так как это мешает серверу запускаться при загрузке. Нашел егоздесь

решение2

Обновление ответа Ильи (у меня нет репутации, чтобы комментировать)

У меня это работает на Ubuntu 16.04, я использую предоставленную службу в качестве шаблона (то есть один файл службы), изменив две вещи:

sudo cp ~/Downloads/openvpn-2.4.8/distro/systemd/[email protected] /lib/systemd/system/[email protected]

sudo vi /lib/systemd/system/[email protected]

Изменять:

  • @sbindir@ в /usr/local/sbin/
  • Тип=уведомить Тип=простой

Перезагрузить и начать

sudo systemctl daemon-reload
service [email protected] restart
service [email protected] status

Это предполагает, что у вас уже есть конфигурация в /etc/openvpn/client/client.service.conf

Связанный контент