linux域名无法访问需分层排查:先确认是dns解析失败还是解析后连接不通;再依次检查dns配置、网络连通性与端口、目标服务及协议行为、系统级干扰因素。

Linux 域名无法访问,通常不是单一原因导致,需按网络分层逐级排查:从本地解析、网络连通性、到目标服务状态。重点先确认是“解析失败”还是“解析成功但连接不通”。
一、检查域名是否能正常解析(DNS 层)
使用 nslookup 或 dig 直接查 DNS 解析结果,避免被系统缓存干扰:
- nslookup example.com —— 看是否返回有效 A/AAAA 记录
- dig example.com +short —— 更简洁输出 IP
- 若失败,检查 /etc/resolv.conf 中 nameserver 是否可写、地址是否可用(如 ping 8.8.8.8 测试上游 DNS 连通性)
- 注意:systemd-resolved、dnsmasq 等本地 DNS 代理可能覆盖 /etc/resolv.conf,用 resolvectl status 查真实配置
二、验证网络连通性与路由(IP 层 & 传输层)
即使解析出 IP,也可能因防火墙、路由或端口问题无法访问:
- 用 ping -c 4 1.1.1.1 测试基础 ICMP 连通性(注意:部分服务器禁 ping,不代表网络不通)
- 用 telnet example.com 80 或 nc -zv example.com 443 测试目标端口是否开放
- 若 IP 可通但域名不通,可能是 hosts 文件误配:grep example.com /etc/hosts
- 检查本机防火墙:sudo iptables -L -n 或 sudo nft list ruleset(看是否拦截出向连接)
三、确认目标服务与协议行为(应用层)
有些网站仅支持 HTTPS、有 User-Agent 限制、或启用 CDN/反向代理后对 Host 头敏感:
- 用 curl -v http://example.com 查看完整请求响应,关注 HTTP 状态码、重定向、Connection refused 等提示
- 对比 curl -v https://example.com,排除 HTTP 被强制跳转或关闭的情况
- 加 --resolve 强制指定域名和 IP 绑定,绕过 DNS 验证是否为解析问题:curl --resolve example.com:80:93.184.216.34 http://example.com
- 若在公司/校园网环境,检查是否启用透明代理或 DNS 污染,尝试换用公共 DNS(如 1.1.1.1)或手机热点复测
四、排查系统级干扰因素
某些后台服务或配置会静默影响网络行为:
- 检查是否启用 IPv6 但本地不支持:临时禁用测试 sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
- 确认 NetworkManager 或 systemd-networkd 未错误配置 DNS 覆盖策略(如 /etc/NetworkManager/conf.d/10-dns.conf)
- 运行 strace -e trace=connect,sendto,recvfrom curl -s http://example.com 2>&1 | grep -E "(connect|sendto|recvfrom)" 查看底层调用是否卡在 DNS 或 connect 阶段









