日期: 2025-01-15
操作系统: Rocky Linux release 9.3 (Blue Onyx)
主机IP: 192.168.3.7 (WireGuard接口 wg0)
物理接口: ens18 - 192.168.2.7/24


问题现象

在 192.168.3.7 服务器上无法解析域名:

# 错误示例
ping google.com
ping: google.com: Name or service not known

# 但IP连接正常
ping 8.8.8.8  # 正常

根因分析

1. 检查 DNS 配置文件

cat /etc/resolv.conf

结果: 文件为空,只有注释 # Generated by NetworkManager

2. 检查 DNS 服务状态

systemctl status systemd-resolved

结果: systemd-resolved 服务未启用 (disabled/inactive)

3. 检查网络接口配置

nmcli connection show ens18
nmcli connection show wg0

结果: 两个接口的 ipv4.dns 配置都为空 (--)

接口IP 地址DNS 配置
ens18 (物理网卡)192.168.2.7/24空
wg0 (WireGuard)192.168.3.7/24空

4. 结论

根本原因: NetworkManager 管理的网络接口没有配置 DNS 服务器,导致 /etc/resolv.conf 为空。


解决过程

尝试1: 使用本地网关 192.168.2.1 作为 DNS

配置步骤

# 1. 创建 NetworkManager 全局 DNS 配置
mkdir -p /etc/NetworkManager/conf.d
cat > /etc/NetworkManager/conf.d/no-dns.conf << 'EOF'
[main]
dns=none
EOF

# 2. 配置 resolv.conf
cat > /etc/resolv.conf << 'EOF'
nameserver 192.168.2.1
EOF

# 3. 锁定文件防止被覆盖
chattr +i /etc/resolv.conf

验证 192.168.2.1 的 DNS 服务

需要先安装诊断工具(临时使用 8.8.8.8 安装):

# 临时更改 DNS 以安装工具
chattr -i /etc/resolv.conf
echo "nameserver 8.8.8.8" > /etc/resolv.conf

# 安装工具
dnf install -y bind-utils nmap-ncat

# 恢复原配置
echo "nameserver 192.168.2.1" > /etc/resolv.conf
chattr +i /etc/resolv.conf

测试结果

测试项命令结果
ICMP 连通性ping 192.168.2.1✅ 0.5ms 可达
端口检查ncat -zuv 192.168.2.1 53✅ 端口开放
DNS 查询dig @192.168.2.1 google.com❌ 超时无响应
DNS 查询dig @192.168.2.1 baidu.com❌ 超时无响应

结论: 192.168.2.1 虽然网络可达且端口 53 开放,但没有提供有效的 DNS 服务。


尝试2: 使用阿里云公共 DNS

配置步骤

# 解锁并修改 DNS 配置
chattr -i /etc/resolv.conf
cat > /etc/resolv.conf << 'EOF'
nameserver 223.5.5.5
nameserver 223.6.6.6
EOF

# 重新锁定
chattr +i /etc/resolv.conf

验证结果

域名解析结果Ping 测试
google.com142.250.69.174 ✅解析成功 (被墙无法 ping)
baidu.com110.242.74.102 ✅正常 23ms

结论: DNS 解析功能正常!


最终配置

当前配置文件

/etc/NetworkManager/conf.d/no-dns.conf:

[main]
dns=none

/etc/resolv.conf:

nameserver 223.5.5.5
nameserver 223.6.6.6

文件已用 chattr +i 锁定,NetworkManager 不会覆盖此配置。

其他可用公共 DNS 选项

提供商主 DNS备用 DNS
阿里云223.5.5.5223.6.6.6
腾讯云119.29.29.29182.254.116.116
百度云180.76.76.76-
Google8.8.8.88.8.4.4
Cloudflare1.1.1.11.0.0.1

经验总结

  1. DNS 问题排查流程:

    • 检查 /etc/resolv.conf 内容
    • 检查 NetworkManager 接口配置
    • 使用 dig 或 nslookup 直接测试 DNS 服务器
    • 验证 DNS 服务器的可达性和服务可用性
  2. Rocky Linux 9 DNS 配置:

    • NetworkManager 默认管理 /etc/resolv.conf
    • 使用 dns=none 选项可以禁用自动管理
    • 使用 chattr +i 锁定文件防止被覆盖
  3. 网络接口说明:

    • ens18: 物理网卡,连接 192.168.2.0/24 网络
    • wg0: WireGuard VPN 接口,连接 192.168.3.0/24 网络
    • 当前通过 ens18 网关访问外网

相关命令参考

# 查看 DNS 配置
cat /etc/resolv.conf

# 查看网络接口 DNS 配置
nmcli connection show <interface-name>
nmcli -f ipv4.dns connection show <interface-name>

# 设置接口 DNS
nmcli connection mod <interface-name> ipv4.dns "8.8.8.8 8.8.4.4"
nmcli connection up <interface-name>

# 测试 DNS 解析
dig @<dns-server> <domain>
nslookup <domain> <dns-server>
host -t A <domain> <dns-server>

# 锁定/解锁 resolv.conf
chattr +i /etc/resolv.conf  # 锁定
chattr -i /etc/resolv.conf  # 解锁
lsattr /etc/resolv.conf     # 查看属性