直接改/etc/resolv.conf不可靠,因其为运行时生成文件,易被networkmanager、systemd-networkd或dhclient覆盖;应优先在网卡配置文件(如/etc/sysconfig/network-scripts/ifcfg-xxx)中设置dns1/dns2,并重启network服务,或按networkmanager规范配置连接参数确保持久生效。

直接在网卡配置文件里写 DNS1 和 DNS2,比改 /etc/resolv.conf 更可靠;但若你装了 NetworkManager,它可能覆盖这些设置。
为什么不能只改 /etc/resolv.conf
这个文件是运行时生成的,systemd-networkd、NetworkManager 或 dhclient 都可能在重启网络或获取 DHCP 后把它重写。你手动加的 nameserver 192.168.10.1 很可能下一秒就消失。
- 临时验证可用:
sudo echo "nameserver 192.168.10.1" > /etc/resolv.conf,但别依赖它长期生效 - 如果
resolv.conf是软链接(如指向/run/systemd/resolve/stub-resolv.conf),改它完全无效 - 用
ls -l /etc/resolv.conf看一眼,如果是软链,说明系统正由systemd-resolved或NetworkManager管理
推荐做法:在网卡配置文件中指定 DNS
路径是 /etc/sysconfig/network-scripts/ifcfg-<em>xxx</em>(如 ifcfg-ens33),这是 CentOS 7 原生网络服务(network)唯一认的 DNS 配置入口。
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
- 确保
BOOTPROTO=static(或none),否则DNS1不生效 - 添加两行:
DNS1=192.168.10.1和可选的DNS2=192.168.10.2(多个 DNS 用空格分隔也行,但不推荐) - 改完必须执行:
sudo systemctl restart network,不是restart NetworkManager - 验证是否写入:
nmcli dev show | grep IP4.DNS—— 如果为空,说明NetworkManager没接管;如果非空,说明它正在抢控权
如果你启用了 NetworkManager
它默认会忽略网卡配置里的 DNS1,转而从自己的连接配置读 DNS。此时你要么停用它,要么显式配置。
- 停用(推荐用于服务器):
sudo systemctl stop NetworkManager && sudo systemctl disable NetworkManager,再用network服务 - 或者保留它,进连接配置:
nmcli connection modify "System ens33" ipv4.dns "192.168.10.1 192.168.10.2" - 然后关掉自动获取 DNS:
nmcli connection modify "System ens33" ipv4.ignore-auto-dns yes - 最后
nmcli connection down "System ens33" && nmcli connection up "System ens33"
验证本地 DNS 是否真正生效
别只信 cat /etc/resolv.conf,它此刻的内容未必代表真实解析行为。
- 查当前实际使用的 DNS:
systemd-resolve --status | grep "DNS Servers"(如果systemd-resolved在跑) - 强制绕过缓存测试:
dig @192.168.10.1 example.com +short - 看解析路径:
dig example.com | grep "SERVER:",确认请求发给了你的本地 DNS 地址 - 如果返回超时,检查
firewalld是否放行 UDP/TCP 53 端口:sudo firewall-cmd --list-ports | grep 53
最易被忽略的是:即使配置写对了,named 服务没启动、监听地址没设成 any、或 allow-query 限制太严,都会导致本地 DNS “配了等于没配”。










