查看: 140|回覆: 1

[运维] ICMP重定向报文导致的问题与分析

[複製鏈接]

6

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2008-6-17
發表於 2023-8-26 00:00:00 | 顯示全部樓層 |閲讀模式

前段时间, 业务方反馈集群内有一台服务器慢请求(>1s)记录比其他台多一倍。查找了下原因,发现这台服务器的网关配置成同网段内其他服务器IP上了,导致ICMP重定向发生,后面将路由更正后,慢请求缓解很多了。 便于分析,画了个简单拓扑图如下所示:

过程分析如下:
1). server2如果要与internet通讯,首先是要把报文发送给server1的,因为server2的网关指向server1的。
2). server1收到报文并检查它的路由表,发现router是发送改报文的下一跳。当它把报文发送给router时,server1检测到这个报文的发送出去的接口与接收到的接口是相同的,这样ICMP重定向就触发了。
3). server1认为server2应该把默认路由指向router,所以就发送ICMP重定向报文给server2,告诉它以后把报文发送给router。

server1报文如下:

server2报文如下:


ICMP重定向报文类型有:

代码		描述
0			网络重定向
1			主机重定向
2			服务类型和网络重定向
3			服务类型和主机重定向

ICMP重定向报文的接收者必须查看三个IP 地址
1). 导致重定向的IP地址,即ICMP重定向报文的数据位于IP数据报的首部
2). 发送重定向报文的路由器的IP地址,包含重定向信息的IP数据报中的源地址
3). 应该采用的路由器IP地址, 在ICMP报文中的4~7字节

发生ICMP重定向报文的必要条件:
1). 出接口必须等于入接口
2). 用于向外传送数据报的路由不能被ICMP重定向报文创建或修改过, 而且不能是路由器的默认路由
3). 数据报不能用源站选路来转发
4). 内核必须配置成可以发送重定向报文

linux禁止ICMP重定向报文方法:

# vim /etc/sysctl.conf
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.eth1.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
# sysctl -p

 

回覆

使用道具 舉報

0

主題

2092

回帖

1萬

積分

琼殿精英

金币
10581
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-10-11
發表於 2026-6-10 12:29:00 | 顯示全部樓層
回复:

感谢楼主的分享!这个案例很有代表性,ICMP重定向确实是生产环境中容易被忽略但影响很大的问题。

补充几点体会:

[1]. 楼主的排查思路很清晰,从"慢请求多一倍"这个异常指标入手,逐步定位到网关配置问题,最后通过抓包分析确认ICMP重定向。这个排查路径值得学习。

[2]. 关于ICMP重定向,个人建议在生产环境中最好直接禁用,因为:
- 很多攻击会利用ICMP重定向来实施中间人攻击
- 网络环境复杂时,重定向可能导致路由环路或不可预期的行为
- 现代网络中,管理员通常已经规划好正确的路由,重定向功能意义不大

[3]. 除了楼主的禁用方法,还可以考虑:
  1. net.ipv4.conf.all.send_redirects = 0
複製代碼
同时关闭发送和接收,更安全一些。

另外,楼主的拓扑图画得很清晰,对理解问题很有帮助!希望以后能看到更多这样的实战案例分享。

顶一下!
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

圆梦公社,专注于为全球华人提供纯粹技术交流的地方,请勿发布任何政治及违法的言论。如有相关侵权、举报、投诉及建议等,请发 E-mail:dzh188@hotmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部