日期: 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.com | 142.250.69.174 ✅ | 解析成功 (被墙无法 ping) |
| baidu.com | 110.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.5 | 223.6.6.6 |
| 腾讯云 | 119.29.29.29 | 182.254.116.116 |
| 百度云 | 180.76.76.76 | - |
| 8.8.8.8 | 8.8.4.4 | |
| Cloudflare | 1.1.1.1 | 1.0.0.1 |
经验总结
DNS 问题排查流程:
- 检查
/etc/resolv.conf内容 - 检查 NetworkManager 接口配置
- 使用
dig或nslookup直接测试 DNS 服务器 - 验证 DNS 服务器的可达性和服务可用性
- 检查
Rocky Linux 9 DNS 配置:
- NetworkManager 默认管理
/etc/resolv.conf - 使用
dns=none选项可以禁用自动管理 - 使用
chattr +i锁定文件防止被覆盖
- NetworkManager 默认管理
网络接口说明:
- 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 # 查看属性