🚀 内网跨网段通信异常排查与解决实战总结
最近在工作中遇到了一次跨网段通信异常问题,经过排查、分析和处理,不仅解决了问题,还复盘了不少网络基础知识。特此记录。
🧩 1. 问题背景
在内网环境中,我们有如下网络结构:
- A 服务器:
172.21.2.1
- B 服务器:
172.21.2.6
- 客户端 C:
192.168.20.163
现象:
- C 机器需要访问 B 服务器的某个服务,但通信不通(ping 不通,业务请求失败)。
- 确认了防火墙关闭,服务已启动,网络线正常。
🧰 2. 问题排查过程
2.1 基本连通性测试
- 从 C 机器 ping B:失败 ❌
- 从 C ping A:失败 ❌
- 从 B ping C:失败 ❌
2.2 检查路由表
分别在三台机器上执行 ip route
查看路由信息,发现:
A 服务器(172.21.2.1):
1 | 192.168.0.0/16 dev br-6497c3bc74fb |
B 服务器(172.21.2.6):
1 | 192.168.0.0/16 dev br-64a151128058 |
C 机器(192.168.20.163):
1 | 192.168.20.0/24 dev wlp3s0 |
2.3 发现问题
- B 服务器有一条大网段路由
192.168.0.0/16
,覆盖了 C 所在的192.168.20.0/24
网段。 - 这种情况下,B 收到发往
192.168.20.*
的流量时,会直接走自己的br-*
网桥,不会通过默认网关或物理网卡发出去,导致通信失败。
🔍 3. 原理知识总结
3.1 路由匹配原则
Linux 路由表根据 “最长前缀匹配” 原则确定优先级:
192.168.20.0/24
优先级高于192.168.0.0/16
- 但如果只存在
192.168.0.0/16
路由时,所有192.168.*.*
都会走它。
3.2 路由冲突的典型表现
- 访问特定 IP 段流量被错误吸收或丢弃。
- 发往目标 IP 的流量进入错误的网桥或接口。
- ping 不通、连接失败、抓包无数据。
3.3 常用排查工具
工具 | 用途 |
---|---|
ping |
测试网络连通性 |
ip route |
查看路由表 |
ip a |
查看 IP 和网卡状态 |
traceroute |
跟踪网络路径 |
arp -a |
查看 ARP 映射表 |
tcpdump |
抓包分析流量 |
🛠️ 4. 解决方案
4.1 临时删除冲突路由
1 | ip route del 192.168.0.0/16 |
4.2 添加正确路由(如果需要)
1 | ip route add 192.168.20.0/24 via <正确网关> |
4.3 永久修复
根据系统,考虑写入对应配置文件防止重启丢失:
- RHEL/CentOS:
/etc/sysconfig/network-scripts/
- Ubuntu:
/etc/netplan/
- 或者在 Docker、K8s 等容器环境下检查网络插件配置。
🛡️ 5. 防止类似问题的思考
- 控制网段大小,避免使用超大网段。
- 定期巡检路由表,发现异常及时修正。
- 规范容器网络,避免与内网重叠的网段。
- 设计合理的内网 IP 规划。
📜 6. 总结
这次问题看似简单的“网络不通”,实际上是由隐藏在主机内部的路由冲突引起的。
通过逐步排查路由表和分析网络原理,快速定位并修复了问题,也复习了不少网络基础。
✅ 建议定期检查服务器的路由表,保持内网环境稳定。
- 本文作者: Linking
- 本文链接: https://linking.fun/2024/03/11/network-connect-error-route-conflict/
- 版权声明: 版权所有,转载请注明出处!