ืžื“ืจื™ืš ืฉืœื‘ ืื—ืจ ืฉืœื‘ ืœื”ื’ื“ืจืช ืฉืจืช BIND DNS ื‘ืกื‘ื™ื‘ืช chroot ืขื‘ื•ืจ Red Hat (RHEL/CentOS) 7

ืชืจื’ื•ื ื”ืžืืžืจ ืฉื”ื•ื›ืŸ ืœืชืœืžื™ื“ื™ ื”ืงื•ืจืก "ืื‘ื˜ื—ืช ืœื™ื ื•ืงืก". ืžืขื•ื ื™ื™ื ื™ื ืœื”ืชืคืชื— ื‘ื›ื™ื•ื•ืŸ ื–ื”? ืฆืคื• ื‘ื”ืงืœื˜ื” ืฉืœ โ€‹โ€‹ืฉื™ื“ื•ืจ ื›ื™ืชืช ื”ืืžืŸ ืฉืœ ืื™ื•ื•ืŸ ืคื™ืกืงื•ื ื•ื‘ "ืื‘ื˜ื—ื” ื‘ืœื™ื ื•ืงืก ื‘ื”ืฉื•ื•ืื” ืœ-Windows ื•-MacOS"

ืžื“ืจื™ืš ืฉืœื‘ ืื—ืจ ืฉืœื‘ ืœื”ื’ื“ืจืช ืฉืจืช BIND DNS ื‘ืกื‘ื™ื‘ืช chroot ืขื‘ื•ืจ Red Hat (RHEL/CentOS) 7

ื‘ืžืืžืจ ื–ื”, ืื ื™ ืื“ืจื™ืš ืื•ืชืš ืœืื•ืจืš ื”ืฉืœื‘ื™ื ืœื”ื’ื“ืจืช ืฉืจืช DNS ื‘-RHEL 7 ืื• CentOS 7. ื”ืฉืชืžืฉืชื™ ื‘-Red Hat Enterprise Linux 7.4 ืœื”ื“ื’ืžื”. ื”ืžื˜ืจื” ืฉืœื ื• ื”ื™ื ืœื™ืฆื•ืจ ืจืฉื•ืžืช A ืื—ืช ื•ืจืฉื•ืžืช PTR ืื—ืช ืขื‘ื•ืจ ืื–ื•ืจื™ ื”ื—ื™ืคื•ืฉ ืงื“ื™ืžื” ื•ืื—ื•ืจื”, ื‘ื”ืชืืžื”.

ืจืืฉื™ืช, ื”ืชืงืŸ ืืช ื—ื‘ื™ืœื•ืช ื”-rpm ื”ื“ืจื•ืฉื•ืช ืขื‘ื•ืจ ืฉืจืช ื”-DNS.

ื”ืขืจื”: ืขื‘ื•ืจ RHEL ืืชื” ื—ื™ื™ื‘ ืžื ื•ื™ RHN ืคืขื™ืœ, ืื• ืฉืืชื” ื™ื›ื•ืœ ื”ื’ื“ืจ ืžืื’ืจ ืœื ืžืงื•ื•ืŸ ืžืงื•ืžื™, ืฉืื™ืชื• ืžื ื”ืœ ื”ื—ื‘ื™ืœื•ืช "yum" ื™ื›ื•ืœ ืœื”ืชืงื™ืŸ ืืช ื—ื‘ื™ืœื•ืช ื”-rpm ื•ืืช ื”ืชืœื•ืช ื”ื“ืจื•ืฉื™ื.

# yum install bind bind-chroot caching-nameserver

ื”ื”ื’ื“ืจื•ืช ืฉืœื™:

# hostname
golinuxhub-client.example
ะœะพะน IP-ะฐะดั€ะตั 192.168.1.7
# ip address | egrep 'inet.*enp0s3'
    inet 192.168.1.7/24 brd 192.168.1.255 scope global dynamic enp0s3

ืžื›ื™ื•ื•ืŸ ืฉืื ื• ื ืฉืชืžืฉ ื‘-chroot, ืขืœื™ื ื• ืœื”ืฉื‘ื™ืช ืืช ื”ืฉื™ืจื•ืช.

# systemctl stop named
# systemctl disable named

