在Rocky Linux里改DNS优先级,最简单的方法是用NetworkManager。比如用命令 nmcli con modify 你的连接名 ipv4.dns '8.8.8.8,1.1.1.1'
把DNS按顺序填好,再补一句 nmcli con modify 你的连接名 ipv4.dns-priority 50
(数字越小优先级越高),最后nmcli con down 你的连接名
和nmcli con up 你的连接名
重启下网络就好啦!
如何在 Rocky Linux 中配置 DNS 解析的优先级?
在Rocky Linux中配置DNS解析优先级,需重点关注网络管理器(NetworkManager)及DNS配置文件。以下为两种核心方案:
-
NetworkManager配置
- 使用
nmcli
修改连接配置:nmcli con mod <连接名> ipv4.dns '8.8.8.8,1.1.1.1'
明确指定主/备DNS顺序 - 添加
ipv4.dns-priority <数值>
参数(数值越小优先级越高) - 关键操作:
nmcli con down/up <连接名>
强制重载配置
- 使用
-
手动配置文件
- 修改
/etc/resolv.conf
时需配合chattr +i
防止覆盖 - 若使用systemd-resolved,应在
/etc/systemd/resolved.conf.d/
创建优先级覆盖文件 - 通过
resolvectl
验证:resolvectl dns
显示生效的DNS服务器顺序
- 修改
特殊场景处理:
- 多网卡环境需配合
ipv4.route-metric
调整接口优先级 - VPN连接建议使用
nmcli
的ipv4.dns-priority
单独设置高优先级 - 容器环境需在宿主机和容器内双重配置
验证流程:
dig +short google.com
测试基础解析timeout 1 strace -e connect curl https://example.com
捕获实际DNS请求- 使用
tcpdump -i any port 53
监控DNS请求发包顺序
是否考虑过通过调整网络接口的DNS设置或使用systemd-resolved来优化解析顺序?
在Rocky Linux中配置DNS解析优先级需综合NetworkManager、resolv.conf及nsswitch.conf三方配置。以下是核心实践方案:
-
NetworkManager动态配置
通过nmcli con mod <连接名> ipv4.dns '192.168.1.1 8.8.8.8'
指定优先级,追加ipv4.ignore-auto-dns yes
禁用DHCP干扰,最后nmcli con down/up <连接名>
生效。此方法在虚拟化多网卡场景中稳定性最佳。 -
resolv.conf硬锁定方案
直接修改/etc/resolv.conf
添加nameserver
条目后,执行chattr +i /etc/resolv.conf
防止覆盖。但需注意:该操作会破坏Cloud-Init等自动化工具,在KVM热迁移时曾因此导致过服务异常。 -
nsswitch.conf查询策略
修改/etc/nsswitch.conf
中hosts: files dns
强制本地hosts优先。在容器化部署时发现,某些JAVA应用会绕过此配置,需额外添加-Dnetworkaddress.cache.ttl
参数。
典型挑战与解决方案:
- DHCP覆盖问题:在OpenStack环境中,Metadata服务会强制注入DNS,必须通过
NM_CONTROLLED=no
禁用网卡NM接管 - systemd-resolved冲突:安装后会自动劫持53端口,需
systemctl stop systemd-resolved
并删除符号链接 - 多网卡优先级错乱:通过
nmcli con modify
为每个接口定义独立metric值,控制路由决策顺序
验证时建议使用dig +trace
观察实际请求顺序,同时用tcpdump -i any port 53
抓包确认请求流向。曾在Ceph集群部署中因DNS轮询机制导致节点发现失败,最终通过固定DNS优先级解决。
在Rocky Linux中配置DNS解析优先级,可通过以下步骤实现:
-
NetworkManager配置(推荐)
- 执行
nmcli con modify <连接名> ipv4.dns <主DNS> <备DNS>
- 添加
ipv4.dns-priority <数值>
(数值越小优先级越高) - 使用
nmcli con up <连接名>
激活配置
- 执行
-
手动修改 resolv.conf(临时生效)
- 编辑
/etc/resolv.conf
调整nameserver
顺序 - 注意:该文件可能被NetworkManager覆盖
- 编辑
-
全局优先级控制
- 在
/etc/NetworkManager/NetworkManager.conf
中添加:[main] dns=defaults rc-manager=resolvconf
- 创建符号链接:
ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf
- 在
-
验证配置
- 使用
nmcli con show <连接名> | grep dns
查看优先级 - 通过
dig example.com
观察查询服务器顺序
- 使用
注:若使用DHCP,需在连接配置中设置 ipv4.dns-priority
低于静态配置值以覆盖DHCP DNS。
在Rocky Linux中配置DNS优先级,可通过修改/etc/NetworkManager/NetworkManager.conf
的[main]
段添加dns=default
,并在具体连接的配置文件中使用ipv4.dns-priority
和ipv6.dns-priority
参数调整优先级。
延伸知识点:NetworkManager的DNS配置机制
- 多连接优先级:当系统有多个网络连接(如以太网和Wi-Fi)时,NetworkManager默认按接口活跃状态自动分配DNS优先级。可通过
nmcli connection modify <连接名> ipv4.dns-priority <值>
手动设置,值越小优先级越高。 - 全局DNS覆盖:在
/etc/NetworkManager/conf.d/dns.conf
中设置[global-dns]
段,添加options=edns0:2
等参数,可强制所有连接使用特定DNS配置。 - 动态调整验证:修改后需执行
systemctl restart NetworkManager
,使用resolvectl status
可查看当前生效的DNS顺序。注意:若使用systemd-resolved
服务,需确保NetworkManager.conf
中启用了dns=systemd-resolved
以保持同步。