5154

Good Luck To You!

nmcli dns配置怎么设置才能让网络解析更稳定?

nmcli dns配置是Linux系统中使用NetworkManager命令行工具(nmcli)配置DNS服务器地址的重要操作,适用于需要手动指定DNS或修改默认DNS的场景,NetworkManager作为主流的网络连接管理工具,支持通过命令行、图形界面等多种方式配置网络参数,其中DNS配置直接影响域名解析效率与网络访问稳定性,以下从基础概念、配置方法、场景应用、注意事项及常见问题等方面展开详细说明。

nmcli dns配置基础

DNS(域名系统)的作用是将人类可读的域名(如www.example.com)转换为机器可识别的IP地址,在Linux系统中,DNS配置通常存储在/etc/resolv.conf文件中,但直接修改该文件可能被NetworkManager覆盖,因此推荐使用nmcli命令进行持久化配置,nmcli是NetworkManager的命令行接口,支持查看、修改、删除网络连接的DNS设置,包括手动指定DNS服务器、自动获取DNS(从DHCP或PPPoe)等模式。

nmcli dns配置方法

查看当前DNS配置

在配置前,需先确认当前网络连接的DNS设置,使用以下命令列出所有活动连接的DNS信息:

nmcli connection show

若需查看特定连接的DNS配置,可指定连接名称(如"eth0"或"WiFi连接"):

nmcli connection show "连接名称" | grep dns

或直接查看IPv4/IPv6的DNS详情:

nmcli connection show "连接名称" ipv4.dns
nmcli connection show "连接名称" ipv6.dns

手动配置DNS服务器

手动配置DNS适用于需要使用公共DNS(如谷歌8.8.8.8、阿里223.5.5.5)或内网DNS服务器的场景,命令格式为:

nmcli connection modify "连接名称" ipv4.dns "DNS服务器1 DNS服务器2"

为有线连接"eth0"配置谷歌和阿里DNS:

nmcli dns配置

nmcli connection modify "eth0" ipv4.dns "8.8.8.8 223.5.5.5"

若需同时配置IPv6 DNS(如2001:4860:4860::8888),可添加ipv6.dns参数:

nmcli connection modify "eth0" ipv4.dns "8.8.8.8" ipv6.dns "2001:4860:4860::8888"

配置完成后,需重启网络连接或使配置生效:

nmcli connection down "eth0" && nmcli connection up "eth0"

自动获取DNS(默认模式)

默认情况下,NetworkManager会从DHCP服务器或PPPoe连接中自动获取DNS地址,若需确保使用自动DNS,需清除手动配置的DNS并检查自动获取选项:

nmcli connection modify "连接名称" ipv4.dns "" ipv4.ignore-auto-dns no
nmcli connection modify "连接名称" ipv6.dns "" ipv6.ignore-auto-dns no

ignore-auto-dns设为"no"表示允许使用自动获取的DNS。

配置多个DNS服务器的优先级

当配置多个DNS服务器时,系统会按顺序进行解析,可通过ipv4.dns-priority参数调整优先级(数值越小优先级越高),

nmcli connection modify "eth0" ipv4.dns "8.8.8.8 223.5.5.5" ipv4.dns-priority "100 200"

8.8.8.8的优先级高于223.5.5.5。

nmcli dns配置

不同场景下的DNS配置示例

场景1:为特定连接配置DNS

假设需要为无线连接"WLAN0"配置Cloudflare DNS(1.1.1.1):

nmcli connection modify "WLAN0" ipv4.dns "1.1.1.1 1.0.0.1"
nmcli connection up "WLAN0"

场景2:配置全局DNS(所有连接共享)

若希望所有网络连接使用相同的DNS,可通过修改全局DNS配置实现:

nmcli connection modify "--show" ipv4.dns "8.8.8.8"
nmcli general reload

"--show"表示选择当前活动连接,general reload重新加载NetworkManager配置。

场景3:临时测试DNS(不持久化)

若需临时修改DNS进行测试(不保存到配置文件),可使用以下命令:

nmcli networking off
nmcli networking on
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

注意:此方法在NetworkManager重启后失效,仅适用于临时调试。

DNS配置验证与故障排查

配置完成后,需验证DNS是否生效,使用以下命令测试域名解析:

nmcli dns配置

nslookup www.baidu.com
ping www.baidu.com

若解析失败,可检查以下问题:

  1. DNS服务器连通性:通过ping 8.8.8.8确认DNS服务器是否可达;
  2. NetworkManager服务状态:确保systemctl status NetworkManager为运行状态;
  3. 配置文件权限:检查/etc/resolv.conf是否被NetworkManager正确管理(可通过ls -l /etc/resolv.conf查看,若为符号链接则正常);
  4. 防火墙拦截:确认防火墙未阻止DNS端口(53/TCP/UDP)。

DNS配置参数说明表

参数 作用 示例
ipv4.dns 设置IPv4 DNS服务器地址 ipv4.dns "8.8.8.8 223.5.5.5"
ipv6.dns 设置IPv6 DNS服务器地址 ipv6.dns "2001:4860:4860::8888"
ipv4.ignore-auto-dns 是否忽略DHCP自动获取的DNS ipv4.ignore-auto-dns yes(忽略)
ipv6.ignore-auto-dns 是否忽略PPPoe自动获取的DNS ipv6.ignore-auto-dns no(不忽略)
ipv4.dns-priority DNS服务器优先级(数值越小越高) ipv4.dns-priority "100 200"

相关问答FAQs

问题1:修改nmcli dns配置后,如何确认DNS是否已生效?
解答:可通过以下步骤验证:

  1. 使用nmcli connection show "连接名称" ipv4.dns查看配置是否保存成功;
  2. 执行nslookup 域名(如nslookup www.google.com),观察返回的DNS服务器地址是否为配置的地址;
  3. 若解析异常,可重启网络连接(nmcli connection down "连接名称" && nmcli connection up "连接名称")后再次测试。

问题2:为什么使用nmcli配置DNS后,/etc/resolv.conf文件没有更新?
解答:这通常是由于NetworkManager未接管该文件的管理权限,可通过以下方式解决:

  1. 检查/etc/resolv.conf是否为符号链接:ls -l /etc/resolv.conf,若指向/run/systemd/resolve/resolv.conf,则NetworkManager已接管;
  2. 若为普通文件,可备份后删除,创建符号链接:sudo rm /etc/resolv.conf && sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
  3. 确保NetworkManager服务已启用:sudo systemctl enable --now NetworkManager

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年9月    »
1234567
891011121314
15161718192021
22232425262728
2930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.