客户反应使用联通3G观看浙江手机台的视频直播和点播速度都很慢,首先想做一下简单的路由跟踪一下联通线路。但是第一步就卡住了,发现输入tracert –d 124.160.31.113 时出现了如下图:
本文档不讨论后续的解决过程,主要解决跟踪时出现*的问题,以及深层次的讨论出现问题的原因。
一、首先说明一下网络环境
Host4--------->FWSM------>MSFC----->F5--------->Internet
二、解决过程
1、在host4上抓包,抓取traert 的过程
发现只有最后一条有回包,那中间节点的包是哪里丢了呢?
2、检查FWSM上的ACL是否阻止了ICMP数据包通通过。排除了ACL这个原因,这时大意了,没有查看防火墙的日志,就直接排除了问题出在FWSM上。
3、MSFC上只转发,没有做任何限制,直接排除问题。
4、这时以为问题出现在F5上,其实不是,看tracert时抓的包
发现各节点有针对echo request 回time exceed 包。那问题也不出在F5。
5、这下纠结了,吃过中饭时,想到已对F5,FWSM的日志监控。回来后马上看日志,如下图
问题找到 no matching session ,发现是FWSM丢弃了各个节点响应的包。但是我明明已请允许ICMP所有类型数据包通过,怎么还会丢弃呢?
Cisco官方是这样解释的:
ACL allows only these return messages through the firewall when an inside user pings to an outside host. The
other types of ICMP status messages might be hostile and the firewall blocks all other ICMP messages.
解决方法是:
Another option is to configure ICMP inspection. This allows a trusted IP address to traverse the firewall and
allows replies back to the trusted address only. This way, hosts on all inside interfaces can ping hosts on the
outside and the firewall allows the replies to return. This also gives you the advantage of monitoring the
ICMP traffic that traverses the firewall. In this example, icmp inspection is added to the default global
inspection policy.
For example:
policy?map global_policy
class inspection_default
inspect icmp
6、解决方法很简单
只需要输入一条命令:
接着再测试就OK了。
在排查过程中在系统中使用tracertoute 进行跟踪除最后一跳显示*,前几跳全有显示,如下图:
正好与tracert相反,这是为什么呢?
看看抓到的包吧
显示节点是因为traceroute 默认是使用UDP协议发送包,这样就在FWSM存在session,所以防火墙通话通过。最后一跳不通是对端开了防火墙不允许UDP协议数据包通过~
当然traceroute 也可以使用ICMP和TCP协议的包来追踪的。参数如下:
Traceroute原理:
traceroute是利用ICMP包的TTL域来探测的。首先,traceroute首先发送一个TTL为1的ipdatagram(实际上是3个ip包),当包到达第一个路由器时,路由器将TTL减1,当TTL小于1时,路由器会把这个ip datagram丢掉,然后回送一个icmp time exceed的消息,traceroute受到这个消息后就知道这个路由器在存在于路径上,接着tracerout再发送一个ttl为2的ip datagram,发现第二个路由器……………….一直到ip datagram到达目的地址。traceroute怎么知道所发的datagram到达目的地址了?很简单,traceroute所发送的包是一个udp包,并且使用的端口是一个一般应用程序都不会用到的端口(一般在30000以上),所以当发送的datagram到达目的地址时,目的地址会回送一个icmp port unreachable的消息,traceroute受到这个消息后就知道datagram已经发送到目的地址。
参考:
Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(fiel d)。首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节 的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由 器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会 将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器 存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路 由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重 复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不 会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?
Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),所以当此UDP datagram 到达目的地后该 主机会送回一个「ICMP port unreachable」的消息,而当traceroute 收到这个消息时 ,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon 程式 。
Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析。每次 ,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间。 Traceroute 有一个固定的时间等待响应(ICMP TTL到期消息)。如果这个时间过了,它将打印出一系列的*号表明:在这个路径上,这个设备不能在给定的时间内发出ICMP TTL到期消息的响应。然后,Traceroute给TTL记数器加1,继续进行。
ICMP主要类型
Echo Request和Reply(类型8和0):
允许Echo Request消息出站以便于内部用户能够PING一个远程主机。阻止入站Echo Request和出站Echo Reply可以防止外部网络的主机对内部网络进行扫描。如果您使用了位于外部网络的监视器来监视内部网络,就应该只允许来自于特定外部IP的Echo Request进入您的网络。限制ICMP Echo包的大小可以防止“Ping Floods”攻击,并且可以阻止那些利用Echo Request和Reply来“偷运”数据通过防火墙的木马程序。
Destination unreachable (类型3):
允许其入站以便于内部网用户可以使用traceroute。需要注意的是,有些攻击者可以使用它来进行针对会话的DoS攻击,如果您曾经历过类似的攻击,也可以阻止它。阻止出站的ICMP Destination unreachable消息,因为它可能会泄漏内部网络的结构。不过有一个例外,对于那些允许外部网络通过TCP访问的内部主机(如位于DMZ区的Web 服务器)发出的Destination unreachable,则应该允许它通过。为了能够支持“Path MTU Discovery”,您应该允许出站的“Packet Too Big”消息(类型3,代码4)到达那些主机。
Source quench(类型4):
阻止其入站,因为它可以作为一种DoS攻击,能够降低发送者的发送速度。允许其出站以便于内部主机能够控制发送端发送数据的速度。有些防火墙会忽略所有直接发送到防火墙端口的Source Quench消息,以防止针对于防火墙的DoS攻击。
Redirect(类型5,9,10):
Redirect、Router announcement、 Router selection(类型5,9,10):这些消息都存在潜在危险,因为它们可以用来把数据重定向到攻击者的机器。这些消息都应该被阻止。
TTL exceeded(类型11):
允许其进站以便于内部用户可以使用traceroute。“firewalking”使用很低的TTL值来对网络进行扫描,甚至可以通过防火墙对内网进行扫描,所以应该禁止其出站。一些防火墙可以阻止TTL值小于设定值的数据包进入防火墙。
Parameter problem(类型12):
禁止其入站和出站。通过使用一个能够进行数据包一致性检查的防火墙,错误和恶意的数据包都会被阻塞。