5.3. 使用自定义的可引导 ISO 安装启用了 eDNS 的 RHEL
创建自定义可引导 ISO,以使用严格的 enforce 策略安装启用了加密 DNS (eDNS)的 RHEL。这个方法有助于确保所有 DNS 流量在安装过程中和安装后都是私有和安全的。
如果需要一个自定义 CA 证书捆绑包,则必须使用 Kickstart 文件中的 %certificate 部分安装它。然后,您在脚本中引用这个 Kickstart 文件,来构建新的 ISO,其中包括用于强制执行严格的 DoT 策略的内核参数。如果您的环境被配置为支持回退到未加密的 DNS,您可以执行标准 RHEL 安装并配置 eDNS。
先决条件
-
以
#命令提示符开头的命令需要sudo提供的管理特权或 root 用户访问权限。有关如何配置sudo访问权限的详情,请参考 启用非特权用户,以运行某些命令。 - 您已从产品下载页面下载了最小安装引导 ISO 镜像。
-
如果您需要自定义 CA 捆绑包,那么您需要准备好了一个带有
%certificate部分的 Kickstart 文件。 -
lorax软件包已安装。
流程
可选:创建带有
%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 文件安装 RHEL。
验证
验证您的 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。