我在禁用 NetworkManager 且未安装其他旧脚本的 RHEL7 上。意思是,我仍然使用:
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/route-eth0
/etc/sysconfig/network-scripts/rule-eth0
我的文件有问题rule-eth0
。它加载得很好,每当我修改它并运行$ systemctl restart networking
时,新的路由规则就会被拾取并在$ ip rule
. 如果我使用ifup-routes
.
但是,如果我修改rule-eth0
文件,之前的旧规则不会被删除。不过会添加新的。我试过在network-scripts
目录中运行脚本,除非我一个接一个地手动删除,否则它们会留在那里。
我求助于使用:
$ ip rule flush
这删除了所有规则,包括main
anddefault
表的规则,这意味着任何 SSH 连接都会丢失。
我的困惑
如果我删除所有rule
文件并重新启动机器,我会恢复默认路由。通过运行$ ip rules
是看到:
0: from all lookup local
32766 from all lookup main
32767 from all lookup default
问题 如何在不重新启动的情况下获得相同的行为?
如何在运行后恢复这些默认规则$ ip rule flush
,而无需重新启动机器或手动指定规则?
这些规则是内核在初始化初始网络堆栈(或新的网络命名空间)时设置的默认规则,无需任何用户空间帮助。
这是相关的内核源代码摘录:
0x7FFE = 32766
0x7FFF = 32767
等等
要解决最后一个问题:有一个脚本。甚至
ip rule save
/ip rule restore
用处非常有限。您不应该在ip rule flush
没有选择器的情况下运行以将其范围限制为预期的规则子集。例如:ip rule flush lookup 1000
将删除任何匹配的条目(甚至部分)lookup 1000
。