不确定是什么启动了这个 systemd 单元文件

Gil*_*dor 4 debian systemd openvpn

因此,我一直在查看基于 Debian 9 的服务器上的 openvpn 配置,发现了一些我无法在 openvpn 守护程序的 systemd 单元文件中解释的内容。守护进程本身正在启动并正常工作,但我不知道为什么......让我解释一下:)

所以我已经安装了 openvpn 并在/etc/openvpn/server.conf文件中进行了正确的配置。到目前为止没有任何问题。

但是,显然有两个 systemd 单元正在为 openvpn 运行,即openvpn.serviceopenvpn@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
Run Code Online (Sandbox Code Playgroud)

嗯不错。所以这只运行/bin/true。那么究竟是什么启动了openvpn@server守护进程呢?我知道这个单元文件是/lib/systemd/openvpn@.service但我在我的系统上找不到任何线索来确切地运行这个单元文件。(我期待在/etc/systemd/system下找到一个符号链接,但没有。)这个文件的内容是:

[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
Run Code Online (Sandbox Code Playgroud)

所以这个单元文件比 openvpn.service 文件有更多的内容。但是是什么开始呢?我注意到上面文件中的PartOf=openvpn.service部分,但是在手册页中查找它的含义并没有让我变得更聪明。

我会继续搜索,因为我只想知道是什么让这件事变得有趣!

如果您有任何关于此特定单元文件如何运行或启动它的线索的任何线索,请告诉我:)

Jde*_*eBP 7

你需要知道两件事:

  • 还有几个未记录的目录,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@namemulti-user.target

OpenVPN的人现在提供不同openvpn-service@.serviceopenvpn-client@.service模板,继续不提供发电机或openvpn.service目标作为一种服务,并期望你明确地启用和禁用,并有这样做的普通systemd机制自己。该文件已搬出,进入和也。openvpn-service@nameopenvpn-client@name*.conf/etc/openvpn/etc/openvpn/client/etc/openvpn/server

进一步阅读