我有一台 Linux 计算机和一个eth0
具有 2 个 IP 的接口:
ip : 10.10.1.1
mask : 255.128.0.0
gw : 0.0.0.0
ip : 10.22.32.1
mask : 255.255.255.0
gw : 10.22.32.254
我想为网络 10.22.0.0/16 添加一个特定网关,因此我执行以下操作:
route add -net 10.22.0.0/16 gw 10.22.32.254 dev eth0
这不起作用,我再也无法访问 10.10.0.0 上的机器。以下是路由表:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 eth0
10.0.0.0 0.0.0.0 255.128.0.0 U 1 0 0 eth0
10.22.0.0 10.22.32.254 255.255.0.0 UG 0 0 0 eth0
10.22.32.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
它是否会失败,因为 10.22.0.0/16 是 10.10.0.0/9 的子部分?
答案1
网络布局存在几个问题:
- 正如 Stache 所指出的,10.22.0.0/16 的假定路由器需要在子网“10.10.1.1/9”中有一个可访问的接口(见下文)。事实上,它只能从同一子网内部访问,这是没有意义的。
- “10.10.1.1/9”子网实际上是 10.0.0.0/9 子网,包含 10.22.0.0/16 子网,这可能就是所有混乱的根源。
- 您提供的第一个信息是您使用 10.22.32.0/24子网 - 您也需要理清这一点。您可以对路由进行超网和子网划分,但需要确保它们能够组合在一起。
您需要整理子网地址和掩码。如果您使用 10.10.0.0/16您可以使用 10.22.0.0/16 作为不同的子网,但您需要一个带有接口的路由器在每个子网内。
答案2
计算机使用目标 IP 地址来决定选择哪条路由。您的命令表示,对于与 匹配的目标 IP 地址10.22.0.0/16
,您应该将其直接发送到10.22.32.254
进行进一步路由。根据您的路由表,任何不匹配10.x
或 的169.x
内容都将直接放在线路上,而不会传递到路由器机器。
这看起来是倒退的。如果您可以10.22.332.254
发送这些数据包,那么您可能已经有一个匹配的接口,10.22.0.0/16
这意味着这些数据包可以直接在线路上传输,而无需传递到网关/路由器。您可能想要的是匹配的任何东西都10.22.x.x
直接在线路上传输,而其他任何东西(例如互联网)都会在以下位置传递到路由器10.22.32.254
:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.22.32.254 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
10.22.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0