5.3. Installing RHEL with eDNS enabled using a custom bootable ISO
Create a custom bootable ISO to install RHEL with encrypted DNS (eDNS) enabled using a strict enforce policy. This method helps ensure that all DNS traffic is private and secure during and after the installation.
If you require a custom CA certificate bundle, you must install it by using the %certificate section in the Kickstart file. You then reference this Kickstart file in a script to build a new ISO, which includes kernel arguments to enforce a strict DoT policy. If your environment is configured to support a fallback to unencrypted DNS, you can perform a standard RHEL installation and configure eDNS afterwards.
Prerequisites
-
Commands that start with the
#command prompt require administrative privileges provided bysudoor root user access. For information on how to configuresudoaccess, see Enabling unprivileged users to run certain commands. - You have downloaded the minimal installation Boot ISO image from the Product Downloads page.
-
You have a Kickstart file ready with a
%certificatesection if you need a custom CA bundle. -
The
loraxpackage is installed.
Procedure
Optional: Create a Kickstart file with a
%certificatesection. Ensure the certificate is saved in a file namedtls-ca-bundle.pem.%certificate --dir /etc/pki/dns/extracted/pem/ --filename tls-ca-bundle.pem -----BEGIN CERTIFICATE----- <Base64-encoded_certificate_content> -----END CERTIFICATE----- %endAdd the Kickstart file and kernel arguments into the ISO:
The following script example demonstrates how to create a custom bootable ISO with eDNS enabled. You must create a script file to automate this process.
#!/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>_Run the script.
sh <script_filename>- Install RHEL using the customized ISO file.
Verification
Verify your eDNS configuration:
$ dnsconfd statusExpected output:
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 } ]Verify that DNS server is responsive by using
nslookup:$ nslookup <domain_name>Replace the
<domain_name>with the domain that you want to query.
Troubleshooting
Enable detailed logging in
unbound:# unbound-control verbosity 5Review logs for the relevant service:
$ journalctl -xe -u <service_name>Replace
<service_name>withNetworkManager,dnsconfd, orunbound.