不確定是什麼啟動了這個 systemd 單元文件
因此,我一直在查看基於 Debian 9 的伺服器上的 openvpn 配置,並在 openvpn 守護程序的 systemd 單元文件中發現了一些我無法解釋的內容。守護程序本身正在啟動並正常工作,但我不知道為什麼……讓我解釋一下:)
所以我已經安裝了 openvpn 並在**/etc/openvpn/server.conf**文件中進行了正確的配置。到目前為止沒有任何問題。
但是,顯然有兩個 systemd 單元正在為 openvpn 執行,即openvpn.service和openvpn@server.service。後者似乎是真正接受傳入的 vpn 連接的那個,前者似乎根本沒有做太多事情。它顯然只是為了啟動後者,我想……
檢查**/etc/systemd/system/multi-user.target.wants/**目錄中的 openvpn 相關文件僅顯示 openvpn.service 文件,該文件的源是 /lib/systemd/system 中類似命名文件的符號連結。這個文件的內容是:
# 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
嗯不錯。所以這只執行/bin/true。那麼究竟是什麼啟動了openvpn@server守護程序呢?我知道這個單元文件是**/lib/systemd/openvpn@.service但我在我的系統上找不到任何線索來確切執行這個單元文件。(我希望在/etc/systemd/system** somwhere下找到一個符號連結,但沒有。)這個文件的內容是:
[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
所以這個單元文件比 openvpn.service 文件有更多的內容。但是什麼開始呢?我注意到上面文件中的PartOf=openvpn.service部分,但是在手冊頁中查找它的含義並沒有讓我變得更聰明。
我會繼續搜尋,因為我只想知道是什麼讓這件事發生了變化!
如果您對這個特定單元文件的執行方式或啟動它有任何線索,請告訴我:)
你需要知道兩件事:
- systemd 保存單元文件的還有幾個未記錄的目錄。
- Debian 和 Ubuntu 提供了一個生成器,它將“想要”的符號連結放入其中一個未記錄的目錄
/lib/systemd/system-generators/openvpn-generator
中,每個.*.conf``/etc/openvpn
符號連結導致
openvpn.service
表現得像一個目標並“想要”你所有的各種模板實例;正如服務單元開頭的評論所解釋的那樣。請注意,Debian 和 Ubuntu 與 OpenVPN 人員自己為 systemd 提供的內容不一致,後者用於 Arch、CentOS、Fedora 等。Debian 和 Ubuntu 完全取代了 OpenVPN 本身為這一切提供的東西,用他們自己的 systemd 東西。因此,至少在閱讀 doco 時要小心 doco 假設您擁有的操作系統。
OpenVPN 人過去提供
openvpn@.service
模板單元,但沒有生成器,也沒有openvpn.service
目標即服務。必須使用普通的 systemd 機制顯式地啟用和禁用自己,並且它們是由直接“需要”的,而不是由中間的目標即服務。openvpn@*name*``multi-user.target
現在的 OpenVPN 人員提供不同的
openvpn-service@.service
模板openvpn-client@.service
,繼續不提供生成器或目標即服務,並openvpn.service
希望您使用普通的 systemd 機制顯式啟用和禁用您自己。這些文件也已移出和移入and 。openvpn-service@*name*``openvpn-client@*name*``*.conf``/etc/openvpn``/etc/openvpn/client``/etc/openvpn/server
進一步閱讀
- 喬納森·德博因·波拉德 (2016)。“手冊頁中缺少系統搜尋路徑
systemd.unit
”。 doco**勘誤表systemd
。經常給出答案。- https://unix.stackexchange.com/a/233581/5132
- https://unix.stackexchange.com/a/206490/5132
- “系統服務配置”。開放式VPN。拱維基。
- “系統服務配置”。開放式VPN。拋物線維基。
- 克里斯蒂安·黑塞 (2016-12-30)。OpenVPN 2.4.0 更新需要管理互動。拱門新聞。
- https://askubuntu.com/a/640026/43344