服务器无法解析DNS地址怎么办?

HCRM技术_小炮 DNS 2026-05-07 9 0

当服务器无法解析 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-resolvedNetworkManager 管理网络,直接修改/etc/resolv.conf 可能会在重启后被覆盖,这种情况下,建议用下一步的方法。

第三步:检查系统网络管理的 DNS 配置

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-caches

2. 使用 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.comnslookup baidu.com(如果nslookup 都报错,基本是配置问题)。

2、修改配置文件echo "nameserver 8.8.8.8" > /etc/resolv.conf(临时测试)。

3、如果被覆盖:检查systemd-resolvedNetworkManager 的配置。

4、检查防火墙telnet 8.8.8.8 53

如果以上步骤都无效,可以尝试重启网络服务重启服务器(最简单粗暴,有时能解决缓存问题)。

如果服务器在云平台(阿里云、腾讯云、AWS 等),还可以检查安全组规则,确保出站 UDP 53 端口没有被意外禁止。

文章摘自:https://idc.huochengrm.cn/dns/25405.html

评论