systemd 单元基于我连接的网络进行条件执行(VPN 问题)

systemd 单元基于我连接的网络进行条件执行(VPN 问题)

来自systemd.unit 手册页,我知道诸如 ConditionPathExists=、ConditionPathIsSymbolicLink= 等条件。但是,我似乎需要的是一个依赖于特定默认网关地址的条件。

具体来说,我想nordvpnd.service仅在未连接到办公网络时启动(和套接字)。我的 NordVPN 服务设置为autostartwith killswitch enabled,这是我希望它在除办公室之外的任何地方都可以使用的方式。

在办公室时,我总是有一个特定的默认网关 IP 地址。看来我可以利用这个事实在单元文件中实现一个条件nordvpnd.service。谁能建议如何实现这一目标?

[Unit]
Description=NordVPN Daemon
Requires=nordvpnd.socket
After=network-online.target
Condition=??????

[Service]
ExecStart=/usr/sbin/nordvpnd
NonBlocking=true
KillMode=process
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target

答案1

我可以建议一些东西,请检查这是否有用:

您可以做的是获取默认网关并设置环境变量,然后使用 ConditionEnvironment 来实现。

以下是可以获取网关IP并设置环境变量的命令:

gw=$(ip r | grep default | grep -oE "([[:digit:]]+\.)+{3}[[:digit:]]")

if [ "$gw" == "192.168.X.X" ]; then export officeNetwork=1; else export officeNetwork=0; fi

这里将192.168.XX替换为你办公室的默认网关IP

希望能帮助到你

相关内容