问题的关键在于,直接路由和静态路由的工作机制有所不同,特别是在检查下一跳 IP 是否在同一网络中的处理上。
- 直接路由(Direct Route)
在 22.0.0.0/16
的路由条目中:
1
| 22.0.0.0/16 Direct 0 0 D 22.0.0.1 Ethernet0/0/1
|
这是一个直接连接的路由,意味着 22.0.0.0/16
是一个路由器直接可以通过接口 Ethernet0/0/1
访问的网络。22.0.0.1
是路由器在 22.0.0.0/16
网络中的本地 IP 地址,直接绑定到该接口。这是路由器的本地接口地址,因此可以直接与该接口关联起来。
- 静态路由(Static Route)
当你试图添加静态路由时:
1
| ip route-static 20.0.2.0 255.255.255.0 22.0.0.1
|
你收到错误信息 Error: The next-hop address is invalid.
,这是因为路由器要求静态路由的下一跳必须是可达的,并且在逻辑上存在于路由器的一个已知网络中。
原因:
路由器检查下一跳: 当你配置静态路由时,路由器会检查指定的下一跳 IP 地址(22.0.0.1
)是否在本地网络的子网中。如果你将 22.0.0.1
作为下一跳,路由器会认为你是想将流量转发到另一个设备(比如另一个路由器),而不是本地设备。但是 22.0.0.1
是该路由器的本地地址,而不是一个远程设备的地址。
路由器会认为下一跳应该是连接到该网络的另一个设备的 IP 地址,而不是自己接口的 IP 地址。因此它报错说”下一跳地址无效”。
静态路由的下一跳应该是远程设备: 静态路由要求下一跳 IP 地址是一个有效的、在相同子网内的设备(如另一个路由器或服务器),以便能够将流量转发到该设备。如果你将路由器自己的 IP 地址作为下一跳,它会认为这是无效的,因为没有真正的转发过程。
为什么直接路由可以工作?
22.0.0.1
是一个直接连接到 Ethernet0/0/1
接口的 IP 地址,表示路由器自身的 IP。因此,对于直接路由条目,路由器将这个网络 22.0.0.0/16
视为本地网络的一部分,所有发往该网络的流量都将通过 Ethernet0/0/1
发送出去,而不需要下一跳。
解决方案
如果你想配置静态路由,下一跳地址应该是路由器在 22.0.0.0/16
子网中的其他设备(非本地设备)的 IP 地址。你可以改为使用网络中另一个实际设备的 IP,例如:
1
| ip route-static 20.0.2.0 255.255.255.0 22.0.0.2
|
这样,22.0.0.2
是路由器可以通过 Ethernet0/0/1
接口到达的另一个设备的 IP 地址,它能够接收数据包并进行进一步的转发。
总结
- 直接路由:路由器将直接连接到接口的网络视为本地网络,不需要通过下一跳进行转发。
- 静态路由:要求下一跳 IP 地址是远程设备的 IP,而不能是路由器自身的 IP。