我遇到了一个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
...
该系统运行基于RHEL5.2和Linux内核2.6.18的检查点GaiaR77.30。
发布于 2020-05-28 16:11:35
你的假设是正确的(你可以很容易地用tcpdump -i eth7 -n
来验证)。我从来没有在default
上看到过这种情况,只在网络上看到过,但这可能没有什么区别。对目标IP地址的ARP请求在该接口上广播。
策略路由只选择路由表,不影响未定义下一跳的问题。
发布于 2020-05-28 16:18:26
如果您有一个孤立的网络,没有连接到其他网络,那么您不需要一个网关。主机之间直接通信,并使用ARP (或邻居发现,在IPv6情况下)找到对方。
即使您有网关,也会像这样处理本地连接。如果您在网络之外通信,也使用相同的机制来定位网络上的网关。一个主机需要知道网关主机的MAC地址才能通过它发送出一个数据包,所以它使用ARP/ND来查找它。
发布于 2020-05-28 16:40:18
每个以太网网络接口将有一个路由指定到网段,该网段本身是本地的。没有网关,您应该始终能够联系本地网段上的主机,并且每个网卡连接到一个本地网络。
要联系本地网络以外的主机,您需要通过网关路由您的流量。在网关(路由器),目标IP本身是本地的,或者被转发到另一个路由器,等等。
当数据包通过没有指定网关的以太网接口与路由匹配时,Linux如何传送数据包?
你的问题我有点不清楚:
定义网关是为了启用对主机非本地数据包的路由。
https://unix.stackexchange.com/questions/589528
复制相似问题