nmcli配置物理网卡静态DNS最稳妥,需指定内网DNS优先、启用ignore-auto-dns、设置dns-search和dns-priority,并重启连接生效,同时排除systemd-resolved干扰。

直接用 nmcli 配置物理网卡的静态 DNS 解析顺序,是解决内网域名访问慢或超时最稳妥的方式之一。关键不是只填几个 DNS 地址,而是让系统明确“哪些域名必须走内网 DNS”,避免请求被发到公网 DNS 后再兜一圈回来。
确认当前网络管理器和连接名
先判断系统是否由 NetworkManager 管理 DNS:
- 运行
ls -l /etc/resolv.conf,如果指向/run/NetworkManager/resolv.conf,说明 NM 在管 - 再执行
nmcli connection show,找到你物理网卡对应的连接名(常见如 Wired connection 1、System eth0 或自定义名) - 用
nmcli device status确认该设备处于 connected 状态
设置内网 DNS 为首选并启用域名分流
假设你的内网 DNS 是 10.0.0.2,内网域名为 corp.example.com 及其子域,公网备用 DNS 用 223.5.5.5(阿里):
- 指定 DNS 服务器顺序:
sudo nmcli connection modify "Wired connection 1" ipv4.dns "10.0.0.2 223.5.5.5" - 强制该连接忽略 DHCP 分配的 DNS:
sudo nmcli connection modify "Wired connection 1" ipv4.ignore-auto-dns yes - 设置搜索域,让未带后缀的主机名自动补全:
sudo nmcli connection modify "Wired connection 1" ipv4.dns-search "corp.example.com" - (可选但推荐)提升内网 DNS 优先级:
sudo nmcli connection modify "Wired connection 1" ipv4.dns-priority -10(数值越小越靠前)
激活配置并验证解析行为
修改后必须重新加载连接才能生效:
- 执行
sudo nmcli connection down "Wired connection 1" && sudo nmcli connection up "Wired connection 1" - 检查是否写入成功:
nmcli connection show "Wired connection 1" | grep -E "(dns|ignore-auto|priority)" - 查实际生效的 DNS:
nmcli dev show eth0 | grep DNS(注意:这里显示的是最终合并结果,含 NM 自动加的 fallback) - 测试内网域名是否直连内网 DNS:
dig @10.0.0.2 db01.corp.example.com +short;再对比dig db01.corp.example.com +short的响应时间与服务器地址是否一致
排除常见干扰项
即使配置正确,仍可能因以下原因导致内网访问超时:
-
systemd-resolved 干预:若
resolvectl status显示 DNS 来源是 resolved,需额外运行sudo resolvectl revert eth0清除 resolved 的接管,或干脆禁用它(sudo systemctl disable --now systemd-resolved) -
DNS 缓存未清:执行
sudo systemd-resolve --flush-caches(如果 resolved 启用)或sudo /etc/init.d/nscd restart(如装了 nscd) -
防火墙拦截 DNS 请求:确认内网 DNS 服务器的 UDP 53 端口对客户端开放:
nc -zv 10.0.0.2 53 -
域名拼写或大小写敏感:Linux 下
DB01.CORP.EXAMPLE.COM和db01.corp.example.com默认等价,但某些内网 DNS 服务区分大小写,建议统一小写测试


















