Linux

Linux 行為:沒有網關的網路路由

  • May 28, 2020

我遇到了一個 Linux 系統,其中配置了一些通過乙太網介面的路由而沒有指定網關。我一直認為指定介面而不是網關的路由僅用於點對點連結。這在乙太網介面的情況下沒有意義,因為乙太網不是點對點介質。

當通過未指定網關的乙太網介面匹配路由時,Linux 如何傳遞數據包?它是否從介面廣播目標 IP 地址的 ARP 請求?(並且未指定的網關必須充當 ARP 代理?)在具有多個路由表的基於策略的路由的情況下,行為是否有所不同?(下面的第二個例子)

以下是此類路線的範例:

[Gaia]# ip route list
10.25.35.0/24 dev eth3  proto routed
...

[Gaia]# cat /proc/net/route
Iface   Destination     Gateway         Flags   RefCnt  Use     Metric  Mask            MTU     Window  IRTT
eth3    0023190A        00000000        0011    0       0       0       00FFFFFF        0       0       0
...

[Gaia]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.25.35.0      0.0.0.0         255.255.255.0   UD    0      0        0 eth3
...

此類 PBR 路由的範例:

[Gaia]# ip route list table 2
default dev eth7  proto routed
...

系統執行 Check Point Gaia R77.30,它基於 RHEL 5.2 和 Linux 核心 2.6.18。

您的假設是正確的(您可以使用 輕鬆檢查tcpdump -i eth7 -n)。我從來沒有見過default,只有網路,但這可能沒有什麼區別。目標 IP 地址的 ARP 請求在該介面上廣播。

策略路由只是選擇路由表,不影響沒有定義下一跳的問題。

如果您有一個與其他網路沒有連接的隔離網路,那麼您不需要網關。主機直接相互通信,並使用 ARP(或鄰居發現,在 IPv6 的情況下)找到彼此。

即使您有網關,本地連接也會這樣處理。如果您在網路外進行通信,同樣的機制也可用於在網路上定位網關。主機需要知道網關主機的 MAC 地址才能通過它發送傳出數據包,因此它使用 ARP/ND 來查找它。

引用自:https://unix.stackexchange.com/questions/589528