第 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软件包已安装。
流程
可选:如果您需要安装自定义 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将 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>运行脚本。
sh <script_filename>- 安装 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>替换为NetworkManager、dnsconfd或unbound。