# Setup DNS server ###### tags: `dns` `bind9` Setup master&slave DNS servers on Rocky 8.4 Servers: - Master DNS server - Hostname: masterdns.homelab.com - IP: 192.168.122.66/24 - Slave DNS server - Hostname: slavedns.homelab.com - IP: 192.168.122.67/24 - Client - Hostname: clientdns.homelab.com - IP: 192.168.122.65/24 #### Preparation ###### 1. yum update ``` $ sudo yum update -y ``` ###### 2. enable dmesg logging create /etc/systemd/system/dmesg.service ``` [Unit] Description=Create /var/log/dmesg on boot ConditionPathExists=/var/log/dmesg [Service] ExecStart=/usr/bin/dmesg StandardOutput=file:/var/log/dmesg [Install] WantedBy=multi-user.target ``` touch /var/log/dmesg and verify SELinux contexts ``` touch /var/log/dmesg $ restorecon -v /var/log/dmesg ``` enable dmesg ``` $ systemctl enable dmesg ``` ###### 3. enable syslog/messages ``` $ yum install rsyslog -y $ systemctl enable rsyslog --now ``` #### Setup Master DNS server ###### 1. configure hostname ``` $ hostnamectl set-hostname masterdns.homelab.com ``` ###### 2. install bind packages ``` [root@masterdns ~]# yum install bind bind-utils -y Last metadata expiration check: 1:05:08 ago on Wed 11 May 2022 09:24:17 AM AEST. Package bind-utils-32:9.11.26-6.el8.x86_64 is already installed. Dependencies resolved. ==================================================================================================================== Package Architecture Version Repository Size ==================================================================================================================== Installing: bind x86_64 32:9.11.26-6.el8 appstream 2.1 M Transaction Summary ==================================================================================================================== Install 1 Package Total download size: 2.1 M Installed size: 4.5 M Downloading Packages: bind-9.11.26-6.el8.x86_64.rpm 3.1 MB/s | 2.1 MB 00:00 -------------------------------------------------------------------------------------------------------------------- Total 1.6 MB/s | 2.1 MB 00:01 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Running scriptlet: bind-32:9.11.26-6.el8.x86_64 1/1 Installing : bind-32:9.11.26-6.el8.x86_64 1/1 Running scriptlet: bind-32:9.11.26-6.el8.x86_64 1/1 Verifying : bind-32:9.11.26-6.el8.x86_64 1/1 Installed: bind-32:9.11.26-6.el8.x86_64 Complete! ``` ###### 3. enable and start dns service ``` [root@masterdns ~]# systemctl enable named Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service. [root@masterdns ~]# systemctl start named [root@masterdns ~]# systemctl status named ● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-05-11 10:35:43 AEST; 5s ago Process: 2572 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS) Process: 2569 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkcon> Main PID: 2574 (named) Tasks: 4 (limit: 11405) Memory: 57.9M CGroup: /system.slice/named.service └─2574 /usr/sbin/named -u named -c /etc/named.conf May 11 10:35:43 masterdns.homelab.com named[2574]: network unreachable resolving './DNSKEY/IN': 2001:500:2::c#53 May 11 10:35:43 masterdns.homelab.com named[2574]: network unreachable resolving './NS/IN': 2001:500:2::c#53 May 11 10:35:43 masterdns.homelab.com named[2574]: network unreachable resolving './DNSKEY/IN': 2001:7fd::1#53 May 11 10:35:43 masterdns.homelab.com named[2574]: network unreachable resolving './NS/IN': 2001:7fd::1#53 May 11 10:35:43 masterdns.homelab.com named[2574]: network unreachable resolving './DNSKEY/IN': 2001:503:c27::2:30#> May 11 10:35:43 masterdns.homelab.com named[2574]: network unreachable resolving './NS/IN': 2001:503:c27::2:30#53 May 11 10:35:43 masterdns.homelab.com named[2574]: network unreachable resolving './DNSKEY/IN': 2001:500:a8::e#53 May 11 10:35:43 masterdns.homelab.com named[2574]: network unreachable resolving './NS/IN': 2001:500:a8::e#53 May 11 10:35:43 masterdns.homelab.com named[2574]: network unreachable resolving './DNSKEY/IN': 2001:500:12::d0d#53 May 11 10:35:43 masterdns.homelab.com named[2574]: network unreachable resolving './NS/IN': 2001:500:12::d0d#53 ``` ``` [root@masterdns ~]# named -v BIND 9.11.26-RedHat-9.11.26-6.el8 (Extended Support Version) <id:3ff8620> ``` ###### 4. configure DNS (BIND) named.conf ``` # edit "/etc/named.conf" with those lines 11 listen-on port 53 { 127.0.0.1; 192.168.122.66; }; # add master DNS server IP 19 allow-query { localhost; 192.168.122.0/24; }; # add subnet 20 allow-transfer { localhost; 192.168.122.67; }; # add slave DNS server IP 32 recursion no; # disable recursion 58 zone "homelab.com" IN { # name of domain to administer 59 type master; 60 file "forward.homelab"; 61 allow-update {none;}; 62 }; 63 zone "0.122.168.192.in-addr.arpa" IN { # for reverse zone 64 type master; 65 file "reverse.homelab"; 66 allow-update {none;}; 67 }; ``` ###### 5. create zone files ``` $ cd /var/named/ $ touch forward.homelab $ touch reverse.homelab ``` edit forward.homelab file ``` $TTL 86400 ; 24 hours could have been written as 24h or 1D @ IN SOA masterdns.homelab.com. root.homelab.com. ( 2022051101 ; serial 3H ; refresh 15 ; retry 1w ; expire 3h ; minimum ) ; name servers @ IN NS masterdns.homelab.com. @ IN NS slavedns.homelab.com. ; name server to IP resolve @ IN A 192.168.122.66 @ IN A 192.168.122.67 masterdns IN A 192.168.122.66 slavedns IN A 192.168.122.67 kmaster IN A 192.168.122.10 ; k8s master node ``` edit reverse.homelab file ``` $TTL 86400 ; 24 hours could have been written as 24h or 1D @ IN SOA masterdns.homelab.com. root.homelab.com. ( 2002022401 ; serial 3H ; refresh 15 ; retry 1w ; expire 3h ; minimum ) @ IN NS masterdns.homelab.com. @ IN NS slavedns.homelab.com. @ IN PTR homelab.com. ; IP to hostname masterdns IN A 192.168.122.66 slavedns IN A 192.168.122.67 kmaster IN A 192.168.122.10 66 IN PTR masterdns.homelab.com. 67 IN PTR slavedns.homelab.com. 10 IN PTR kmaster. ``` ###### 6. restart named ``` [root@masterdns named]# systemctl restart named [root@masterdns named]# systemctl status named ● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-05-11 15:44:14 AEST; 5s ago Process: 3558 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, > Process: 3944 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS) Process: 3941 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkcon> Main PID: 3946 (named) Tasks: 4 (limit: 11405) Memory: 53.7M CGroup: /system.slice/named.service └─3946 /usr/sbin/named -u named -c /etc/named.conf May 11 15:44:14 masterdns.homelab.com named[3946]: network unreachable resolving './DNSKEY/IN': 2001:500:2::c#53 May 11 15:44:14 masterdns.homelab.com named[3946]: network unreachable resolving './NS/IN': 2001:500:2::c#53 May 11 15:44:14 masterdns.homelab.com named[3946]: network unreachable resolving './DNSKEY/IN': 2001:dc3::35#53 May 11 15:44:14 masterdns.homelab.com named[3946]: network unreachable resolving './NS/IN': 2001:dc3::35#53 May 11 15:44:14 masterdns.homelab.com named[3946]: network unreachable resolving './DNSKEY/IN': 2001:500:a8::e#53 May 11 15:44:14 masterdns.homelab.com named[3946]: network unreachable resolving './DNSKEY/IN': 2001:500:2f::f#53 May 11 15:44:14 masterdns.homelab.com named[3946]: network unreachable resolving './DNSKEY/IN': 2001:500:2d::d#53 May 11 15:44:14 masterdns.homelab.com named[3946]: network unreachable resolving './DNSKEY/IN': 2001:dc3::35#53 May 11 15:44:14 masterdns.homelab.com named[3946]: managed-keys-zone: Key 20326 for zone . acceptance timer complet> May 11 15:44:14 masterdns.homelab.com named[3946]: resolver priming query complete ``` ###### 7. permit tcp&udp port 53 in firewall ``` [root@masterdns named]# firewall-cmd --permanent --add-port=53/tcp success [root@masterdns named]# firewall-cmd --permanent --add-port=53/udp success [root@masterdns named]# firewall-cmd --reload success ``` ###### 8. check bind config ``` [root@masterdns named]# named-checkconf /etc/named.conf [root@masterdns named]# named-checkzone homelab.com /var/named/forward.homelab zone homelab.com/IN: loaded serial 2002022401 OK [root@masterdns named]# named-checkzone homelab.com /var/named/reverse.homelab zone homelab.com/IN: loaded serial 2002022401 OK ``` #### Configure client and test DNS ###### 1. configure DNS on client edit /etc/NetworkManager/NetworkManager.conf, append dns=none in main section ``` [main] #plugins=ifcfg-rh dns=none ``` edit /etc/resolv.conf to point nameserver to master DNS server IP ``` nameserver 192.168.122.66 ``` restart network manager ``` $ systemctl restart NetworkManager # Or $ nmcli networking off $ nmcli networking on ``` ``` $ systemctl status NetworkManager $ nmcli -o ``` ###### 2. test dns server on the client ``` [root@clientdns ~]# dig masterdns.homelab.com ; <<>> DiG 9.11.26-RedHat-9.11.26-6.el8 <<>> masterdns.homelab.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39545 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 7d9f5fbf60d6ab125e48f8d4627b539b75931132247c261d (good) ;; QUESTION SECTION: ;masterdns.homelab.com. IN A ;; ANSWER SECTION: masterdns.homelab.com. 86400 IN A 192.168.122.66 ;; AUTHORITY SECTION: homelab.com. 86400 IN NS masterdns.homelab.com. homelab.com. 86400 IN NS slavedns.homelab.com. ;; ADDITIONAL SECTION: slavedns.homelab.com. 86400 IN A 192.168.122.67 ;; Query time: 1 msec ;; SERVER: 192.168.122.66#53(192.168.122.66) ;; WHEN: Wed May 11 16:11:39 AEST 2022 ;; MSG SIZE rcvd: 147 ``` ``` [root@clientdns ~]# dig -x 192.168.122.66 ; <<>> DiG 9.11.26-RedHat-9.11.26-6.el8 <<>> -x 192.168.122.66 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 1630 ;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 78b4aba5e3b240ff4272eae1627b54174691dfada974c494 (good) ;; QUESTION SECTION: ;66.122.168.192.in-addr.arpa. IN PTR ;; AUTHORITY SECTION: 122.168.192.in-addr.arpa. 10800 IN SOA masterdns.homelab.com. root.homelab.com.122.168.192.in-addr.arpa. 2002022401 10800 15 604800 10800 ;; Query time: 1 msec ;; SERVER: 192.168.122.66#53(192.168.122.66) ;; WHEN: Wed May 11 16:13:44 AEST 2022 ;; MSG SIZE rcvd: 158 ``` ``` [root@clientdns ~]# nslookup masterdns.homelab.com Server: 192.168.122.66 Address: 192.168.122.66#53 Name: masterdns.homelab.com Address: 192.168.122.66 [root@clientdns ~]# nslookup kmaster.homelab.com Server: 192.168.122.66 Address: 192.168.122.66#53 Name: kmaster.homelab.com Address: 192.168.122.10 ``` #### Setup Slave DNS server ###### 1. configure hostname ``` $ hostnamectl set-hostname slavedns.homelab.com ``` ###### 2. install bind packages ``` $ yum install bind bind-utils -y ``` ###### 3. edit bind configuration /etc/named.conf ``` 11 listen-on port 53 { 127.0.0.1; 192.168.122.67; }; # add slave server IP 19 allow-query { localhost; 192.168.122.0/24; }; # add subnet 31 recursion no; # set no 57 zone "homelab.com" IN { 58 type slave; 59 file "slaves/homelab.forward.zone"; 60 masters {192.168.122.66;}; 61 }; 62 zone "122.168.192.in-addr.arpa" IN { 63 type slave; 64 file "slaves/homelab.reverse.zone"; 65 masters {192.168.122.66;}; 66 }; ``` ###### 4. enable and start bind service ``` [root@slavedns ~]# systemctl enable named Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service. [root@slavedns ~]# systemctl start named ``` check zone files are replicated from the master ``` [root@slavedns ~]# ls -l /var/named/slaves/ total 8 -rw-r--r--. 1 named named 403 May 11 16:54 homelab.forward.zone -rw-r--r--. 1 named named 647 May 11 16:54 homelab.reverse.zone ``` ###### 5. permit tcp&udp port 53 in firewall ``` [root@slavedns ~]# firewall-cmd --permanent --add-port=53/tcp success [root@slavedns ~]# firewall-cmd --permanent --add-port=53/udp success [root@slavedns ~]# firewall-cmd --reload success ``` #### Configure client with slave DNS server and test edit /etc/resolv.conf to add slave DNS server IP ``` nameserver 192.168.122.66 nameserver 192.168.122.67 ``` ``` [root@clientdns ~]# dig kmaster.homelab.com ; <<>> DiG 9.11.26-RedHat-9.11.26-6.el8 <<>> kmaster.homelab.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31038 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 3cd0bac00c540b12b6aea24d627b66bff6b5d13bf7f03b32 (good) ;; QUESTION SECTION: ;kmaster.homelab.com. IN A ;; ANSWER SECTION: kmaster.homelab.com. 86400 IN A 192.168.122.10 ;; AUTHORITY SECTION: homelab.com. 86400 IN NS masterdns.homelab.com. homelab.com. 86400 IN NS slavedns.homelab.com. ;; ADDITIONAL SECTION: masterdns.homelab.com. 86400 IN A 192.168.122.66 slavedns.homelab.com. 86400 IN A 192.168.122.67 ;; Query time: 0 msec ;; SERVER: 192.168.122.66#53(192.168.122.66) ;; WHEN: Wed May 11 17:33:18 AEST 2022 ;; MSG SIZE rcvd: 171 [root@clientdns ~]# dig masterdns.homelab.com ; <<>> DiG 9.11.26-RedHat-9.11.26-6.el8 <<>> masterdns.homelab.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14769 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 84e5c144d21c0477af1ce614627ba6791a8562dec6758642 (good) ;; QUESTION SECTION: ;masterdns.homelab.com. IN A ;; ANSWER SECTION: masterdns.homelab.com. 86400 IN A 192.168.122.66 ;; AUTHORITY SECTION: homelab.com. 86400 IN NS slavedns.homelab.com. homelab.com. 86400 IN NS masterdns.homelab.com. ;; ADDITIONAL SECTION: slavedns.homelab.com. 86400 IN A 192.168.122.67 ;; Query time: 1 msec ;; SERVER: 192.168.122.66#53(192.168.122.66) ;; WHEN: Wed May 11 22:05:12 AEST 2022 ;; MSG SIZE rcvd: 147 [root@clientdns ~]# dig slavedns.homelab.com ; <<>> DiG 9.11.26-RedHat-9.11.26-6.el8 <<>> slavedns.homelab.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20928 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: ef75601e4be9fe0749919a2a627ba6a830054e0244d205da (good) ;; QUESTION SECTION: ;slavedns.homelab.com. IN A ;; ANSWER SECTION: slavedns.homelab.com. 86400 IN A 192.168.122.67 ;; AUTHORITY SECTION: homelab.com. 86400 IN NS slavedns.homelab.com. homelab.com. 86400 IN NS masterdns.homelab.com. ;; ADDITIONAL SECTION: masterdns.homelab.com. 86400 IN A 192.168.122.66 ;; Query time: 1 msec ;; SERVER: 192.168.122.66#53(192.168.122.66) ;; WHEN: Wed May 11 22:06:00 AEST 2022 ;; MSG SIZE rcvd: 147 ``` ``` [root@clientdns ~]# nslookup kmaster.homelab.com ;; Got recursion not available from 192.168.122.66, trying next server Server: 192.168.122.67 Address: 192.168.122.67#53 Name: kmaster.homelab.com Address: 192.168.122.10 ;; Got recursion not available from 192.168.122.66, trying next server [root@clientdns ~]# nslookup masterdns.homelab.com ;; Got recursion not available from 192.168.122.66, trying next server Server: 192.168.122.67 Address: 192.168.122.67#53 Name: masterdns.homelab.com Address: 192.168.122.66 ;; Got recursion not available from 192.168.122.66, trying next server [root@clientdns ~]# nslookup slavedns.homelab.com ;; Got recursion not available from 192.168.122.66, trying next server Server: 192.168.122.67 Address: 192.168.122.67#53 Name: slavedns.homelab.com Address: 192.168.122.67 ;; Got recursion not available from 192.168.122.66, trying next server ``` use recurse or no recurse in nslookup command ``` [root@clientdns ~]# nslookup > set norec > kmaster.homelab.com Server: 192.168.122.66 Address: 192.168.122.66#53 Name: kmaster.homelab.com Address: 192.168.122.10 > set rec > > kmaster.homelab.com ;; Got recursion not available from 192.168.122.66, trying next server Server: 192.168.122.67 Address: 192.168.122.67#53 Name: kmaster.homelab.com Address: 192.168.122.10 ;; Got recursion not available from 192.168.122.66, trying next server ``` reverse lookup ``` [root@clientdns ~]# dig -x 192.168.122.10 ; <<>> DiG 9.11.26-RedHat-9.11.26-6.el8 <<>> -x 192.168.122.10 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31257 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: bcb907f106749e75cfbaeae6627bb1737662c91a35e0ec46 (good) ;; QUESTION SECTION: ;10.122.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 10.122.168.192.in-addr.arpa. 86400 IN PTR kmaster. ;; AUTHORITY SECTION: 122.168.192.in-addr.arpa. 86400 IN NS masterdns.homelab.com. 122.168.192.in-addr.arpa. 86400 IN NS slavedns.homelab.com. ;; ADDITIONAL SECTION: masterdns.homelab.com. 86400 IN A 192.168.122.66 slavedns.homelab.com. 86400 IN A 192.168.122.67 ;; Query time: 1 msec ;; SERVER: 192.168.122.66#53(192.168.122.66) ;; WHEN: Wed May 11 22:52:02 AEST 2022 ;; MSG SIZE rcvd: 195 ``` #### Caching and forwarding mode edit /etc/named.conf, add "forwarders" option and enable recursion. ``` 10 options { 11 listen-on port 53 { 127.0.0.1; 192.168.122.66; }; # add master DNS server IP 12 listen-on-v6 port 53 { ::1; }; 13 directory "/var/named"; 14 dump-file "/var/named/data/cache_dump.db"; 15 statistics-file "/var/named/data/named_stats.txt"; 16 memstatistics-file "/var/named/data/named_mem_stats.txt"; 17 secroots-file "/var/named/data/named.secroots"; 18 recursing-file "/var/named/data/named.recursing"; 19 allow-query { localhost; 192.168.122.0/24; }; # add subnet 20 allow-transfer { localhost; 192.168.122.67; }; # add slave DNS server IP 21 22 /* 23 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. 24 - If you are building a RECURSIVE (caching) DNS server, you need to enable 25 recursion. 26 - If your recursive DNS server has a public IP address, you MUST enable access 27 control to limit queries to your legitimate users. Failing to do so will 28 cause your server to become part of large scale DNS amplification 29 attacks. Implementing BCP38 within your network would greatly 30 reduce such attack surface 31 */ 32 recursion yes; # enable recursion 33 34 dnssec-enable yes; 35 dnssec-validation yes; 36 37 managed-keys-directory "/var/named/dynamic"; 38 39 pid-file "/run/named/named.pid"; 40 session-keyfile "/run/named/session.key"; 41 42 /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */ 43 include "/etc/crypto-policies/back-ends/bind.config"; 44 45 forward only; 46 forwarders { 47 8.8.8.8; 48 8.8.4.4; 49 }; 50 }; ``` #### Set alias (CNAME) edit /var/named/forward.homelab, add alias ``` 19 ; A records to resolve ip from name 20 masterdns IN A 192.168.122.66 21 slavedns IN A 192.168.122.67 22 kmaster IN A 192.168.122.10 ; k8s master node 23 kubernetes.homelab.com. IN CNAME kmaster ; alias, use FQDN 24 k8s IN CNAME kmaster ; alias, just hostname, it equal k8s.homelab.com. ``` ``` [root@clientdns ~]# nslookup k8s.homelab.com Server: 192.168.122.66 Address: 192.168.122.66#53 k8s.homelab.com canonical name = kmaster.homelab.com. Name: kmaster.homelab.com Address: 192.168.122.10 [root@clientdns ~]# nslookup kubernetes.homelab.com Server: 192.168.122.66 Address: 192.168.122.66#53 kubernetes.homelab.com canonical name = kmaster.homelab.com. Name: kmaster.homelab.com Address: 192.168.122.10 ``` #### Tcpdump DNS query ###### Recursion "yes" on master DNS server ``` [root@clientdns ~]# nslookup kubernetes.homelab.com Server: 192.168.122.66 Address: 192.168.122.66#53 kubernetes.homelab.com canonical name = kmaster.homelab.com. Name: kmaster.homelab.com Address: 192.168.122.10 ``` Client sents dns query with "recursion" flag, tell DNS server to do query recursively. ![](https://i.imgur.com/QfZPfbB.png) Master DNS server return answer and also tell client that the server can do query recursively. ![](https://i.imgur.com/8H6JP95.png) ###### Recursion "no" on master and slave. ``` [root@clientdns ~]# nslookup kmaster.homelab.com ;; Got recursion not available from 192.168.122.66, trying next server Server: 192.168.122.67 Address: 192.168.122.67#53 Name: kmaster.homelab.com Address: 192.168.122.10 ;; Got recursion not available from 192.168.122.66, trying next server ``` Client sents query with "recursion" flag, tell DNS server to do query recursively. ![](https://i.imgur.com/sf1TXcv.png) Master DNS server returns answer and tell client that the server can't do recursive queries. ![](https://i.imgur.com/S0PX81X.png) Client sent query with "recursion" flag to the slave DNS server. (because both master and slave are configured in /etc/resolv.conf, noslookup tries next nameserver) ``` [root@clientdns ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.122.66 nameserver 192.168.122.67 ``` ![](https://i.imgur.com/X1VwSI6.png) Slave DNS server returns answer and tell client that the server can't do recursive queries. ![](https://i.imgur.com/LiCWS1Z.png) #### KB ###### recursion If yes, and a DNS query requests recursion, then the server attempts to do all the work required to answer the query. If recursion is off and the server does not already know the answer, it returns a referral response. The default is yes. Note that setting recursion no does not prevent clients from getting data from the server’s cache; it only prevents new data from being cached as an effect of client queries. Caching may still occur as an effect of the server’s internal operation, such as NOTIFY address lookups. ###### zone file syntax - Comments start with a semicolon ";" and go to the end of line. - Empty lines are allowed; any combination of tabs and spaces acts as a delimiter. - RR are defined line by line as : [Name] [TTL] [CLASS] TYPE RDATA - if no Name, the name is taken from the last stated RR - if Name exists, it starts at the first character of the line - if Name is not dot-terminated (non FQDN), the default domain name defined by $ORIGIN directives is concatenated to Name - if no TTL, the TTL is defined by $TTL directives. - if no CLASS, the CLASS is taken from the last stated RR - TTL and CLASS can be exchanged. - $TTL integer_value sets the default value of TTL for following RRs in file (RFC2308, bind>8.1) - $ORIGIN fqdn_name sets the default value of domain name for following RRs in file. Initially, in BIND, the value is set to the current zone name. - $INCLUDE filename inserts the named file into the current file. NB: be careful about value of $TTL or $ORIGIN after a $INCLUDE - "@" is used to denote the current default domain name. - "(" and ")" are used to group data that crosses a line boundary. Line terminations are not recognized within parentheses - "\" is used to quote special characters. Ex : "\." can be used to place a dot character in a label; "\223" is the 8-bit character corresponding to decimal value 223. ###### stylistic hints - Organize RR : Start with SOA, NS and MX of the zone, continue with delegation (NS) and glue. Group RR by names. - Comments are useful - Use spaces or tabulations for vertical alignment - Start file with a $ORIGIN and a $TTL - Try to avoid writing of the zone name in the file - Generate serial number in SOA as : year/month/day/version 4+2+2+2. - BE CAREFUL: Modify the serial number each time the master file is modified ###### dig command query with tcp ``` $ dig +tcp kmaster.homelab.com ``` ###### for centos 8, update yum repos mirror ``` $ sudo su - $ cd /etc/yum.repos.d/ $ sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* $ sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* $ sudo yum update -y ``` ###### install dns tools (dig and drill command) ``` apt install dnsutils ldnsutils ``` #### Reference https://www.linuxteck.com/how-to-install-and-configure-master-slave-dns-in-centos-rhel-7-6/ http://www-inf.int-evry.fr/~hennequi/CoursDNS/NOTES-COURS_eng/syntax.html https://techglimpse.com/failed-metadata-repo-appstream-centos-8/ https://bind9.readthedocs.io/en/v9_16_6/reference.html https://medium.com/liveonnetwork/need-a-refresher-on-dns-concepts-4dcdfda6365d