随笔-156  评论-223  文章-30  trackbacks-0
由于traceroute只能诊断UDP通信的包路由,不能确定TCP通信的实际路由(可能变换),因此编写了本文。为方便描述,下面的IP、MAC和端口均为示例,实际诊断中可更换为具体的值

1. 如何判断客户端到服务器的TCP包,是否经过了网关
     在客户端执行 tcpdump -i eno16777728 ether dst b0:b9:8a:69:65:3e and host 192.168.0.26 and tcp port 80  抓取经过网关且往返服务器的TCP端口为80的包
     eno16777728 接口名称;ether 以太网链路,dst 目标(src表示源);b0:b9:8a:69:65:3e 网关MAC地址;192.168.0.26 服务器IP地址,80 监听端口

     输出结果分析
       ● 有输出,则表示经过了网关
       ● 有部分输出而TCP通信还在进行,则表示先前的包经过了网关,后来路由表项缓存被重定向更新,没经过网关了
       ● 不断输出,则表示一直经过网关

2. 如何判断路由表项缓存被重定向更新
     在客户端执行 tcpdump -i eno16777728 src 192.168.1.1 and dst 192.168.1.45 and icmp  抓取来自网关和到达客户端的所有icmp包
     192.168.1.1 网关IP;192.168.1.45 客户端(出口)IP

     输出结果分析
       ● 没有输出,则表示没有收到rerdirect包,路由表项缓存不变
       ● 有输出类似ICMP redirect 192.168.0.26 to host 192.168.0.26(前面一个IP表示到达服务器的直接路由IP,后一个表示服务器IP)
       ● 则表示收到了ICMP重定向包,内核会更新路由表项及缓存网关为192.168.0.26,下次通信时就直接发往192.168.0.26了

3. 如何控制接收ICMP重定向
      ● echo 0 | tee /proc/sys/net/ipv4/conf/*/accept_redirects    禁止所有网卡接收,可避免路由表项缓存被修改
      ● echo 1 | tee /proc/sys/net/ipv4/conf/*/accept_redirects    启用所有网卡接收ICMP重定向消息

4. 查看、刷新路由表项缓存
      ● ip route get 192.168.0.26    可以从输出中看到通住目标IP的实际路由
      ● ip route flush cache             清空路由表项缓存,下次通信时内核会查main表(即命令route输出的表)以确定路由
posted on 2017-12-29 17:24 春秋十二月 阅读(1954) 评论(0)  编辑 收藏 引用 所属分类: Network

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理