如何在 Rocky Linux 中配置 DNS 解析的优先级?

问题浏览数Icon
19
问题创建时间Icon
2025-05-26 12:19:00
回答 | 共 5 个
作者头像
dreamgear99

在Rocky Linux中配置DNS解析优先级,需重点关注网络管理器(NetworkManager)及DNS配置文件。以下为两种核心方案:

  1. NetworkManager配置

    • 使用nmcli修改连接配置:nmcli con mod <连接名> ipv4.dns '8.8.8.8,1.1.1.1' 明确指定主/备DNS顺序
    • 添加ipv4.dns-priority <数值>参数(数值越小优先级越高)
    • 关键操作:nmcli con down/up <连接名> 强制重载配置
  2. 手动配置文件

    • 修改/etc/resolv.conf时需配合chattr +i防止覆盖
    • 若使用systemd-resolved,应在/etc/systemd/resolved.conf.d/创建优先级覆盖文件
    • 通过resolvectl验证:resolvectl dns显示生效的DNS服务器顺序

特殊场景处理:

  • 多网卡环境需配合ipv4.route-metric调整接口优先级
  • VPN连接建议使用nmcliipv4.dns-priority单独设置高优先级
  • 容器环境需在宿主机和容器内双重配置

验证流程:

  1. dig +short google.com 测试基础解析
  2. timeout 1 strace -e connect curl https://example.com 捕获实际DNS请求
  3. 使用tcpdump -i any port 53监控DNS请求发包顺序
作者头像
zhongyan88

是否考虑过通过调整网络接口的DNS设置或使用systemd-resolved来优化解析顺序?

作者头像
dongluo88

在Rocky Linux中配置DNS解析优先级需综合NetworkManager、resolv.conf及nsswitch.conf三方配置。以下是核心实践方案:

  1. NetworkManager动态配置
    通过nmcli con mod <连接名> ipv4.dns '192.168.1.1 8.8.8.8'指定优先级,追加ipv4.ignore-auto-dns yes禁用DHCP干扰,最后nmcli con down/up <连接名>生效。此方法在虚拟化多网卡场景中稳定性最佳。

  2. resolv.conf硬锁定方案
    直接修改/etc/resolv.conf添加nameserver条目后,执行chattr +i /etc/resolv.conf防止覆盖。但需注意:该操作会破坏Cloud-Init等自动化工具,在KVM热迁移时曾因此导致过服务异常。

  3. nsswitch.conf查询策略
    修改/etc/nsswitch.confhosts: 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优先级解决。

作者头像
starbright2024

在Rocky Linux中配置DNS解析优先级,可通过以下步骤实现:

  1. NetworkManager配置(推荐)

    • 执行 nmcli con modify <连接名> ipv4.dns <主DNS> <备DNS>
    • 添加 ipv4.dns-priority <数值>(数值越小优先级越高)
    • 使用 nmcli con up <连接名> 激活配置
  2. 手动修改 resolv.conf(临时生效)

    • 编辑 /etc/resolv.conf 调整 nameserver 顺序
    • 注意:该文件可能被NetworkManager覆盖
  3. 全局优先级控制

    • /etc/NetworkManager/NetworkManager.conf 中添加:
      [main]  
      dns=defaults  
      rc-manager=resolvconf  
    • 创建符号链接:ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf
  4. 验证配置

    • 使用 nmcli con show <连接名> | grep dns 查看优先级
    • 通过 dig example.com 观察查询服务器顺序

注:若使用DHCP,需在连接配置中设置 ipv4.dns-priority 低于静态配置值以覆盖DHCP DNS。

作者头像
stillshade9

在Rocky Linux中配置DNS优先级,可通过修改/etc/NetworkManager/NetworkManager.conf[main]段添加dns=default,并在具体连接的配置文件中使用ipv4.dns-priorityipv6.dns-priority参数调整优先级。

延伸知识点:NetworkManager的DNS配置机制

  1. 多连接优先级:当系统有多个网络连接(如以太网和Wi-Fi)时,NetworkManager默认按接口活跃状态自动分配DNS优先级。可通过nmcli connection modify <连接名> ipv4.dns-priority <值>手动设置,值越小优先级越高。
  2. 全局DNS覆盖:在/etc/NetworkManager/conf.d/dns.conf中设置[global-dns]段,添加options=edns0:2等参数,可强制所有连接使用特定DNS配置。
  3. 动态调整验证:修改后需执行systemctl restart NetworkManager,使用resolvectl status可查看当前生效的DNS顺序。注意:若使用systemd-resolved服务,需确保NetworkManager.conf中启用了dns=systemd-resolved以保持同步。