Service 通过服务启动OpenVPN客户端-TLS错误

Service 通过服务启动OpenVPN客户端-TLS错误,service,vpn,systemd,openvpn,Service,Vpn,Systemd,Openvpn,我想通过服务启动OpenVPN客户端。所以我写了这个服务(位于/etc/systemd/system/): 我的client.conf如下所示: client dev-tun remote ... proto udp resolv-retry infinite persist-tun persist-key # Cert files config... # Cypher and auth config ... 现在我遇到的问题是,当服务启动OpenVPN时出现错误: TLS Error: T

我想通过服务启动OpenVPN客户端。所以我写了这个服务(位于
/etc/systemd/system/
):

我的
client.conf
如下所示:

client
dev-tun
remote ...
proto udp
resolv-retry infinite
persist-tun
persist-key

# Cert files config...
# Cypher and auth config ...
现在我遇到的问题是,当服务启动OpenVPN时出现错误:

TLS Error: TLS key negotiation failed to oocur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed
SIGUSR1[soft,tls-error] received, process restarting
有趣的事实是,在我重新启动服务后(也在系统启动后立即发生),错误并没有发生。此错误仅在首次启动服务时发生。 因此,我在
ExecPreStart
中体验了
sleep
(最长1分钟),或者在
/dev/uradom
中创建更多熵,并执行
/etc/openvpn/update resolv conf
(如您在服务中看到的)。没什么帮助

原因是什么?我如何解决这个问题?我不想编写只在启动后重新启动服务一次的脚本

编辑/更新:


我发现只有当OpenVPN客户端由系统本身启动时才会发生错误。我指的是服务或crontab。只有当我自己(作为
root
用户)在bash中启动该服务时,它才能工作。

网络之后订购您的服务。target
不足以确保internet连接。您需要在
网络联机后订购服务。瞄准
并使其依赖于此:

After=network-online.target
Wants=network-online.target

有关更多信息,请参阅。

我不确定它是否与您的问题有关,但该指令名为
ExecStartPre=
,而不是
ExecPreStart=
After=network-online.target
Wants=network-online.target