首先确认服务器可以解析域名,使用nslookup或dig测试:nslookup www.example.com 或 dig +short www.example.com。检查 /etc/resolv.conf(或 systemd-resolved 配置)中是否配置了正确的DNS服务器,如 8.8.8.8、1.1.1.1。如果解析到IP但浏览器仍报错,尝试直接访问IP以判断是否为DNS问题。同时检查防火墙(iptables/nftables)与云平台安全组是否放行 UDP/TCP 53 端口,必要时在服务器上执行 tcpdump -n -i eth0 port 53 捕获DNS请求,判断是否被丢弃或重写。若使用内部DNS或自建解析服务,确认转发目标与递归策略是否正确,必要时临时切换到公共DNS以验证。
首先使用 traceroute 或 mtr(例如 traceroute -n IP 或 mtr -r -c 10 IP)查看到目标的跳数与丢包节点,判断是本地出口、运营商中间路由还是目的端问题。查看本机路由表 ip route show,确认默认网关是否存在以及是否正确指向云主机所在子网网关。检查 NAT/源地址转换(SNAT)和策略路由设置,确认没有错误的策略路由把流量导向不可达接口。若使用私有网络或对等互联(VPC peering/BGP),检查云平台路由表和路由传播策略。排查时可用 tcpdump -n -i eth0 host <目标IP> 观察三次握手是否到达或返回,结合内核日志 dmesg 与网络接口统计(ifconfig/ip -s link)查看是否有错误或丢包。
建议采用多DNS并且启用本地缓存:在 /etc/resolv.conf 中配置至少两个不同运营商或公共DNS(如 8.8.8.8、1.1.1.1),并部署本地缓存服务(dnsmasq 或 unbound),减少对上游DNS的查询延迟与波动。对敏感业务可配置条件转发(conditional forwarding)或私有域名解析策略,避免外部DNS污染;同时开启 DNS-over-TLS/HTTPS(DoT/DoH)来防止被劫持。设置合理的超时与重试机制,调整 nsswitch.conf 的解析顺序(例如 hosts -> dns),并监控解析延迟与失败率,出现异常时回退到备用DNS并告知运营商排查。
使用 mtr 获取连续路由与丢包情况,定位丢包开始的跳点;用 ping -s 测试不同包大小以排查 MTU/分片问题;在本地和云控制台查看网卡错误、丢包统计与 CPU 瓶颈。若为云提供商链路或BGP问题,应提交工单并提供 traceroute/mtr 输出与抓包证据。检查本地防火墙与策略路由是否不当丢弃 ICMP 或 TCP 小包,确认负载均衡或 NAT 网关的会话表与连接跟踪(conntrack)是否已饱和,必要时扩容或调整超时。对于私有网络互联,检查路由传播(VPC route propagation)与ACL规则,修复后持续监控,必要时临时切换出站路径或使用备用出口来恢复服务。
常用诊断命令:nslookup/dig(域名解析),traceroute/mtr(路由追踪),ping(连通性),ip route show / ip -s link(路由与接口统计),iptables -L -n / nft list ruleset(防火墙规则),tcpdump -n -i eth0 host x 或 port 53(抓包)。快速修复示例:临时切换DNS echo "nameserver 8.8.8.8" > /etc/resolv.conf;添加默认路由 ip route add default via <网关> dev eth0;检查并允许DNS端口 iptables -I INPUT -p udp --dport 53 -j ACCEPT。云端检查:确认安全组/防火墙规则允许出站 53、80、443;核对路由表是否有默认路由指向 NAT 网关或 Internet 网关;若是 NAT 性能瓶颈,可扩容 NAT 网关或启用弹性公网出口。将这些命令和配置纳入故障单模板,便于快速定位与恢复。