当服务器无法解析 DNS 地址时,通常意味着无法将域名转换为 IP 地址,这会直接导致无法访问外部网站、无法更新软件包、无法连接特定 API 等情况。
下面是一套标准的排查与解决流程,你可以按照顺序一步步操作(假设你使用的是 Linux 服务器,Windows 或 macOS 服务器逻辑类似,命令稍有不同)。
在开始修改配置前,先确认是所有域名都解析失败,还是只有某个特定域名解析失败。
- 在服务器上执行:
# 测试一个常见的、肯定能用的域名
ping -c 2 baidu.com
# 同时测试你真正关心的那个域名
ping -c 2 yourdomain.com如果baidu.com 也解析失败:说明是服务器的 DNS 配置有问题。
如果baidu.com 可以,但yourdomain.com 不行:问题出在你的域名本身(比如域名到期、DNS 服务器记录错误、被运营商屏蔽)。
第二步:检查本机 DNS 配置文件(最常用方法)
服务器通常使用/etc/resolv.conf 文件来设定 DNS 服务器地址。
查看当前配置 cat /etc/resolv.conf
正常情况:应该看到类似内容:
nameserver 8.8.8.8
nameserver 114.114.114.114异常情况:文件为空,或者只有一行nameserver 127.0.0.1(且你的本机并没有运行 DNS 服务),或者指向了一个无法连接的内网 IP。
解决方法:
备份原文件 cp /etc/resolv.conf /etc/resolv.conf.bak 临时修改(重启可能失效,但适合快速测试) echo -e "nameserver 8.8.8.8\nnameserver 114.114.114.114" > /etc/resolv.conf 再次测试解析 ping -c 2 baidu.com
注意:如果你的服务器使用systemd-resolved 或NetworkManager 管理网络,直接修改/etc/resolv.conf 可能会在重启后被覆盖,这种情况下,建议用下一步的方法。
1. 使用 systemd-resolved(很多 Ubuntu/Debian、CentOS/RHEL 7+ 默认)
查看当前状态 systemd-resolve --status 或使用新版命令 resolvectl status
- 找到 “Current DNS Server” 或 “Global” 段落的配置。
- 如果显示127.0.0.53 或其他奇怪地址,可以尝试修改全局配置:
修改 /etc/systemd/resolved.conf 文件 nano /etc/systemd/resolved.conf
- 取消[Resolve] 下的注释,并设置:
[Resolve]
DNS=8.8.8.8 114.114.114.114
FallbackDNS=1.1.1.1- 重启服务后生效:
systemctl restart systemd-resolved
systemd-resolve --flush-caches2. 使用 NetworkManager(很多桌面版或服务器版)
查看当前 DNS 配置 nmcli dev show | grep DNS 修改全局 DNS nmcli con mod "你的网络连接名" ipv4.dns "8.8.8.8,114.114.114.114" nmcli con up "你的网络连接名"
第四步:检查防火墙和 iptables(容易被忽视)
某些安全策略会禁止出站 DNS 请求(UDP 53 端口)。
测试能否连接到 DNS 服务器的 53 端口 telnet 8.8.8.8 53 或使用 nc nc -zv 8.8.8.8 53
连接失败(超时/拒绝):检查防火墙规则:
# 查看当前规则
iptables -L -n -v | grep 53
# 如果是 ufw
ufw status | grep 53临时放行(仅用于测试):
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT第五步:检查特定软件或容器的 DNS 问题
Docker 容器:容器通常继承宿主机的 DNS,但如果宿主机配置不对,容器也会出问题。
- 解决方法:在宿主机执行上述排查,或启动容器时指定 DNS:--dns 8.8.8.8。
内部 DNS(如公司网络、VPN):如果你在公司内网,必须使用内网 DNS 服务器来解析内网域名(如company.com)。
- 解决:联系你的 IT 管理员获取正确的内网 DNS IP,并放在/etc/resolv.conf 的第一行。
- 注意:如果同时需要解析外网域名,可以配置“转发器”或将外网 DNS 放在第二行。
如果一时半会找不到根本原因,可以用hosts 文件 硬编码域名:
打开 hosts 文件 nano /etc/hosts 添加一行(先 dig 解析出正确的 IP 地址) 123、45.67.89 yourdomain.com
这种方式只对单个域名有效,且无法应对 IP 变化。
1、先测试:ping baidu.com 和nslookup baidu.com(如果nslookup 都报错,基本是配置问题)。
2、修改配置文件:echo "nameserver 8.8.8.8" > /etc/resolv.conf(临时测试)。
3、如果被覆盖:检查systemd-resolved 或NetworkManager 的配置。
4、检查防火墙:telnet 8.8.8.8 53。
如果以上步骤都无效,可以尝试重启网络服务或重启服务器(最简单粗暴,有时能解决缓存问题)。
如果服务器在云平台(阿里云、腾讯云、AWS 等),还可以检查安全组规则,确保出站 UDP 53 端口没有被意外禁止。
文章摘自:https://idc.huochengrm.cn/dns/25405.html
评论