今天碰到一个ICMP Redirect引起的故障案例,很有意思,觉得有必要记录一下。
先看一下拓扑图,左边的是现有网络,与右边的ICMP Redirect原理图对比。
Host A想访问Host B,C,D,
ICMP重定向的原理是,当路由器发现主机对某个目的ip有更好的路由策略,就使用ICMP redirect通知主机,以提高带宽利用率,达到节省资源的目的。
在本案例中,主机A访问主机B,C,D的时候,会到达与OLT直连的路由器。由于主机B,C,D通过OLT二层互联到路由器,对于路由器来说,OLT的作用就类似一台交换机。
从主机A来的数据包到路由器之后,首先到达路由器上B,C,D主机的网关,然后通过网关到达主机B,C,D。由于ICMP redirect的存在,路由器发现针对主机B,C,D 有更优的路径,可以不通过网关,这时候就发送ICMP重定向报文修改下一条地址,发送的arp包修改相应的mac地址。
这时候问题就来了,由于olt安全特性,二层其实是不通的,olt会把相关的数据包丢弃,导致访问失败。
解决方法很简单,在网关所在端口上取消icmp重定向,华为路由器上命令是undo icmp redirect send。
详细原理可参考思科网站:https://www.cisco.com/c/en/us/support/docs/ios-nx-os-software/nx-os-software/213841-understanding-icmp-redirect-messages.html