Networking
路由規則的配置從哪裡來?
我在禁用 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
,而無需重新啟動機器或手動指定規則?
這些規則是核心在初始化初始網路堆棧(或新的網路命名空間)時設置的預設規則,無需任何使用者空間幫助。
這是相關的核心原始碼摘錄:
static int fib_default_rules_init(struct fib_rules_ops *ops) { int err; err = fib_default_rule_add(ops, 0, RT_TABLE_LOCAL, 0); if (err < 0) return err; err = fib_default_rule_add(ops, 0x7FFE, RT_TABLE_MAIN, 0); if (err < 0) return err; err = fib_default_rule_add(ops, 0x7FFF, RT_TABLE_DEFAULT, 0); if (err < 0) return err; return 0; }
0x7FFE = 32766
0x7FFF = 32767
等等
要解決最後一個問題:有一個腳本。甚至
ip rule save
/ip rule restore
用處非常有限。您不應該在ip rule flush
沒有選擇器的情況下執行以將其範圍限制為預期的規則子集。例如:ip rule flush lookup 1000
將刪除任何匹配的條目(甚至部分)lookup 1000
。