23.2. 使用 NetworkManager 中的 systemd-resolved 将对特定域的 DNS 请求发送到所选的 DNS 服务器


您可以将 NetworkManager 配置为启动 systemd-resolved 的实例。然后,这个 DNS stub 解析器监听 IP 地址 127.0.0.53 上的端口 53。因此,这个 stub 解析器只能从本地系统访问,而不可从网络访问。

使用这个配置,NetworkManager 将 nameserver 127.0.0.53 条目添加到 /etc/resolv.conf 文件中,systemd-resolved 将 DNS 请求动态路由到 NetworkManager 连接配置文件中指定的相应的 DNS 服务器。

重要

systemd-resolved 服务仅作为技术预览提供。红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些预览可让用户早期访问将来的产品功能,让用户在开发过程中测试并提供反馈意见。

如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

对于支持的解决方案,请参阅 在 NetworkManager 中使用 dnsmasq 将对特定域的 DNS 请求发送到所选的 DNS 服务器

先决条件

  • 系统配置了多个网络管理器连接。
  • 为负责解析特定域的连接配置 DNS 服务器和搜索域。

    例如:要确保 VPN 连接中指定的 DNS 服务器解析对 example.com 域的查询,必须有以下设置:

    • 可以解析 example.com 的 DNS 服务器。DHCP 服务器可以动态提供此信息,或者在 VPN 连接配置文件中设置 ipv4.dnsipv6.dns 参数。
    • 搜索域设置为 example.com。DHCP 服务器可以动态提供此信息,或者在 VPN 连接配置文件中设置 ipv4.dns-searchipv6.dns-search 参数。

流程

  1. 安装 systemd-resolved 软件包:

    # dnf install systemd-resolved
    Copy to Clipboard Toggle word wrap
  2. 启用并启动 systemd-resolved 服务:

    # systemctl --now enable systemd-resolved
    Copy to Clipboard Toggle word wrap
  3. 编辑 /etc/NetworkManager/NetworkManager.conf 文件,并在 [main] 部分中设置以下条目:

    dns=systemd-resolved
    Copy to Clipboard Toggle word wrap
  4. 重新载入 NetworkManager 服务:

    # systemctl reload NetworkManager
    Copy to Clipboard Toggle word wrap

验证

  1. 显示 systemd-resolved 使用的 DNS 服务器,以及服务对哪个域使用不同的 DNS 服务器:

    # resolvectl
    ...
    Link 2 (enp1s0)
        Current Scopes: DNS
             Protocols: +DefaultRoute ...
    Current DNS Server: 192.0.2.1
           DNS Servers: 192.0.2.1
    
    Link 3 (tun0)
        Current Scopes: DNS
             Protocols: -DefaultRoute ...
    Current DNS Server: 198.51.100.7
           DNS Servers: 198.51.100.7 203.0.113.19
            DNS Domain: example.com
    Copy to Clipboard Toggle word wrap

    输出确认 systemd-resolvedexample.com 域使用不同的 DNS 服务器。

  2. 使用 tcpdump 数据包嗅探器来验证 DNS 请求的正确路由:

    1. 安装 tcpdump 软件包:

      # yum install tcpdump
      Copy to Clipboard Toggle word wrap
    2. 在一个终端上,启动 tcpdump 以捕获所有接口上的 DNS 流量:

      # tcpdump -i any port 53
      Copy to Clipboard Toggle word wrap
    3. 在另一个终端上,为存在异常的域解析主机名,为另一个域解析主机名,例如:

      # host -t A www.example.com
      # host -t A www.redhat.com
      Copy to Clipboard Toggle word wrap
    4. tcpdump 输出中验证 Red Hat Enterprise Linux 是否只向指定的 DNS 服务器并通过相应的接口发送对 example.com 域的 DNS 查询:

      ...
      13:52:42.234533 IP server.43534 > 198.51.100.7.domain: 50121+ [1au] A? www.example.com. (33)
      ...
      13:52:57.753235 IP server.40864 > 192.0.2.1.domain: 6906+ A? www.redhat.com. (33)
      ...
      Copy to Clipboard Toggle word wrap

      Red Hat Enterprise Linux 将对 www.example.com 的 DNS 查询发送到 198.51.100.7 上的 DNS 服务器,将对 www.redhat.com 的查询发送到 192.0.2.1

故障排除

  1. 验证 /etc/resolv.conf 文件中的 nameserver 条目是否指向 127.0.0.53

    # cat /etc/resolv.conf
    nameserver 127.0.0.53
    Copy to Clipboard Toggle word wrap

    如果缺少条目,请检查 /etc/NetworkManager/NetworkManager.conf 文件中的 dns 参数。

  2. 验证 systemd-resolved 服务是否监听本地 IP 地址 127.0.0.53 上的端口 53

    # ss -tulpn | grep "127.0.0.53"
    udp  UNCONN 0  0      127.0.0.53%lo:53   0.0.0.0:*    users:(("systemd-resolve",pid=1050,fd=12))
    tcp  LISTEN 0  4096   127.0.0.53%lo:53   0.0.0.0:*    users:(("systemd-resolve",pid=1050,fd=13))
    Copy to Clipboard Toggle word wrap

    如果服务没有侦听 127.0.0.53:53,请检查 systemd-resolved 服务是否在运行。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat