【问题标题】:Start OpenVPN client by a service - TLS error通过服务启动 OpenVPN 客户端 - TLS 错误
【发布时间】:2018-10-12 09:14:20
【问题描述】:

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

[Unit]
Description=...
After=network.target

[Service]
Type=simple
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/client.conf
ExecPreStart=/usr/sbin/rngd /dev/urandom
ExecPreStart=/etc/openvpn/update-resolv-conf

[Install]
WantedBy=multi-user.target

我的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/urandom 中创建更多熵并执行/etc/openvpn/update-resolv-conf(如您在服务中看到的那样)。没有任何帮助。

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

编辑/更新:

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

【问题讨论】:

  • 我不确定它是否与您的问题有关,但该指令称为ExecStartPre=,而不是ExecPreStart=

标签: service vpn systemd openvpn


【解决方案1】:

network.target 之后订购您的服务不足以确保互联网连接。您需要在network-online.target 之后订购您的服务并使其依赖它:

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

更多信息请参见NetworkTarget on fd.o

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 2021-08-27
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 2014-11-17
    • 1970-01-01
    相关资源
    最近更新 更多