Linux
Linux 行為:沒有網關的網路路由
我遇到了一個 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 來查找它。