Also habe ich mir die openvpn-Konfiguration auf meinem Debian 9-basierten Server angesehen und etwas gefunden, das ich in den systemd-Unit-Dateien für den openvpn-Daemon nicht erklären kann. Der Daemon selbst startet und funktioniert ohne Probleme, aber ich kann nicht herausfinden, warum… Lass es mich erklären 🙂
Ich habe also openvpn installiert und eine korrekte Konfiguration in der /etc/openvpn/server.conf Datei. Bisher nichts falsch.
Allerdings laufen anscheinend zwei systemd-Units für openvpn, nämlich openvpn.service und [E-Mail geschützt] . Letzterer scheint derjenige zu sein, der tatsächlich die eingehenden VPN-Verbindungen akzeptiert, und ersterer scheint überhaupt nicht viel zu tun. Es läuft anscheinend nur, um letzteres zu starten, nehme ich an ...
Überprüfen Sie die Datei /etc/systemd/system/multi-user.target.wants/ Das Verzeichnis für openvpn-bezogene Dateien zeigt nur die Datei openvpn.service, deren Quelle ein symbolischer Link zu einer ähnlich benannten Datei in /lib/systemd/system ist. Der Inhalt dieser Datei ist:
# 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
OK Cool. Dies führt also nur /bin/true aus. Was genau startet dann das [email protected] Dämon? Ich weiß, dass die Unit-Datei dafür /lib/systemd/[email protected] ist aber ich kann auf meinem System keinerlei Hinweis darauf finden, was genau diese Unit-Datei ausführt. (Ich hatte erwartet, einen Symlink dafür unter /etc/systemd/system zu finden irgendwo, aber es gibt keinen.) Der Inhalt dieser Datei ist:
[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/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --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
Diese Unit-Datei hat also viel mehr Substanz als die openvpn.service-Datei. Aber was löst es aus? Mir ist der PartOf=openvpn.service aufgefallen Teil in der obigen Datei, aber das Nachschlagen der Bedeutung in den Manpages hat mich nicht viel klüger gemacht.
Ich werde weiter suchen, weil ich einfach wissen will, wie dieses Ding tickt!
Wenn jemand eine Ahnung hat, wie diese spezielle Unit-Datei ausgeführt wird oder was sie startet, lassen Sie es mich bitte wissen 🙂
Akzeptierte Antwort:
Sie müssen zwei Dinge wissen:
- Es gibt mehrere weitere undokumentierte Verzeichnisse, in denen systemd Unit-Dateien aufbewahrt.
- Debian und Ubuntu liefern einen Generator in
/lib/systemd/system-generators/openvpn-generator
das setzt symbolische „Will“-Links in eines dieser undokumentierten Verzeichnisse, einen für jede*.conf
Datei in/etc/openvpn
.
Die symbolischen Links führen zu openvpn.service
sich wie ein Ziel zu verhalten und alle Ihre verschiedenen Template-Instanziierungen zu „wollen“; wie der Kommentar zu Beginn der Serviceeinheit erklärt.
Beachten Sie, dass Debian und Ubuntu nicht mit dem übereinstimmen, was die OpenVPN-Leute selbst tun Versorgung für systemd, was auf Arch, CentOS, Fedora und dergleichen verwendet wird. Debian und Ubuntu ersetzen das, was in OpenVPN selbst für all dies bereitgestellt wird, vollständig durch ihre eigenen Sachen für systemd. Passen Sie also zumindest auf, wenn Sie Doco lesen, welches Betriebssystem Sie nach Doco vermuten.
Verwandte:Linux – Wie wechselt man zwischen tty- und xorg-Sitzung?
Die OpenVPN-Leute früher geben Sie einen [email protected]
ein Vorlageneinheit, aber weder Generator noch openvpn.service
Target-as-a-Service. Man musste [email protected]name
sich mit den gewöhnlichen systemd-Mechanismen dafür, und sie wurden direkt „gesucht“. durch multi-user.target
, anstatt von einem zwischengeschalteten Target-as-a-Service.
Die OpenVPN-Leute heute Geben Sie eindeutig [email protected]
an und [email protected]
Templates weiterhin keinen Generator oder openvpn.service
liefern Target-as-a-Service und erwarten, dass Sie [email protected]name
und [email protected]name
sich mit den gewöhnlichen systemd-Mechanismen dafür. Die *.conf
Dateien wurden aus /etc/openvpn
verschoben und in /etc/openvpn/client
und /etc/openvpn/server
, auch.
Weiterführende Literatur
- Jonathan de Boyne Pollard (2016). „Fehlende Systemsuchpfade aus
systemd.unit
Handbuchseite“. Errata fürsystemd
doco . Häufig gegebene Antworten. - https://unix.stackexchange.com/a/233581/5132
- https://unix.stackexchange.com/a/206490/5132
- “systemd service configuration“. OpenVPN . Arch-Wiki.
- “systemd service configuration“. OpenVPN . Parabel-Wiki.
- Christian Hesse (30.12.2016). OpenVPN 2.4.0-Update erfordert Administratoreingriff . Arch-Neuigkeiten.
- https://askubuntu.com/a/640026/43344