第 4 章 使用加密 DNS 保护系统 DNS 流量


您可以启用加密的 DNS 来保护使用 DNS-over-TLS (DoT)的 DNS 通信。加密 DNS (eDNS)加密所有 DNS 流量端到端,且不回退到不安全的协议,并与零信任架构(ZTA)原则一致。

RHEL 中 eDNS 的当前实现只使用 DoT 协议。您可以使用自定义可引导 ISO 安装启用了加密的 eDNS 的 RHEL,或者在现有 RHEL 安装中启用 eDNS。

重要

加密的 DNS 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

4.1. 安装启用了 eDNS 的 RHEL

安装启用了加密 DNS (eDNS)的 RHEL 系统,以使用 DNS-over-TLS (DoT)保护所有 DNS 流量。这样可确保 DNS 查询和响应保持私有和安全。如果您需要一个自定义 CA 证书捆绑包,则您只能通过在 Kickstart 文件中使用 %certificate 部分来安装它。

先决条件

  • # 命令提示符开头的命令需要 sudo 提供的管理特权或 root 用户访问权限。有关如何配置 sudo 访问权限的详情,请参考 启用非特权用户,以运行某些命令
  • 您已从产品下载页面下载了最小安装引导 ISO 镜像。
  • 如果您需要自定义 CA 捆绑包,那么您需要准备好了一个带有 %certificate 部分的 Kickstart 文件。
  • lorax 软件包已安装。

流程

  1. 可选:如果您需要安装自定义 CA,使用 %certificate 部分创建 Kickstart 文件。确保证书保存在名为 tls-ca-bundle.pem 的文件中。

    %certificate --dir /etc/pki/dns/extracted/pem/ --filename tls-ca-bundle.pem
    -----BEGIN CERTIFICATE-----
    <Base64-encoded_certificate_content>
    -----END CERTIFICATE-----
    %end
  2. 将 Kickstart 文件和内核参数添加到 ISO 中:

    下面的脚本示例演示了如何创建一个自定义的启用了 eDNS 的可引导 ISO。您必须创建一个脚本文件来自动化此过程。

    !/bin/bash set -ex KERNELARGS="" # Enable network KERNELARGS+="ip=dhcp " # Set DoT DNS server KERNELARGS+="rd.net.dns=dns+tls://<server_ip><dns_server_hostname> "
    
    # Set to 'exclusive' to disable fallback to unencrypted DNS. Other values: 'backup', 'prefer'.
    KERNELARGS+="rd.net.dns-resolve-mode=exclusive "
    
    # Set the dnsconfd plugin for NetworkManager
    KERNELARGS+="rd.net.dns-backend=dnsconfd "
    
    # Remove any existing ISO to prevent conflicts with the new build
    rm -f <output_iso_filename>
    
    # Create a new bootable ISO with the Kickstart config file and kernel arguments
    mkksiso --ks <kickstart_file> --cmdline "$KERNELARGS" <input_iso_filename> <output_iso_filename>
  3. 运行脚本。

    sh <script_filename>
  4. 安装 ISO 文件。

验证

  • 验证您的 eDNS 配置:

    $ dnsconfd status

    预期输出:

    Running cache service:
    unbound
    Resolving mode: exclusive
    Config present in service:
    {
        ".": [
            "dns+tls://198.51.100.143#dot.dns.example.com"
        ]
    }
    State of Dnsconfd:
    RUNNING
    Info about servers: [
        {
            "address": "198.51.100.143",
            "port": 853,
            "name": "dot.dns.example.com",
            "routing_domains": [
                "."
            ],
            "search_domains": [],
            "interface": null,
            "protocol": "dns+tls",
            "dnssec": true,
            "networks": [],
            "firewall_zone": null
        }
    ]
  • 使用 nslookup 验证 DNS 服务器是否有响应:

    $ nslookup <domain_name>

    <domain_name> 替换为您要查询的域。

故障排除

  • unbound 中启用详细日志记录:

    # unbound-control verbosity 5
  • 查看相关服务的日志:

    $ journalctl -xe -u <service_name>

    <service_name> 替换为 NetworkManagerdnsconfdunbound

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部