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
...

该系统运行的是基于 RHEL 5.2、Linux 内核 2.6.18 的 Check Point Gaia R77.30。

答案1

您的假设是正确的(您可以使用 轻松检查tcpdump -i eth7 -n)。我从来没有见过这种情况default,只见过网络,但这可能没有什么区别。针对目标 IP 地址的 ARP 请求在该接口上广播。

策略路由只是选择路由表,不会影响未定义下一跳的问题。

答案2

如果您有一个与其他网络没有连接的隔离网络,则不需要网关。主机彼此直接通信,并使用 ARP(或邻居发现,在 IPv6 的情况下)找到彼此。

本地连接的处理方式如下,即使您有一个网关。如果您在网络外部进行通信,则还可以使用相同的机制来定位网络上的网关。主机需要知道网关主机的 MAC 地址才能通过它发送传出数据包,因此它使用 ARP/ND 来查找它。

答案3

每个以太网网络接口都会有一条指定到其本地网段的路由。如果没有网关,您应该始终能够联系本地网段上的主机,并且每个网卡都连接到本地网络。

要联系本地网络之外的主机,您需要通过网关路由流量。在网关(路由器)处,目标 IP 要么是其本地 IP,要么转发到另一个路由器,依此类推。

当数据包通过未指定网关的以太网接口匹配路由时,Linux 如何传递数据包?

你的问题对我来说有点不清楚:

  • 您的意思是数据包的目的地位于接口的本地网络内(您确实说过路由“匹配”)?然后,正如您所建议的,它使用 ARP 来定位设备并向其发出以太网帧 - 在这种情况下不涉及路由,您可以直接联系主机,因为它是您本地的;
  • 您的意思是目的地不在本地段上?然后路由不会发生,数据包被丢弃,因为您的路由表无法计算出需要将数据包发送到的位置(无论您拥有哪个接口或本地网络);

网关被定义为启用非主机本地数据包的路由。

相关内容