由于traceroute只能診斷UDP通信的包路由,不能確定TCP通信的實(shí)際路由(可能變換),因此編寫了本文。為方便描述,下面的IP、MAC和端口均為示例,實(shí)際診斷中可更換為具體的值
1. 如何判斷客戶端到服務(wù)器的TCP包,是否經(jīng)過了網(wǎng)關(guān)
在客戶端執(zhí)行 tcpdump -i eno16777728 ether dst b0:b9:8a:69:65:3e and host 192.168.0.26 and tcp port 80 抓取經(jīng)過網(wǎng)關(guān)且往返服務(wù)器的TCP端口為80的包
eno16777728 接口名稱;ether 以太網(wǎng)鏈路,dst 目標(biāo)(src表示源);b0:b9:8a:69:65:3e 網(wǎng)關(guān)MAC地址;192.168.0.26 服務(wù)器IP地址,80 監(jiān)聽端口
輸出結(jié)果分析
● 有輸出,則表示經(jīng)過了網(wǎng)關(guān)
● 有部分輸出而TCP通信還在進(jìn)行,則表示先前的包經(jīng)過了網(wǎng)關(guān),后來路由表項(xiàng)緩存被重定向更新,沒經(jīng)過網(wǎng)關(guān)了
● 不斷輸出,則表示一直經(jīng)過網(wǎng)關(guān)
2. 如何判斷路由表項(xiàng)緩存被重定向更新
在客戶端執(zhí)行 tcpdump -i eno16777728 src 192.168.1.1 and dst 192.168.1.45 and icmp 抓取來自網(wǎng)關(guān)和到達(dá)客戶端的所有icmp包
192.168.1.1 網(wǎng)關(guān)IP;192.168.1.45 客戶端(出口)IP
輸出結(jié)果分析
● 沒有輸出,則表示沒有收到rerdirect包,路由表項(xiàng)緩存不變
● 有輸出類似ICMP redirect 192.168.0.26 to host 192.168.0.26(前面一個(gè)IP表示到達(dá)服務(wù)器的直接路由IP,后一個(gè)表示服務(wù)器IP)
● 則表示收到了ICMP重定向包,內(nèi)核會(huì)更新路由表項(xiàng)及緩存網(wǎng)關(guān)為192.168.0.26,下次通信時(shí)就直接發(fā)往192.168.0.26了
3. 如何控制接收ICMP重定向
● echo 0 | tee /proc/sys/net/ipv4/conf/*/accept_redirects 禁止所有網(wǎng)卡接收,可避免路由表項(xiàng)緩存被修改
● echo 1 | tee /proc/sys/net/ipv4/conf/*/accept_redirects 啟用所有網(wǎng)卡接收ICMP重定向消息
4. 查看、刷新路由表項(xiàng)緩存
● ip route get 192.168.0.26 可以從輸出中看到通住目標(biāo)IP的實(shí)際路由
● ip route flush cache 清空路由表項(xiàng)緩存,下次通信時(shí)內(nèi)核會(huì)查main表(即命令route輸出的表)以確定路由
posted on 2017-12-29 17:24
春秋十二月 閱讀(1991)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
Network