上周在维护测试环境时遇到一个诡异的网络问题:某服务器(主机A)出现能ping通外网IP(如8.8.8.8),但无法ping通域名 的异常现象。其他配置未变更,仅网关从172.19.0.150
改为172.19.0.179
。这种“能通IP不通域名”的症状,直觉指向DNS解析链路异常,但具体问题点需要一步步拆解。
毫无疑问,这个问题肯定是 DNS 的问题,但是 DNS 哪出了问题,却非常诡异。
更换另一个网关,网络恢复正常了,说明是网关的问题,那么问题就来了,一般来说 DNS 解析是跟网关没有关系的,网关有问题的话应该 Ping 不通 IP,只更换网关恢复正常说明 DNS 配置又没问题,这就是诡异的点:网关跟DNS到底有什么关系。
ChatGPT这么说:
查看当前DNS服务器
bashcat /etc/resolv.conf
# 输出nameserver 8.8.8.8(已手动设置公共DNS)
✅ 确认主机已正确配置DNS服务器(8.8.8.8),但问题依旧存在,说明配置无错,需排查网络通路。
测试DNS服务器连通性
bashping 8.8.8.8 # 通!说明ICMP协议可达
traceroute 8.8.8.8 # 路由路径正常,无明显丢包
✅ 物理链路和基础路由正常,但域名解析仍失败,问题聚焦到DNS协议层面。
手动触发解析请求
bashnslookup baidu.com # 超时无响应
dig baidu.com # 同样卡住,无返回结果
❌ 直接证据:DNS查询未成功获取响应,说明请求可能未送达或被拦截。
执行抓包命令后再次发起解析请求:
bashsudo tcpdump -i enp2s0f0 port 53 -n
关键输出分析:
A? baidu.com
),但无任何响应包。dig +tcp baidu.com
),抓包显示三次握手成功,且DNS服务器返回了解析结果(包含baidu.com的IP地址)。🔍 核心结论:
由于故障网关为iKuai(爱快)路由器,结合其功能特性进一步排查:
登录iKuai管理后台(http://172.19.0.179
),进入 安全设置 > 防火墙规则,发现一条针对UDP协议、目标端口53的出站拦截规则。该规则默认阻断内网主机通过UDP协议访问外部DNS服务器,以防止DNS放大攻击,但误判导致正常解析请求被拦截。
修改规则:将拦截动作改为“允许”,并指定目标端口为53(UDP)。
重启网络服务:确保规则生效。
复测解析:
bashdig baidu.com # 秒级返回解析结果,问题解决!
网关切换
→ 触发UDP 53端口拦截规则
→ DNS查询请求(UDP)无法回包
→ 域名解析失败
。
关键点:UDP与TCP协议的差异化处理——多数防火墙默认允许TCP 80/443等常用端口,但可能对UDP协议实施更严格的策略。
ping/traceroute/dig/tcpdump
等工具,通过抓包获取原始流量数据,避免主观臆断。当前网络环境中,DNS常成为安全策略的“敏感点”:
应对建议:
dig +tcp
)或部署DNS加密工具(如cloudflared);这次故障排查看似围绕“DNS解析”,实则涉及网络协议特性、设备策略配置、安全规则适配等多个技术维度。作为运维人员,保持“用数据说话”的习惯(如抓包分析),比依赖经验判断更能快速定位问题。下次遇到类似“能通IP不通服务”的场景,不妨从协议层开始抽丝剥茧,往往能柳暗花明。
本文作者:司小远
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!