Μετάφραση του άρθρου που ετοιμάστηκε για φοιτητές του μαθήματος . Ενδιαφέρεστε να αναπτυχθείτε προς αυτή την κατεύθυνση; Παρακολουθήστε την ηχογράφηση της εκπομπής του master class του Ivan Piskunov

Σε αυτό το άρθρο, θα σας καθοδηγήσω στα βήματα για τη ρύθμιση ενός διακομιστή DNS σε RHEL 7 ή CentOS 7. Χρησιμοποίησα το Red Hat Enterprise Linux 7.4 για την επίδειξη. Ο στόχος μας είναι να δημιουργήσουμε μία εγγραφή A και μία εγγραφή PTR για τις ζώνες μπροστινής και αντίστροφης αναζήτησης, αντίστοιχα.
Αρχικά, εγκαταστήστε τα απαραίτητα πακέτα rpm για τον διακομιστή DNS.
ΣΗΜΕΙΩΣΗ: Για τη RHEL πρέπει να έχετε , ή μπορείτε , με το οποίο ο διαχειριστής πακέτων «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 είναι το αρχείο ζώνης αναζήτησης προς τα εμπρός και παράδειγμα.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/Στη συνέχεια, θα δημιουργήσουμε αρχεία για τις ζώνες εμπρός και πίσω. Τα ονόματα των αρχείων θα είναι ίδια με τα παραπάνω στο αρχείο με όνομα.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 *Αλλά για δεδομένα ο ιδιοκτήτης πρέπει να είναι ονομαζόμενος: επώνυμος.
# 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. .
Πηγή: www.habr.com
