ICMP路由重定向期骗引发的网络故障1
ICMP 路由重定向期骗引发的网络故障 ,图2这里显示一切配置正常了。原来这WINDOWS 的DNS 解析机制是先查看本地路由表,如果没有数据包转发的路径了,就跳转到设定的
ICMP 路由重定向期骗引发的网络故障
图2
这里显示一切配置正常了。原来这WINDOWS 的DNS 解析机制是先查看本地路由表,如果没有数据包转发的路径了,就跳转到设定的网关。在本案中,因为它发现了转发的路径了,就不会跳转到默认的网关了。既然如此,清除那两条记录不就行了吗?我将本地网卡禁用后再启用它(当然,也可以在本地用ROUTE 命令完成了),再查看本地路由(如下图3),一切正常了。
图3
这个时候网页访问一切正常了。
故障分析:本地路由表中怎么会自动更新记录呢,这让人联想到了ARP 表的更新,原理应该是一样了。ICMP 重定向报文是ICMP 控制报文中的一种。在特定的情况下,当路由器检测到一台机器使用非优化路由的时候,它会向该主机发送一个ICMP 重定向报文,请求主机改变路由。路由器也会把初始数据报向它的目的地转发。
但显然在本案中,不应该是路由器发送的ICMP 重定向报文了。初步估计是本地局域网中有计算机故意发出ICMP 重定向数据包了。这时用户反映,又打不开网页了,我直接打开了本地路由表,可想而知又是如图1所示,本地更新了两条路由了。后来根据捕获交换机端口数据包定位到了那台故障机器,将它重新安装系统,网络一切正常。
我们有必要对ICMP 重定向有一个全面的认识; 这种机制的设计初衷都是为了方便网络访问,提升网络访问性能,就跟ARP 更新机制一样,但前提是不人为发欺骗数据包。但是往往事与愿违,最初的优化设计成了现在的缺陷。
现在我们关心下不同系统对ICMP 重定向报文的处理
主机和路由器对于重定向报文有不同的处理原则。
路由器一般忽略ICMP 重定向报文。
,而主机对于重定向报文的感知取决于操作系统。
以Windows 为例,对WINDOWS7以前的操作系统,对于网关返回的ICMP 重定向报文,Windows 会在主机的路由表中添加一项主机路由。那么以后对于这个目的地址数据报,主机会将其直接送往重定向所指示的路由器。但是到了WINDOWS7尽管收到重定向数据包,但没有更新了。
同时,有的操作系统对于重定向报文是不做任何处理而直接丢弃(虽然也同样经由网络层向上递交),比如Sun 的某些系统。
实验:我试着在路由器上人为增加了一个静态路由,分别在WINXP 和WIN7上抓取数据包,结果发现都收到了ICMP 重定向数据包(如下图4),但只有在WINXP 上的路由表更新了,看来WIN7还是在不断进步优化中了。。。
图4
ICMP重定向的利与弊
ICMP重定向使得客户端的管理工作大大减少,使得对于主机的路由功能要求大大降低。该功能把所有的负担推向路由器学习。但是与此同时ICMP 重定向也有很多弊端。就重定向本身的机制来说,ICMP 重定向增加了网络报文流量,因为主机的报文总是要在网关的直连网段上重复传输。那么更进一步如果主机的操作系统支持重定向(比如Windows )会如何?主机这样可能会引起两点显著问题。
其一是引起性能问题,例如:有一台大型的服务器,要处理数十个子网下的数千台主机的业务。如果要支持重定向,那么服务器将会维护一个庞大的充满主机路由的路由表。这是一笔很大的开销。可能很大程度上降低服务性能,甚至导致网络服务瘫痪。
其二是可能埋下安全隐患。利用这点可以进行攻击和网络窃听。如果目某主机A 支持ICMP 重定向,那么主机B 发一个IMCP 重定向给它,以后它发出的所有到指定地址的报文都会转发主机B ,这样B 就可以达到窃听目的了。当然,拿windows 操作系统来说,它会对ICMP 报文进行检查,如果这个重定向不是网关发送的,会被直接丢弃。不过伪造一个网关的数据包很容易。另外,如果刻意伪造许多虚假的ICMP 重定向报文,主机路由表就可能被改的乱七八糟。 ICMP 重定向的避免与消除
针对上述ICMP 重定向引发的问题,我们可以采用一些手段来避免或补救。我们讨论的前提条件是不改变网络拓扑。
1、在路由器上关掉ICMP 重定向数据包发送功能。
2、在主机上配置拦截ICMP 重定向数据包.
,3、以上对一般用户显然难度太大了,本人在实践中摸索到了一种捷径了,就是客户机上要设定固定IP ,在DNS 中设置为默认网关即可(如下图5)。这样即使本地路由更新了路由记录,它也不会理会,因为它直接去网关上找路由了,有人担心网关的路由路径也被更改了,其实重定向数据包必须是不同网段才会发生了,所以大可放心,这样可确保万无一失。
图5