Systemd 无法在 lxd 管理的 16.04 容器中启动 openvpn

Chr*_*vid 32 openvpn systemd lxd

openvpn使用单元文件中的确切ExecStart=调用从命令行开始正常systemd

/usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf /run/openvpn/server.pid
Run Code Online (Sandbox Code Playgroud)

ps ax 确认进程在那里:

1634 ?        Ss     0:00 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/
Run Code Online (Sandbox Code Playgroud)

systemctl start openvpn@server没有成功:

? openvpn@server.service - OpenVPN connection to server
   Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2016-03-17 09:54:52 UTC; 4s ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
  Process: 1679 ExecStart=/usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/s
 Main PID: 819 (code=exited, status=1/FAILURE)

Mar 17 09:54:52 vpn ovpn-server[1679]:   push_ifconfig_ipv6_remote = ::
Mar 17 09:54:52 vpn ovpn-server[1679]:   enable_c2c = DISABLED
Mar 17 09:54:52 vpn ovpn-server[1679]:   duplicate_cn = DISABLED
Mar 17 09:54:52 vpn ovpn-server[1679]:   cf_max = 0
Mar 17 09:54:52 vpn ovpn-server[1679]:   cf_per = 0
Mar 17 09:54:52 vpn ovpn-server[1679]:   max_clients = 1024
Mar 17 09:54:52 vpn systemd[1]: openvpn@server.service: Control process exited, code=exited status=1
Mar 17 09:54:52 vpn systemd[1]: Failed to start OpenVPN connection to server.
Mar 17 09:54:52 vpn systemd[1]: openvpn@server.service: Unit entered failed state.
Mar 17 09:54:52 vpn systemd[1]: openvpn@server.service: Failed with result 'exit-code'.
Run Code Online (Sandbox Code Playgroud)

我解释journalctl | grep ovpn-server | tail -n 100说它没有分叉:

Mar 17 09:57:44 vpn ovpn-server[1693]: OpenVPN 2.3.10 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Feb  2 2016
Mar 17 09:57:44 vpn ovpn-server[1693]: library versions: OpenSSL 1.0.2g  1 Mar 2016, LZO 2.08
Mar 17 09:57:44 vpn ovpn-server[1693]: daemon() failed or unsupported: Resource temporarily unavailable (errno=11)
Mar 17 09:57:44 vpn ovpn-server[1693]: Exiting due to fatal error
Run Code Online (Sandbox Code Playgroud)

Iai*_*ain 53

我也一直在寻找解决这个问题的方法。我已经找到工作是注释掉LimitNPROC的行/lib/systemd/system/openvpn@.service

systemctl daemon-reload在那之后不要忘记跑。

  • 谢谢,这也解决了我的问题!在它生效之前,我确实必须运行“systemctl daemon-reload”。 (9认同)
  • 我拉了一个 15.10 lxd 实例并开始比较 systemd 配置。LimitNPROC 起初并不可疑,但它在旧配置中不存在,所以我尝试删除它并解决了它。到那时我已经把头发扯了一天了。 (6认同)
  • 谢谢!您是如何诊断问题的?即使知道答案,在谷歌上搜索 `LimitNPROC lxd` 也不会立即返回对我有帮助的命中。 (3认同)
  • 有人将此报告为 https://github.com/lxc/lxd/issues/3336 (2认同)

por*_*bas 19

最好避免修改源自系统包的 systemd 单元。只需使用 systemd 覆盖插件:

systemctl edit openvpn@
Run Code Online (Sandbox Code Playgroud)

openvpn服务器的单元名称可能不同,例如。对于包版本2.4.5-xenial0,它将是

systemctl edit openvpn-server@
Run Code Online (Sandbox Code Playgroud)

然后放入编辑器:

[Service]
LimitNPROC=infinity
Run Code Online (Sandbox Code Playgroud)

它应该创建/etc/systemd/system/openvpn@.service.d/override.conf文件(或类似的对应单元名称)。要激活它,您可能需要重新加载 systemd

systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)

如果启动单元成功,LimitNPROC=infinity则返回并将限制更改为比默认值更高的值10。该限制对于防止服务消耗所有可能导致拒绝服务的可用 pid 非常重要。

积分:
覆盖:https : //unix.stackexchange.com/a/398541/218321
“无限限制”:https : //unix.stackexchange.com/a/345596/218321

  • 这也修复了 `openvz` 容器内的 `openvpn` (3认同)