ืœืื—ืจ ืžื›ืŸ ื”ืขืชืง ืืช ื”ืงื‘ืฆื™ื ื”ื“ืจื•ืฉื™ื ืœืกืคืจื™ื™ืช chroot.
ื”ืขืจื”. ื”ืฉืชืžืฉ ื‘ื˜ื™ืขื•ืŸ -p ื‘ืงื‘ื•ืฆื” cp ืœืฉืžื•ืจ ืขืœ ื”ื–ื›ื•ื™ื•ืช ื•ื”ื‘ืขืœื™ื.

[root@golinuxhub-client ~]# cp -rpvf /usr/share/doc/bind-9.9.4/sample/etc/*  /var/named/chroot/etc/
โ€˜/usr/share/doc/bind-9.9.4/sample/etc/named.confโ€™ -> โ€˜/var/named/chroot/etc/named.confโ€™
โ€˜/usr/share/doc/bind-9.9.4/sample/etc/named.rfc1912.zonesโ€™ -> โ€˜/var/named/chroot/etc/named.rfc1912.zonesโ€™

ืœืื—ืจ ืžื›ืŸ ื”ืขืชืง ืืช ื”ืงื‘ืฆื™ื ื”ืžืฉื•ื™ื›ื™ื ืœืื–ื•ืจ ืœืžื™ืงื•ื ื—ื“ืฉ.

[root@golinuxhub-client ~]# cp -rpvf /usr/share/doc/bind-9.9.4/sample/var/named/* /var/named/chroot/var/named/
โ€˜/usr/share/doc/bind-9.9.4/sample/var/named/dataโ€™ -> โ€˜/var/named/chroot/var/named/dataโ€™
โ€˜/usr/share/doc/bind-9.9.4/sample/var/named/my.external.zone.dbโ€™ -> โ€˜/var/named/chroot/var/named/my.external.zone.dbโ€™
โ€˜/usr/share/doc/bind-9.9.4/sample/var/named/my.internal.zone.dbโ€™ -> โ€˜/var/named/chroot/var/named/my.internal.zone.dbโ€™
โ€˜/usr/share/doc/bind-9.9.4/sample/var/named/named.caโ€™ -> โ€˜/var/named/chroot/var/named/named.caโ€™
โ€˜/usr/share/doc/bind-9.9.4/sample/var/named/named.emptyโ€™ -> โ€˜/var/named/chroot/var/named/named.emptyโ€™
โ€˜/usr/share/doc/bind-9.9.4/sample/var/named/named.localhostโ€™ -> โ€˜/var/named/chroot/var/named/named.localhostโ€™
โ€˜/usr/share/doc/bind-9.9.4/sample/var/named/named.loopbackโ€™ -> โ€˜/var/named/chroot/var/named/named.loopbackโ€™
โ€˜/usr/share/doc/bind-9.9.4/sample/var/named/slavesโ€™ -> โ€˜/var/named/chroot/var/named/slavesโ€™
โ€˜/usr/share/doc/bind-9.9.4/sample/var/named/slaves/my.ddns.internal.zone.dbโ€™ -> โ€˜/var/named/chroot/var/named/slaves/my.ddns.internal.zone.dbโ€™
โ€˜/usr/share/doc/bind-9.9.4/sample/var/named/slaves/my.slave.internal.zone.dbโ€™ -> โ€˜/var/named/chroot/var/named/slaves/my.slave.internal.zone.dbโ€™
```bash
ะขะตะฟะตั€ัŒ ะดะฐะฒะฐะนั‚ะต ะฟะพัะผะพั‚ั€ะธะผ ะฝะฐ ะพัะฝะพะฒะฝะพะน ั„ะฐะนะป ะบะพะฝั„ะธะณัƒั€ะฐั†ะธะธ.
```bash
# cd /var/named/chroot/etc/

ื ืงื” ืืช ื”ืชื•ื›ืŸ ืฉืœ named.conf ื•ื”ื“ื‘ืง ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื.

