我正在努力学习Linux路由表,却遇到了一些麻烦。在下面的例子中,我不确定发生了什么。我的理解是0.0.0.0意味着,对于第1行和第2行,网络之外的任何数据包都要查看默认网关10.0.0.1。
Destination Gateway Genmask Flags MSS Window irtt Iface
10.0.0.0 0.0.0.0 255.255.255.0 U 40 0 0 eth1
10.1.1.0 0.0.0.0 255.255.255.0 U 40 0 0 eth0
0.0.0.0 10.0.0.1 0.0.0.0 UG 40 0 0 eth1所以我的问题是,哪个界面更接近互联网?我不确定数据包是否立即离开eth0和eth1将数据包发送到网关10.0.0.1,或者eth0和eth1是否都将数据包路由到10.0.0.1用于互联网。
发布于 2014-04-07 14:19:49
你不是完全正确的。前两行告诉您,没有连接网络10.0.0.0/24和10.1.1.0/24的网关,但可以分别通过各自的接口eth1和eth0访问它们。因此,如果要将数据包发送到10.0.0.1,则通过eth1发送数据包,通过eth0发送到10.1.1.47的数据包。
要到达Internet,目标地址将不在网络10.0.0.0/24或10.1.1.0/24中,因此最后一行将匹配(0.0.0.0/0),内核将知道必须将数据包发送到给定网关(10.0.0.1)。将作出一个依赖的路由决定,以决定如何到达该网关,正如前面提到的,通过接口eth1发送数据包将使这成为可能。
发布于 2014-04-07 19:30:22
所以我的问题是,哪个界面更接近互联网?
从1918年起,没有一个- 10.0.0.0/8不适合全球范围内的路由。但是,第三个条目指出,10.0.0.1是默认网关(除了10.0.0.0/24和10.1.1.0/24的目的地外,0.0.0.0/0的流量都在那里),后者可能有一条通向Internet的路由(使用NAT)。在这种情况下,eth1“更接近”互联网(在适当的意义上)。
发布于 2016-11-17 16:19:46
当数据包被发送到IP堆栈时,驱动程序将在路由表中搜索与目标IP地址最匹配的路由。它通过执行在每个路由中定义的二进制和目的地以及在数据包中定义的目的地来实现这一点。无论哪种结果与数据包中定义的目的地最接近,都是驱动程序使用的路由。如果为该路由定义了默认网关,则将数据包发送到网关。如果没有为该路由定义网关,则假定目的地位于本地网络上,并且包被直接发送到目的地。
因此,目的地地址为10.1.1.67的数据包将匹配路由10.1.1.0/24,并将离开由第二条路由配置的端口eth0。目标地址为10.0.0.84的数据包将在第一条路由配置的eth1上离开。任何其他目的地地址将只匹配第三条路线,并将通过eth1离开,前往网关。
没有办法说哪一条路线是“更近”的互联网,因为这些路线没有处理公开路由地址,而是这些都是A类私人地址。A、B和C类地址范围保留给私人使用,通常不会路由到internet。在到达互联网之前,这些数据包完全有可能通过其他网络路由,或者根本就不可能到达互联网。
https://unix.stackexchange.com/questions/123549
复制相似问题