我的一台服务器设置为在启动后使用 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.socket
和Before=application.socket
到vpn-application.service
。
您可能还想添加network-online.target
到Wants
和。After
vpn-application.service