我对 Linux 中的路由表有疑问,该路由表由“ip route show”命令显示。我根据此链接了解“src”属性是什么样的。 http://linux-ip.net/html/routing-saddr-selection.html
我的问题有以下两个。
- 人们是否有任何原因不使用默认网关的“src”属性,或者明确将其用于其他路由,如下面的链接所示。
- 我的理解有什么问题吗?
我认为显式使用“src”属性可能会导致无法通信。我创建了一个如下图所示的网络,并在“router1”中创建了一个路由表,如下所示。
default via 192.168.0.2 dev router1-router2 src 192.168.1.1
192.168.0.0/24 dev router1-router2 proto kernel scope link src 192.168.0.1
192.168.1.0/24 dev router1-host1 proto kernel scope link src 192.168.1.1
我本以为“router1”使用“192.168.1.1”,但无法到达“router2”,因为“src”IP 地址不在同一个 LAN 中。但是它能够通信。为什么?
答案1
我认为显式使用“src”属性可能会导致无法通信。
也许吧,但不是在正确设置的网络中。
该src
属性(在 Netlink 中称为 RTA_PREFSRC)是一个暗示对于从本机建立的连接,要选择哪个源 IP 地址。它实际上并没有影响然而,路由 – 如果数据包匹配“默认”路由,即使“src”属性不同,它们仍将使用“默认”路由。因此,唯一会破坏某些内容的情况是当您尝试与主机通信时没有回程路线到您选择的源地址。
(什么会影响路由的from
属性又名 RTA_SRC – 在路由中添加“from”参数做使其除了通常的目的地之外还匹配源地址。但是,在 Linux 上,这仅针对 IPv6 实现,不适用于 IPv4。)
我本以为“router1”使用“192.168.1.1”,但无法到达“router2”,因为“src”IP 地址不在同一个 LAN 中。但是它能够通信。为什么?
因为你有路线一路定义告诉系统将数据包转发到“router2”然后返回“192.168.1.1”。