![启动时添加 IP 路由和规则](https://linux22.com/image/715386/%E5%90%AF%E5%8A%A8%E6%97%B6%E6%B7%BB%E5%8A%A0%20IP%20%E8%B7%AF%E7%94%B1%E5%92%8C%E8%A7%84%E5%88%99.png)
我目前正在通过 路由一些标记的数据包eth0
。但是,每次系统重新启动时,我都必须应用路由规则。我总是必须重新输入的两个命令是
ip rule add fwmark 3 table 3
ip route add default via 192.168.0.1 table 3
网关是eth0
我192.168.0.1
尝试在和中放置这些命令/etc/rc.local
,/etc/network/interfaces
但在这两种情况下,我仍然必须手动运行它们。有人对每次启动时在哪里/如何运行这些命令有什么建议吗?
答案1
您/etc/network/interfaces
仅可以使用文件来执行此操作。
您只需将add route
命令放在所需的界面下,并在该命令前面放置post-up
或pre-down
关键字。
post-up
关键字会在您启动该接口后将该路由添加到路由表,而pre-down
关键字会在您关闭该接口之前将该路由删除。
例如:要在接口
上添加静态路由,文件应该是eth0
/etc/network/interfaces
auto eth0
iface eth0 inet static
...
...
post-up ip route replace default via 192.168.0.1
pre-down ip route delete default via 192.168.0.1 || true
答案2
将您的命令放入 shell 脚本(例如 /usr/local/sbin/myrouting)中,并使其可执行。
您可以在 /etc/crontab 或根 crontab 中使用 cron 和 @reboot 目标,例如 /etc/crontab
@reboot root /usr/local/sbin/myrouting
或 root crontab
@reboot /usr/local/sbin/myrouting
您也可以使用 systemd 来完成此操作。
创建 systemd 单元文件 /etc/systemd/system/myrouting.service
[Unit]
after=network
[Service]
ExecStart=/usr/local/sbin/myrouting
[Install]
WantedBy=default.target
然后启用它
systemctl enable myrouying.service
Created symlink /etc/systemd/system/default.target.wants/myrouting.service → /etc/systemd/system/myrouting.service.
答案3
您还可以将这些命令添加到 /etc/rc.local,并且不要忘记使其可执行:
touch stagingfile.txt
echo "ip rule add fwmark 3 table 3" >> stagingfile.txt
echo "ip route add default via 192.168.0.1 table 3" >> stagingfile.txt
sudo mv stagingfile.txt /etc/rc.local
chmod +x /etc/rc.local
应该管用