终端是Linux终端跟踪路由时中间一段没显示下一跳,组网是终端到核心交换机-------防火墙-------汇聚交换机-----接入交换机下面的三层口出去,防火墙做了策略nat,安全策略放通了trust到untrust端口是any,防火墙2台做了主备,汇聚交换机2台做的m-lag双活网关,全部设备都开启了ip ttl-expires enable和ip unreachables enable,跟踪路由时显示是地址是先核心到防火墙的下一跳然后直接就显示出最终的目的地址了,而且跟踪路由时显示的是核心到防火墙的下一跳地址是实地址不是防火墙vrrp出来的虚地址,防火墙和汇聚之间是二层口接的再写静态路由指向网关,为什么会不显示汇聚那一跳如何能解决不显示的问题
不是流量跳过汇聚,是 防火墙做完 SNAT 之后,TTL 超时报文被 NAT 会话劫持 + 二层直连 + M‑LAG 双活网关的回程不对称 + Linux 默认 UDP traceroute,汇聚三层虽然转发报文,但它的 TTL‑expire 回包根本回不到 Linux 终端;同时 ICMP 错误报文源地址是防火墙入接口实 IP,不会用 VRRP 虚地址回复。
那这个要怎么解决
防火墙的路由:ip‑route‑static 目标网段 掩码 汇聚M‑LAG‑虚IP
❗报文到达汇聚 M‑LAG 设备之后,才第一次做三层转发,TTL 才减 1。 Linux traceroute 探测包 TTL 到达防火墙的时候:TTL 还没耗尽;报文二层透传给到汇聚,在汇聚才发生 TTL=0、产生 ICMP TTL‑exceeded。 但是这个 ICMP 超时报文的源 IP 是汇聚 M‑LAG 的 VLANIF 虚 IP,回程报文经过防火墙 NAT 会话;防火墙的安全策略 / 状态检测会把该 ICMP 错误报文丢弃,Linux 终端收不到汇聚返回的 TTL 超时应答,所以汇聚这一跳直接消失,直接显示目的地址H3C。
解释为什么显示防火墙的实 IP:防火墙本身也会处理部分 TTL 耗尽的探测包,返回自身物理接口真实 IP,而不是 VRRP 虚 IP(VRRP 虚 IP 只用于网关接收报文,ICMP 错误报文使用出接口实 IP 回复)。
防火墙→汇聚方向二层,汇聚返回防火墙方向同样二层;ICMP TTL‑exceeded 回包经过防火墙 NAT 会话,ICMP Type‑11(TTL 超时错误报文)被防火墙状态会话机制丢弃。
虽然 trust‑untrust 策略配置 any 放行业务,但 V7 防火墙 NAT 环境下,ICMP 错误报文需要专门放行,业务 permit any 不等于允许 ICMP 错误报文穿越 NAT 会话回源端。
注意:交换机侧
ip ttl‑expires enable已经打开,汇聚 M‑LAG 设备内部已经生成 ICMP 超时报文,但是回包无法穿过防火墙回到 Linux 终端,不是交换机没有发送。
traceroute ‑T 目的IP,部分场景可以规避 UDP 探测包 NAT‑ICMP 错误丢弃问题。防火墙与汇聚 M‑LAG 之间不要二层 VLAN 对接,改为三层互联(子接口 / 三层路由口):
优点:彻底解决隐身跳问题;缺点:需要改动现有二层对接组网。
现有二层对接保留,防火墙上配置专门放行 ICMP 错误报文(ICMP type11),使汇聚 M‑LAG 发出的 TTL‑exceeded 报文,经过防火墙 NAT 之后可以回送到 Linux 源终端。
nat alg icmp‑error,用于处理 NAT 之后 ICMP 错误报文转换;system‑view
nat alg icmp‑error enable
⚠️该方案有局限:M‑LAG 哈希负载分担场景下,仍然有部分探测报文会出现跳丢失;不能 100% 保证每次 traceroute 都完整显示全部跳数,业务完全不受影响,仅排障工具体验改善。
该现象只影响 traceroute 工具显示,业务 ping、转发、NAT、HA、M‑LAG 双活业务全部正常,不影响现网业务运行,不建议为 tracert 显示完整跳数大规模改动现网架构。
总结:
nat alg icmp‑error enable放行 ICMP 差错报文。按方案b的配置改还是不行
按方案b的配置改还是不行
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
那这个要怎么解决