[root@golinuxhub-client etc]# vim named.conf
options {
        listen-on port 53 { 127.0.0.1; any; };
#       listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { localhost; any; };
        allow-query-cache { localhost; any; };
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

view my_resolver {
        match-clients      { localhost; any; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
};

ื™ืฉ ืœื”ื•ืกื™ืฃ ืžื™ื“ืข ืกืคืฆื™ืคื™ ืœืื–ื•ืจ /var/named/chroot/etc/named.rfc1912.zones. ื”ื•ืกืฃ ืืช ื”ืขืจื›ื™ื ืœืžื˜ื”. ื”ืงื•ื‘ืฅ example.zone ื”ื•ื ืงื•ื‘ืฅ ืื–ื•ืจ ื”ื—ื™ืคื•ืฉ ืงื“ื™ืžื”, ื• example.rzone - ืงื•ื‘ืฅ ืื–ื•ืจ ื”ืคื•ืš.

ื”ืขืจื” ื—ืฉื•ื‘ื”: ืื–ื•ืจ ื—ื™ืคื•ืฉ ื”ืคื•ืš ืžื›ื™ืœ ืืช 1.168.192 ืžื›ื™ื•ื•ืŸ ืฉื›ืชื•ื‘ืช ื”-IP ืฉืœื™ ื”ื™ื 192.168.1.7

zone "example" IN {
        type master;
        file "example.zone";
        allow-update { none; };
};

zone "1.168.192.in-addr.arpa" IN {
        type master;
        file "example.rzone";
        allow-update { none; };
};

ื”ืงื‘ืฆื™ื ื”ืžืฉื•ื™ื›ื™ื ืœืื–ื•ืจื™ื ืžืžื•ืงืžื™ื ื›ืืŸ:

# cd /var/named/chroot/var/named/

ืœืื—ืจ ืžื›ืŸ, ื ื™ืฆื•ืจ ืงื‘ืฆื™ื ืขื‘ื•ืจ ืื–ื•ืจื™ ืงื“ื™ืžื” ื•ืื—ื•ืจื”. ืฉืžื•ืช ื”ืงื‘ืฆื™ื ื™ื”ื™ื• ื–ื”ื™ื ืœืขื™ืœ ื‘ืงื•ื‘ืฅ named.rfc1912.zones. ื™ืฉ ืœื ื• ื›ื‘ืจ ื›ืžื” ืชื‘ื ื™ื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ืฉืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ื”ืŸ.

# cp -p named.localhost  example.zone
# cp -p named.loopback example.rzone

ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช, ื”ื”ืจืฉืื•ืช ื”ื ื•ื›ื—ื™ื•ืช ื‘ื›ืœ ื”ืงื‘ืฆื™ื ื•ื”ืกืคืจื™ื•ืช ืฉื™ื™ื›ื•ืช ืœ ืฉื•ืจืฉ.

[root@golinuxhub-client named]# ll
total 32
drwxr-xr-x. 2 root root    6 May 22  2017 data
-rw-r--r--. 1 root root  168 May 22  2017 example.rzone
-rw-r--r--. 1 root root  152 May 22  2017 example.zone
-rw-r--r--. 1 root root   56 May 22  2017 my.external.zone.db
-rw-r--r--. 1 root root   56 May 22  2017 my.internal.zone.db
-rw-r--r--. 1 root root 2281 May 22  2017 named.ca
-rw-r--r--. 1 root root  152 May 22  2017 named.empty
-rw-r--r--. 1 root root  152 May 22  2017 named.localhost
-rw-r--r--. 1 root root  168 May 22  2017 named.loopback
drwxr-xr-x. 2 root root   71 Feb 12 21:02 slaves

ืฉื ื” ืืช ื”ื”ืจืฉืื•ืช ืฉืœ ื›ืœ ื”ืงื‘ืฆื™ื ื›ื“ื™ ืœืฆื™ื™ืŸ ืืช ื”ืžืฉืชืžืฉ ื›ื‘ืขืœื™ื ืฉื•ืจืฉ ื•ืงื‘ื•ืฆื” ื‘ืฉื.

# chown root:named *

ืื‘ืœ ื‘ืฉื‘ื™ืœ ื ืชื•ื ื™ื ื”ื‘ืขืœื™ื ื—ื™ื™ื‘ ืœื”ื™ื•ืช named:named.

# chown -R  named:named data
# ls -l
total 32
drwxr-xr-x. 2 named named    6 May 22  2017 data
-rw-r--r--. 1 root  named  168 May 22  2017 example.rzone
-rw-r--r--. 1 root  named  152 May 22  2017 example.zone
-rw-r--r--. 1 root  named   56 May 22  2017 my.external.zone.db
-rw-r--r--. 1 root  named   56 May 22  2017 my.internal.zone.db
-rw-r--r--. 1 root  named 2281 May 22  2017 named.ca
-rw-r--r--. 1 root  named  152 May 22  2017 named.empty
-rw-r--r--. 1 root  named  152 May 22  2017 named.localhost
-rw-r--r--. 1 root  named  168 May 22  2017 named.loopback
drwxr-xr-x. 2 root  named   71 Feb 12 21:02 slaves

ื”ื•ืกืฃ ืืช ื”ืชื•ื›ืŸ ื”ื‘ื ืœืงื•ื‘ืฅ ืื–ื•ืจ ืงื“ื™ืžื”. ื›ืืŸ ืื ื• ื™ื•ืฆืจื™ื ืจืฉื•ืžืช A ืขื‘ื•ืจ localhost (golinuxhub-client) ื•ืขื•ื“ ืขื‘ื•ืจ ื”ืฉืจืช (golinuxhub-server).

# vim example.zone
$TTL 1D
@       IN SOA  example. root (
                                        1       ; serial
                                        3H      ; refresh
                                        15M     ; retry
                                        1W      ; expire
                                        1D )    ; minimum

                IN NS           example.

                        IN A 192.168.1.7
golinuxhub-server       IN A 192.168.1.5
golinuxhub-client       IN A 192.169.1.7

ืœืื—ืจ ืžื›ืŸ, ื”ื•ืกืฃ ืืช ื”ืชื•ื›ืŸ ืœืงื•ื‘ืฅ ื”ืื–ื•ืจ ื”ื”ืคื•ืš. ื›ืืŸ ืื ื• ื™ื•ืฆืจื™ื ืจืฉื•ืžืช PTR ืขื‘ื•ืจ golinuxhub-client ื•ืขื‘ื•ืจ golinuxhub-server.

# vim example.rzone
$TTL 1D
@       IN SOA  example. root.example. (
                                        1997022700      ; serial
                                        28800           ; refresh
                                        14400           ; retry
                                        3600000         ; expire
                                        86400  )        ; minimum

        IN NS   example.
5       IN PTR  golinuxhub-server.example.
7       IN PTR  golinuxhub-client.example.

ืœืคื ื™ ืฉื ืฉื™ืง ืืช ื”ืฉื™ืจื•ืช ื‘ืฉื-chroot, ื‘ื•ืื• ื ื‘ื“ื•ืง ืืช ื”ืชืฆื•ืจื” ืฉืœ ืงื•ื‘ืฅ ื”ืื–ื•ืจ.

[root@golinuxhub-client named]# named-checkzone golinuxhub-client.example example.zone
zone golinuxhub-client.example/IN: loaded serial 1
OK

[root@golinuxhub-client named]# named-checkzone golinuxhub-client.example example.rzone
zone golinuxhub-client.example/IN: loaded serial 1997022700
OK

ื”ื›ืœ ื ืจืื” ื˜ื•ื‘. ื›ืขืช ื‘ื“ื•ืง ืืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” ื”ื‘ืื”.

[root@golinuxhub-client named]# named-checkconf -t /var/named/chroot/ /etc/named.conf

ืื– ื”ื›ืœ ื”ื•ืฉืœื ื‘ื”ืฆืœื—ื”.

[root@golinuxhub-client named]# echo $?
0

ื”ืขืจื” ื—ืฉื•ื‘ื”: ื™ืฉ ืœื™ SELinux ื‘ืžืฆื‘ ืžืชื™ืจื ื™

# getenforce
Permissive

ื”ื›ืœ ื ืจืื” ื˜ื•ื‘, ืื– ื”ื’ื™ืข ื”ื–ืžืŸ ืœื”ืฉื™ืง ืืช ื”ืฉื™ืจื•ืช ืฉืœื ื• ื‘ืฉื-chroot .

[root@golinuxhub-client named]# systemctl restart named-chroot

[root@golinuxhub-client named]# systemctl status named-chroot
โ— named-chroot.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2018-02-12 21:53:23 IST; 19s ago
  Process: 5236 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 5327 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 5325 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 5330 (named)
   CGroup: /system.slice/named-chroot.service
           โ””โ”€5330 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot

Feb 12 21:53:23 golinuxhub-client.example named[5330]: managed-keys-zone/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone 0.in-addr.arpa/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone 1.0.0.127.in-addr.arpa/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone 1.168.192.in-addr.arpa/IN/my_resolver: loaded serial 1997022700
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone example/IN/my_resolver: loaded serial 1
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone localhost/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone localhost.localdomain/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: all zones loaded
Feb 12 21:53:23 golinuxhub-client.example named[5330]: running
```bash
ะฃะฑะตะดะธั‚ะตััŒ, ั‡ั‚ะพ resolv.conf ัะพะดะตั€ะถะธั‚ ะฒะฐัˆ IP-ะฐะดั€ะตั, ั‡ั‚ะพะฑั‹ ะพะฝ ะผะพะณ ั€ะฐะฑะพั‚ะฐั‚ัŒ ะฒ ะบะฐั‡ะตัั‚ะฒะต DNS-ัะตั€ะฒะตั€ะฐ.
```bash
# cat /etc/resolv.conf
search example
nameserver 192.168.1.7
```bash
ะ”ะฐะฒะฐะนั‚ะต ะฟั€ะพะฒะตั€ะธะผ ะฝะฐัˆ DNS-ัะตั€ะฒะตั€ ะดะปั ะพะฑั€ะฐั‚ะฝะพะน ะทะพะฝั‹, ะธัะฟะพะปัŒะทัƒั dig.
```bash
[root@golinuxhub-client named]# dig -x 192.168.1.5

; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> -x 192.168.1.5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40331
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;5.1.168.192.in-addr.arpa.      IN      PTR

;; ANSWER SECTION:
5.1.168.192.in-addr.arpa. 86400 IN      PTR     golinuxhub-server.example.

;; AUTHORITY SECTION:
1.168.192.in-addr.arpa. 86400   IN      NS      example.

;; ADDITIONAL SECTION:
example.                86400   IN      A       192.168.1.7

;; Query time: 1 msec
;; SERVER: 192.168.1.7#53(192.168.1.7)
;; WHEN: Mon Feb 12 22:13:17 IST 2018
;; MSG SIZE  rcvd: 122

ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช, ืงื™ื‘ืœื ื• ืชืฉื•ื‘ื” ื—ื™ื•ื‘ื™ืช (ANSWER) ืœื‘ืงืฉืชื ื• (QUERY).

[root@golinuxhub-client named]# dig -x 192.168.1.7

; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> -x 192.168.1.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55804
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;7.1.168.192.in-addr.arpa.      IN      PTR

;; ANSWER SECTION:
7.1.168.192.in-addr.arpa. 86400 IN      PTR     golinuxhub-client.example.

;; AUTHORITY SECTION:
1.168.192.in-addr.arpa. 86400   IN      NS      example.

;; ADDITIONAL SECTION:
example.                86400   IN      A       192.168.1.7

;; Query time: 1 msec
;; SERVER: 192.168.1.7#53(192.168.1.7)
;; WHEN: Mon Feb 12 22:12:54 IST 2018
;; MSG SIZE  rcvd: 122

ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื‘ื“ื•ืง ืืช ื”ืื–ื•ืจ ื”ื™ืฉื™ืจ ื‘ืื•ืชื• ืื•ืคืŸ.

[root@golinuxhub-client named]# nslookup golinuxhub-client.example
Server:         192.168.1.7
Address:        192.168.1.7#53

Name:   golinuxhub-client.example
Address: 192.169.1.7

[root@golinuxhub-client named]# nslookup golinuxhub-server.example
Server:         192.168.1.7
Address:        192.168.1.7#53

Name:   golinuxhub-server.example
Address: 192.168.1.5

ืžืืžืจ ื–ื” ืžืขื˜ ืžื™ื•ืฉืŸ ืžื›ื™ื•ื•ืŸ ืฉื‘-RHEL 7 ืื™ื ืš ืฆืจื™ืš ืขื•ื“ ืœื”ืขืชื™ืง ืืช ืงื‘ืฆื™ ืชืฆื•ืจืช ื”-bind ืœ-chroot. ืžื“ืจื™ืš ืฉืœื‘ ืื—ืจ ืฉืœื‘: ื”ื’ื“ืจ ืืช ืฉืจืช DNS ื‘ืืžืฆืขื•ืช bind chroot (CentOS/RHEL 7).

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”