openvpn 的 systemd 单元:如何使用以 .ovpn 结尾的配置文件?

openvpn 的 systemd 单元:如何使用以 .ovpn 结尾的配置文件?

默认情况下,systemd openvpn 客户端单元文件假定所有配置文件都以.conf.我的许多配置文件以.ovpn.在我的环境中,更改文件扩展名是不可取的。

默认的 openvpn 客户端单元文件是/usr/lib/systemd/system/[email protected]

[Unit]
Description=OpenVPN tunnel for %I
After=syslog.target network-online.target
Wants=network-online.target
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn/client
ExecStart=/usr/bin/openvpn --suppress-timestamps --nobind --config %i.conf
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process

[Install]
WantedBy=multi-user.target

我是否有理由不应该ExecStart像这样编辑该文件并通过删除 .conf 扩展名来更改行?

ExecStart=/usr/bin/openvpn --suppress-timestamps --nobind --config %i

在这种情况下,我会将带有扩展名的完整配置文件名传递给 systemctl。就 systemd 而言,包含扩展会破坏任何内容吗?是否还有其他原因导致无法使用文件扩展名?

线路相关问题ExecStart

通常,我的 openvpn 命令行包含--daemon.通过 systemd 启动时不需要吗?我发现上面没有包含它。如果我希望它作为守护进程运行,我需要包含它吗?

另外,为什么要--suppress-timestamps包含在内?目前,我在日志/日志中没有得到重复的时间戳。如果我通过 systemd 启动,情况会改变吗?

以下是我建议的(未经测试的)单元文件:

[Unit]
Description=OpenVPN tunnel for %i
After=syslog.target network-online.target
StartLimitIntervalSec=0
Wants=network-online.target

[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn/client
ExecStart=/usr/bin/openvpn --suppress-timestamps --nobind --daemon --config %i
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

答案1

它应该在没有扩展名的情况下工作,它只是单元文件建立的约定。systemctl不抱怨单位名称中的点。

systemd 单元通常不会对它们启动的命令进行守护进程,这使得 systemd 更容易跟踪正在运行的进程。

--suppress-timestamps可能是因为journald无论如何都会增加时间。两者都尝试一下,看看有什么区别。

相关内容