William:                                  [email protected]

1. Install required package
# yum -y install bind bind-chroot dhcp

2. Configure DNS
# chkconfig named on
# vi /etc/name.rfc1912.zones
zone "linux.com" IN {
        type master;
        file "linux.com.db";
        allow-update { none; };
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.0.db";
        allow-update { none; };
};
# vi /var/named/linux.com.db
$TTL 1D
@       IN SOA  ns1.linux.com. root (
                                2011091101      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns1.linux.com.
ns1     A       192.168.0.123
www     A       192.168.0.123
# vi /var/named/192.168.0.db
$TTL 1D
@    IN SOA    ns1.linux.com. root (
                2011091101    ; serial
                    1D    ; refresh
                    1H    ; retry
                    1W    ; expire
                    3H )    ; minimum
    NS    ns1.linux.com.
ns1    A    192.168.0.123
23    PTR    desktop23.linux.com.
# /etc/init.d/named restart
# dig @localhost www.linux.com

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6 <<>> @localhost www.linux.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23967
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.linux.com.            IN    A

;; ANSWER SECTION:
www.linux.com.        86400    IN    A    192.168.0.123

;; AUTHORITY SECTION:
linux.com.        86400    IN    NS    ns1.linux.com.

;; ADDITIONAL SECTION:
ns1.linux.com.        86400    IN    A    192.168.0.123

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Sep 11 14:47:54 2011
;; MSG SIZE  rcvd: 81

# dig @localhost -x 192.168.0.23
; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6 <<>> @localhost -x 192.168.0.23
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16629
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;23.0.168.192.in-addr.arpa.    IN    PTR

;; ANSWER SECTION:
23.0.168.192.in-addr.arpa. 86400 IN    PTR    desktop23.linux.com.

;; AUTHORITY SECTION:
0.168.192.in-addr.arpa.    86400    IN    NS    ns1.linux.com.

;; ADDITIONAL SECTION:
ns1.linux.com.        86400    IN    A    192.168.0.123

;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Sep 11 14:48:28 2011
;; MSG SIZE  rcvd: 110

3. Configure DHCP
# chkconfig dhcpd on

# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
# vi /etc/dhcp/dhcpd.conf

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.10 192.168.0.20;
  option domain-name-servers 192.168.0.123;
  option domain-name "linux.com";
  option routers 192.168.0.123;
}
# /etc/init.d/dhcpd restart

4. Configure DDNS
# dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER
Note: you can find this in 'man dhcpd.conf' with a little search '/zone'
# vi /etc/named.rfc1912.zones
key DHCP_UPDATER {
    algorithm hmac-md5;
    secret "7T57Gnzs/Z+dismGWYTqYA==";
};

zone "linux.com" IN {
        type master;
        file "linux.com.db";
        allow-update { key DHCP_UPDATER; };
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.0.db";
        allow-update { key DHCP_UPDATER; };
};
# /etc/init.d/named restart

# vi /etc/dhcp/dhcpd.conf
key DHCP_UPDATER {
        algorithm hmac-md5;
        secret 7T57Gnzs/Z+dismGWYTqYA==;
};

zone LINUX.COM. {
        primary 127.0.0.1;
        key DHCP_UPDATER;
}

zone 0.168.192.in-addr.arpa. {
        primary 127.0.0.1;
        key DHCP_UPDATER;
}

ddns-update-style interim;
# /etc/init.d/dhcpd restart
# chmod g+w /var/named
# setsebool -P named_write_master_zones on


5. Configure Client
# hostname test1.linux.com
# vi /etc/dhcp/dhclient-eth0.conf

send fqdn.fqdn "test1.linux.com.";
send fqdn.encoded on;
send fqdn.server-update on;
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=dhcp


6. Test Settings
On Client
# /etc/init.d/network restart
On Server
# tail -f /var/log/message
ep 11 15:31:43 server23 dhcpd: DHCPREQUEST for 192.168.0.17 from 52:54:00:12:63:4a via eth0
Sep 11 15:31:43 server23 dhcpd: DHCPACK on 192.168.0.17 to 52:54:00:12:63:4a via eth0
Sep 11 15:35:30 server23 named[2769]: client 127.0.0.1#39495: signer "dhcp_updater" approved
Sep 11 15:35:30 server23 named[2769]: client 127.0.0.1#39495: updating zone 'linux.com/IN': adding an RR at 'test1.LINUX.COM' A
Sep 11 15:35:30 server23 named[2769]: client 127.0.0.1#39495: updating zone 'linux.com/IN': adding an RR at 'test1.LINUX.COM' TXT
Sep 11 15:35:31 server23 dhcpd: Added new forward map from test1.linux.com to 192.168.0.17
Sep 11 15:35:31 server23 named[2769]: client 127.0.0.1#53963: signer "dhcp_updater" approved
Sep 11 15:35:31 server23 named[2769]: client 127.0.0.1#53963: updating zone '0.168.192.in-addr.arpa/IN': deleting rrset at '17.0.168.192.in-addr.arpa' PTR
Sep 11 15:35:31 server23 named[2769]: client 127.0.0.1#53963: updating zone '0.168.192.in-addr.arpa/IN': adding an RR at '17.0.168.192.in-addr.arpa' PTR
Sep 11 15:35:31 server23 dhcpd: added reverse map from 17.0.168.192.in-addr.arpa. to test1.linux.com
# dig @localhost test1.linux.com
; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6 <<>> @localhost test1.linux.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13331
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;test1.linux.com.        IN    A

;; ANSWER SECTION:
test1.linux.com.    300    IN    A    192.168.0.17

;; AUTHORITY SECTION:
linux.com.        86400    IN    NS    ns1.linux.com.

;; ADDITIONAL SECTION:
ns1.linux.com.        86400    IN    A    192.168.0.123

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Sep 11 15:40:22 2011
;; MSG SIZE  rcvd: 83

# dig @localhost -x 192.168.0.17
; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6 <<>> @localhost -x 192.168.0.17
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52108
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;17.0.168.192.in-addr.arpa.    IN    PTR

;; ANSWER SECTION:
17.0.168.192.in-addr.arpa. 300    IN    PTR    test1.linux.com.

;; AUTHORITY SECTION:
0.168.192.in-addr.arpa.    86400    IN    NS    ns1.linux.com.

;; ADDITIONAL SECTION:
ns1.linux.com.        86400    IN    A    192.168.0.123

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Sep 11 15:40:57 2011
;; MSG SIZE  rcvd: 106


END ^_^