Díval jsem se tedy na konfiguraci openvpn na mém serveru založeném na Debianu 9 a našel jsem něco, co nedokážu vysvětlit v souborech systemd unit pro démona openvpn. Samotný démon se spouští a funguje bez problémů, ale nemohu přijít na to proč... Dovolte mi to vysvětlit 🙂
Takže mám nainstalovaný openvpn a mám správnou konfiguraci v /etc/openvpn/server.conf soubor. Zatím nic špatného.
Pro openvpn však zřejmě běží dvě systémové jednotky, konkrétně openvpn.service a [e-mail chráněn] . Zdá se, že ten druhý skutečně přijímá příchozí připojení vpn a podobně, ten první podle všeho moc nedělá. Zdá se, že to jen běží, aby se spustilo to druhé, předpokládám…
Kontrola /etc/systemd/system/multi-user.target.wants/ adresář pro soubory související s openvpn zobrazuje pouze soubor openvpn.service, jehož zdroj je symbolický odkaz na podobný pojmenovaný soubor v /lib/systemd/system. Obsah tohoto souboru je:
# 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 v pohodě. Takže to běží pouze /bin/true. Co přesně potom spustí [email protected] démon? Vím, že soubor jednotky pro toto je /lib/systemd/[email protected] ale nemohu v mém systému najít žádné vodítko k tomu, co přesně spouští tento soubor jednotky. (Čekal jsem, že pro to najdu symbolický odkaz v /etc/systemd/system někde, ale není.) Obsah tohoto souboru je:
[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
Tento soubor jednotky má tedy mnohem větší obsah než soubor openvpn.service. Ale co to nastartuje? Všiml jsem si PartOf=openvpn.service část ve výše uvedeném souboru, ale hledání významu tohoto v manuálových stránkách mě o moc moudřejší neudělalo.
Budu pokračovat v hledání, protože chci jen vědět, proč tahle věc funguje!
Pokud máte nějaké ponětí o tom, jak se tento konkrétní soubor jednotky spouští nebo co jej spouští, dejte mi prosím vědět 🙂
Přijatá odpověď:
Musíte vědět dvě věci:
- Existuje několik dalších nezdokumentovaných adresáře, kde systemd uchovává soubory jednotek.
- Debian a Ubuntu poskytují generátor v
/lib/systemd/system-generators/openvpn-generator
který umístí symbolické odkazy „chce“ do jednoho z těchto nezdokumentovaných adresářů, jeden pro každý*.conf
soubor v/etc/openvpn
.
Symbolické odkazy způsobují openvpn.service
chovat se jako cíl a „chtít“ všechny vaše různé instance šablon; jak vysvětluje komentář na začátku servisní jednotky.
Všimněte si, že Debian a Ubuntu nejsou v souladu s tím, co lidé OpenVPN sami zdroj pro systemd, což je to, co se používá na Arch, CentOS, Fedora a podobně. Debian a Ubuntu zcela nahrazují to, co je k tomu všemu dodáváno v samotném OpenVPN, svými vlastními věcmi pro systemd. Při čtení doco si tedy alespoň dejte pozor, jaký operační systém tento doco předpokládá.
Související:Linux – Jak přepínat mezi tty a xorg session?
Lidé s OpenVPN byli poskytnout [email protected]
šablonu, ale žádný generátor ani openvpn.service
target-as-a-service. Bylo nutné explicitně povolit a zakázat [email protected]name
měli k tomu běžné systémové mechanismy a byli „chtěni“ přímo od multi-user.target
, spíše než prostřednictvím zprostředkovatelského cíle jako služby.
Lidé OpenVPN dnes poskytnout odlišné [email protected]
a [email protected]
šablony, nadále nedodávejte generátor ani openvpn.service
target-as-a-service a očekáváte, že explicitně povolíte a zakážete [email protected]name
a [email protected]name
s běžnými systemd mechanismy, jak to udělat. Soubor *.conf
soubory byly přesunuty z /etc/openvpn
a do /etc/openvpn/client
a /etc/openvpn/server
.
Další čtení
- Jonathan de Boyne Pollard (2016). “Chybí systémové vyhledávací cesty z
systemd.unit
manuálová stránka“. Errata prosystemd
doco . Často uváděné odpovědi. - https://unix.stackexchange.com/a/233581/5132
- https://unix.stackexchange.com/a/206490/5132
- „konfigurace služby systemd“. OpenVPN . Arch wiki.
- „konfigurace služby systemd“. OpenVPN . Parabola wiki.
- Christian Hesse (2016-12-30). Aktualizace OpenVPN 2.4.0 vyžaduje zásah správce . Arch novinky.
- https://askubuntu.com/a/640026/43344