开机后自动在VPN连接上启动systemd套接字

开机后自动在VPN连接上启动systemd套接字

我的一台服务器设置为在启动后使用 systemd 服务自动连接到 VPN。现在我想在此 VPN 连接上托管一个 systemd 套接字。并且该套接字在启动后和 VPN 连接建立后也应该可用。

这是我当前的application.socket文件:

[Unit]
Description=My Socket on VPN

[Socket]
# 192.168.2.2 is the IP from inside the VPN
ListenStream=192.168.2.2:1234
Accept=true

[Install]
WantedBy=sockets.target

问题是套接字启动得太早:网络接口尚未启动,因此 systemd 决定无法启动我的套接字。

如果我随后通过 ssh 进入服务器并快速执行操作,systemctl restart application.socket它将正常启动,因为网络接口已启动并准备就绪。但我不想每次重新启动服务器时都通过 ssh 进入服务器。如何确保我的套接字仅在接口启动、准备就绪并配置好后才启动?我也不想监听0.0.0.0然后阻止所有不需要的设备iptables

到目前为止我尝试过的事情:

  • After=vpn-application.service-> 什么都没做。看来该设备仍然无法绑定
  • After=sys-devices-virtual-net-<VPN Device>.device-> 该设备当时不存在,systemd 想要启动我的套接字。因此失败并显示x/RESOURCE

我如何让我的套接字等待 VPN 启动?

答案1

您想在启动后以及每次 VPN 启动后启动套接字吗?还是仅在启动时 VPN 也启动时才启动一次?由于After=sys-devices-virtual-net-<VPN Device>.device套接字将安排在设备启动后启动,但如果没有要求,这可能永远不会发生,您可能需要添加Wants=vpn-application.service sys-devices-virtual-net-<VPN Device>.device

另一方面,如果您想在启动时设置套接字,但也希望在启动 VPN 后设置套接字,那么您可以添加Wants=application.socketBefore=application.socketvpn-application.service

您可能还想添加network-online.targetWants和。Aftervpn-application.service

https://blog.bjoern-ruberg.de/2015/10/15/start-a-service-after-openvpn-connection-has-been-established-using-systemd/

相关内容