重疊前綴的原始靜態度量
有人可以澄清一下 Centos 8 在以下情況下如何設置路由指標。
我在系統上有兩個 vlan,每個 vlan 在 /etc/sysconfig/network-scripts/route-vlanXX 中定義了一個匹配的路由前綴。ip route show 給出以下內容:
[user@hostname ~]$ ip r show to match 192.168.56.252 default via 10.210.104.1 dev net proto dhcp metric 350 192.168.56.0/24 via 192.168.1.1 dev vlan23 proto static metric 416 192.168.56.0/24 via 192.168.1.33 dev vlan24 proto static metric 417
值 416 和 417 是如何得出的?它不是我明確設置的。
proto static metric
似乎與metric
設定明顯不同。除了一個是自動生成的,另一個是明確設置的之外,還有其他區別嗎?
在 CentOS8 中,NetworkManager 或多或少是強制性的,它是介面的實際管理器,將配置轉換為它自己的本機配置。
那里或多或少解決了您的問題的文件(來自 RHEL8 的文件,今天仍然是 CentOS8 的上游):
20.8。NetworkManager 如何管理多個預設網關
雖然本文件僅描述了多個網關(即多個預設路由又名 0.0.0.0/0 路由),但 NetworkManager 在內部為其配置的每個介面分配了一個指標。然後將此度量應用於具有此介面的路由。
理由是你不能在同一個路由表(通常是main)中添加兩個相同的路由,如果像度量這樣的東西不能區分它們(即使核心添加的自動 LAN 路由可以像這樣存在,它們也不會工作反正)。如果手動配置兩次到 192.168.56.0/24 的路由,這可以防止出現錯誤。度量標準必須不同(否則必須使用策略路由和多個路由表)。
因此,當沒有明確設置時,NetworManager 會為用於介面的指標做出一些選擇和假設。雖然這個指標是 NM 內部每個介面的,但沒有實際的介面指標,只有路由指標(以及用於路由的地址
proto kernel
指標)。
- 沒有明確配置指標。VLAN 介面的基本度量值為 400
如果您設置了沒有指標值的預設網關,NetworkManager 會根據介面類型自動設置指標值。
為此,NetworkManager 將此網路類型的預設值分配給第一個啟動的連接
- 已經有一個指標為 400 的先前介面。選擇下一個:401
並按照它們被啟動的順序為相同類型的每個其他連接設置一個遞增的值。例如,如果存在兩個具有預設網關的乙太網連接,NetworkManager 會在通往您首先啟動的連接的預設網關的路由上設置度量標準 100。對於第二個連接,NetworkManager 設置為 101。
- 沖洗,重複。直到達到 vlan23 和 vlan24 的指標 416 和 417
僅通過它的度量,我可以得出介面
net
是一個團隊介面。所以最後,這個設置在
/etc/sysconfig/network-scripts/route-vlan23
:192.168.56.0/24 via 192.168.1.1 dev vlan23
不是簡單地用類似的東西解釋:
ip route add $(cat /etc/sysconfig/network-scripts/route-vlan23)
這不會得到任何指標,但正在通過 NetworkManager 為介面添加先前確定的指標。
否則,以相同方式手動添加的第二條沒有度量標準的路由將失敗:
ip route add $(cat /etc/sysconfig/network-scripts/route-vlan23) ip route add $(cat /etc/sysconfig/network-scripts/route-vlan24) RTNETLINK answers: File exists
至於
proto
它是定義在 0 和 255 之間的任何值/etc/iproute2/rt_protos
或其等效符號。核心使用設置的 LAN 路由proto kernel
。工具通常static
在設置值時選擇(顯然 DHCP 選擇dhcp
)。我可以想像一個路由守護程序會更容易地跟踪哪些動態路由由它自己(和相關協議)處理並且不會觸及
static
路由。例如:
ip route show proto ospf