我想在系统启动时使用 systemd 服务文件添加静态路由。
我在单独的 192.168 C 类网络上有一个 DMZ 网络,可通过我的默认网关访问。我还使用 OpenVPN 来路由笔记本电脑的互联网流量,该流量由 NetworkManager 与我的 Wi-Fi 连接自动连接。问题是,当 OpenVPN 连接并向路由表添加新的默认路由时,DMZ 不再可达。显然,我可以通过手动添加静态路由来克服这个问题,但我希望在启动时或 OpenVPN 连接时自动执行此操作。
我尝试创建一个 systemd 服务文件来在启动时执行此操作。服务文件尝试执行ip route add
,因此需要在网络启动后运行:
#01-static-route.service
[Unit]
Description=Static route to the DMZ
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
# Add a route to the DMZ network since the vpn will change our default gateway
ExecStart=/usr/bin/ip route add 192.168.0.0/24 via 192.168.1.1
[Install]
WantedBy=multi-user.target
我已启用 NetworkManager-wait-online.service,如下所示:
#systemctl enable NetworkManager-wait-online.service
系统启动时,服务文件失败并systemctl status 01-static-route.service
返回以下信息:
# systemctl status 01-static-route.service
● 01-static-route.service - Static route to the DMZ
Loaded: loaded (/etc/systemd/system/01-static-route.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2015-04-13 16:40:11 BST; 28s ago
Process: 558 ExecStart=/usr/bin/ip route add 192.168.0.0/24 via 192.168.1.1 (code=exited, status=2)
Main PID: 558 (code=exited, status=2)
Apr 13 16:40:11 archlap ip[558]: RTNETLINK answers: Network is unreachable
Apr 13 16:40:11 archlap systemd[1]: 01-static-route.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Apr 13 16:40:11 archlap systemd[1]: Failed to start Static route to the DMZ.
Apr 13 16:40:11 archlap systemd[1]: Unit 01-static-route.service entered failed state.
Apr 13 16:40:11 archlap systemd[1]: 01-static-route.service failed.
我认为该ip route add
命令失败是因为运行时没有网络连接。
有人可以解释使用 systemd (或任何其他方法)添加持久静态路由来解决此问题的正确过程吗?