This is an old revision of bind from 19.09.2013 19:35 edited by EvaggelosBalaskas.


Hits :

Bind – Dns :: Mini How To 


Latest stable version 9.4.2


http://www.isc.org/


filehttp://ftp.isc.org/isc/bind9/9[..]bind-9.4.2-P1.tar.gz


http://www.isc.org/sw/bind/arm94/index.php


Για chroot bind ρίξτε μια ματιά εδώ:
https://balaskas.gr/wk/chrootbind


top


Δημιουργία Χρήστη & Αρχείων


Δημιουργία χρήστη named
Δημιουργία group named
Δημιουργία αρχείου /etc/named.conf
Δημιουργία αρχείου /etc/rndc.conf
Δημιουργία καταλόγου /var/namedb/
Αλλαγή δικαιοδοσίας στα

/etc/named.conf
/etc/rndc.conf
/etc/namedb/
/var/namedb/
/var/log/bind

touch /etc/named.conf
touch /etc/rndc.conf
mkdir -pv /var/namedb /var/log/bind
groupadd named
useradd named -g named -d /var/namedb
chown -R named.named /etc/named.conf /etc/rndc.conf /var/namedb/ /var/log/bind

Εγκατάσταση


$ wget -c http://ftp.isc.org/isc/bind9/9.4.2-P1/bind-9.4.2-P1.tar.gz
$ tar zxvf bind-9.4.2-P1.tar.gz
$ cd bind-9.4.2-P1
$ ./configure
$ make
$ make install (as root user)


top


rndc


Για να εκτελούμε διάφορα controls στην υπηρεσία named χρησιμοποιούμε το
rndc


Για να μπορούμε να εκτελούμε διαφορα controls στο bind
μπορούμε να χρησιμοποιούμε το rndc. Για να μπορούμε να
χρησιμοποιούμε το rndc χρειάζεται πρώτα να παράγουμε ένα κλειδί
καθώς και τις απαραίτητες ρυθμίσεις στο /etc/named.conf


top


rndc-confgen


Κατά την εγκατάσταση του named γίνεται και η εγκατάσταση του
rndcμ προγράμματος το οποίο χρησιμοποιείται για την διαχείριση
του named (και κατά συνέπεια του bind). Το λογισμικό αυτό
χρησιμοποιώντας ένα κλειδί μπορεί και περνάει εντολές στο
named.


Για να μπορούμε να χρησιμοποιήσουμε το rndc πρέπει πρώτα να
δημιουργήσουμε το αντίστοιχο κλειδί καθώς και να περάσουμε
στο αρχείο conf που χρησιμοποιεί το named την απαραίτητη
εγγραφή που δηλώνει την ύπαρξη του κλειδιού αυτού.


Η εντολή με την οποία δημιουργούμε το κλειδί αλλά και τις
ρυθμίσεις για το named είναι η εξής:


rndc-confgen


Ελέγχουμε τους διακόπτες για να περάσουμε παραμέτρους.


rndc-confgen --help


π.χ.

rndc-confgen -b 512


top


named.conf


Το σημαντικότερο αρχείο στο λογισμικό dns bind είναι το αρχείο
/etc/named.conf


Σε αυτό το αρχείο περιέχεται η πληροφορία μας σχετικά με τις ρυθμίσεις του bind.


Παρακάτω θα δούμε βασικές ρυθμίσεις, καθώς και πως φορτώνουμε τις νέες μας ρυθμίσεις.


ΠΡΟΣΟΧΗ : Μετά από κάθε αλλαγή πρέπει να τρέχουμε την παρακάτω εντολή:

named-checkconf


top


named


Πως ξεκινάμε τον dns server που έχουμε ρυθμίσει:


named


Εάν θέλουμε να δούμε όλα τα λάθη στην οθόνη μας :

named -g


Εάν θέλουμε να τρέξει ο δαίμονάς μας με έναν συγκεκριμένο χρήστη,
ώστε να μεταβιβάσει τα δικαιώματα σε αυτόν π.χ. username : named


named -u named


Εάν θέλουμε να διαβάσει με συγκεκριμένο αρχείο ρυθμίσεων :


named -c /etc/named.conf.new


ΠΡΟΣΟΧΗ : Μετά από κάθε εκτέλεση named πληκτρολογούμε:

rndc status


ή


ps -auxwww | grep named


top


Signals


Signal Action rndc example
HUP  Reload rndc reload kill -HUP `cat /var/run/named.pid`
INT  Stop rndc dumpdb kill -INT `cat /var/run/named.pid`
TERM Stop rndc stop kill -TERM `cat /var/run/named.pid`

top


db.cache


Για να ξεκινήσουμε χρειάζεται να έχουμε κατεβάσει το αρχείο db.cache
στο οποίο αναφέρονται ΟΛΟΙ οι ROOT-SERVERS.


Root Dns Servers ονομάζονται γιατί αυτοί αποτελούν την ρίζα (root) ή αλλιώς "τελεία" ( . )
ενός domain ονόματος. Από εκεί ξεκινάμε την αναζήτηση ενός domain. Οι servers αυτοί
ορίζονται από A.ROOT-SERVERS.NET. έως Μ.ROOT-SERVERS.NET.


Η δήλωση στο named.conf αρχείο γίνεται ως εξής:


zone "." IN {
        type hint;
        file "/var/namedb/db.cache";
};


Το αρχείο db.cache ή αλλιώς named.cache ή αλλιώς named.root το κατεβάζουμε από το παρακάτω url:


ftp://ftp.internic.net


ή εκτελούμε την παρακάτω εντολή:


dig @a.root-servers.net . ns > db.cache


ή το αντιγράφουμε από εδω:


;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  <file>"
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC 
;       under anonymous FTP as
;           file                /domain/db.cache
;           on server           FTP.INTERNIC.NET
;       -OR-                    RS.INTERNIC.NET
;
;       last update:    Dec 12, 2008
;       related version of root zone:   2008121200
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:BA3E::2:30
;
; FORMERLY NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
;
; FORMERLY C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
;
; FORMERLY TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;
; FORMERLY NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; FORMERLY NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2F::F
;
; FORMERLY NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; FORMERLY AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::803F:235
;
; FORMERLY NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
;
; OPERATED BY VERISIGN, INC.
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:C27::2:30
;
; OPERATED BY RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 
K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FD::1
;
; OPERATED BY ICANN
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42
L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:3::42   
;
; OPERATED BY WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
M.ROOT-SERVERS.NET.      3600000      AAAA  2001:DC3::35
; End of File


top


Τα αρχεία μετά την εγκατάστασή μας 


bind-9.4.2-P1
bind-9.4.2-P1:

/usr/local/bin/dig
/usr/local/bin/host
/usr/local/bin/isc-config.sh
/usr/local/bin/nslookup
/usr/local/bin/nsupdate
/usr/local/include/bind9/check.h
/usr/local/include/bind9/getaddresses.h
...
/usr/local/lib/libbind9.a
/usr/local/lib/libdns.a
/usr/local/lib/libisc.a
/usr/local/lib/libisccc.a
/usr/local/lib/libisccfg.a
/usr/local/lib/liblwres.a
/usr/local/sbin/dnssec-keygen
/usr/local/sbin/dnssec-signzone
/usr/local/sbin/lwresd
/usr/local/sbin/named
/usr/local/sbin/named-checkconf
/usr/local/sbin/named-checkzone
/usr/local/sbin/named-compilezone
/usr/local/sbin/rndc
/usr/local/sbin/rndc-confgen
/usr/share/man/man1/dig.1
/usr/share/man/man1/host.1
/usr/share/man/man1/nslookup.1
/usr/share/man/man3/lwres.3
/usr/share/man/man3/lwres_addr_parse.3
...
/usr/share/man/man8/named.8
/usr/share/man/man8/nsupdate.8
/usr/share/man/man8/rndc-confgen.8
/usr/share/man/man8/rndc.8


top


Example named.conf


key "rndc-key" {
        algorithm hmac-md5;
        secret "************************";
};
controls {
        inet 127.0.0.1 port 953
        allow { 127.0.0.1; } keys { "rndc-key"; };
};

zone "." IN {
        type hint;
        file "/var/named/db.cache";
};

zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "/var/named/db.127.0.0";
};


top


Logging


Από τα σημαντικότερα πράγματα που οφείλουμε να κάνουμε σε κάθε είδος υπηρεσίας είναι η
καταγραφή μηνυμάτων – logging. Αυτό μας δίνει την δυνατότητα να εξετάσουμε την λειτουργία
της υπηρεσίας μας ανά πάσα στιγμή και εάν χρειάστεί να διορθώσουμε μέρος ή ακόμα και το σύνολο
των ρυθμίσεών μας.


Το λογισμικό bind έχει έναν αρκετά καλό μηχανισμό καταγραφής μηνυμάτων. Ορίζει ως κανάλια – channels
τις πηγές στις οποίες θα καταλήξουν τα διάφορα μηνύματα της υπηρεσίας. Στην συνέχεια μπορούμε να
ορίσουμε για κάθε κανάλι ξεχωριστά το είδος των μηνυμάτων καθώς και την τελική πηγή καταγραφής των
μηνυμάτων αυτών. Κανάλι μπορεί να οριστεί ένας syslog server ή ακόμα και ένα αρχείο κειμένου. Αφού
ορίσουμε και το είδος των μηνυμάτων μπορούμε να ορίσουμε πλέον τις κατηγορίες των μηνυμάτων που θέλουμε
να καταγράφουμε και σε πιο κανάλι θέλουμε να καταγράφουμε ποια κατηγορία. Με αυτόν τον τρόπο μπορούμε
να έχουμε χωρίσει σε διαφορετικά κανάλια τα διάφορα μηνύματα που παίρνουμε από την υπηρεσία μας.


Τα είδη των μηνυμάτων ονομάζονται severities και ορίζονται ως εξής;


  • critical
  • error
  • warning
  • notice
  • info
  • debug [level]
  • dynamic

Τα παραπάνω severities είναι ταξινομήμένα ανάλογα με το είδος των μηνυμάτων καταγραφής, με λίγα λόγια το
severity dynamic καταγράφει όλα των ειδών τα μηνύματα για ένα κανάλι, ενώ το severity critical μόνο τα
μηνύματα εκείνα που κάνουν την υπηρεσία του dns να λειτουργεί ή όχι.


Ένα παράδειγμα είναι το παρακάτω:


logging{
  channel my_log {
    file "/var/log/bind/named.log";
    severity dynamic;
    print-time yes;
    print-severity yes;
    print-category yes;
  };


Στο παραπάνω παράδειγμα δηλώνουμε ότι για το κανάλι my_log θέλουμε η πηγή καταγραφής μηνυμάτων να είναι
το αρχείο /var/log/bind/named.log και να καταγράφει το είδος των μηνυμάτων με severity dynamic.
Επίσης δηλώσαμε για κάθε μήνυμα που καταγράφεται ότι θέλουμε να καταγράφεται και η ώρα, σε πιο είδος ανήκει και σε ποια κατηγορία.


Σημείωση: Χρειάζεται να προσέξουμε τι δικαιώματα έχουμε δώσει στο παραπάνω αρχείο.


Αλλά για να λειτουργήσει το παραπάνω παράδειγμα χρειάζεται και κάτι ακόμα. Πρέπει να δηλώσουμε για ποια κατηγορία μηνυμάτων θέλουμε
να γίνεται καταγραφή στο κανάλι my_log. Αυτό γίνεται με την προσθήκη της κατηγορίας. Οι κατηγορίες καταγραφής είναι οι εξής:


  • default
  • general
  • client
  • config
  • database
  • dnssec
  • lame-servers
  • network
  • notify
  • queries
  • resolver
  • secutiry
  • update
  • update-security
  • xfer-in
  • xfre-out

Έαν παράδειγμα είναι το εξής:


category default{
    my_log;
  };
};


Έτσι λοιπόν με τα παραπάνω θα καταγράφουμε για το severity dynamic και την κατηγορία default τα μηνύματα στο κανάλι my_log
το οποίο είναι το αρχείο /var/log/bind/named.log


top


Forward


Όταν θέλουμε να κάνουμε forword τα dns queries από τον δικό μας dns server σε κάποιον άλλο τότε πολύ απλά
πρέπει να δηλώσουμε για την ζώνη αυτή σε ποιον dns server πρέπει να "αποστέλονται" τα ερωτήματα. Το παρακάτω
παράδειγμα στέλνει στον ns1.otenet.gr και ns2.otenet.gr όλα τα ερωτήματα της ζώνης otenet.gr


zone "otenet.gr" {
        type forward;
        forwarders { 195.170.0.1;  };
};


Εάν θέλουμε να γίνεται ΜΟΝΟ forward της ζώνης τότε η παραπάνω ζώνη γράφεται ως εξής:


zone "otenet.gr" {
        type forward;
        forwarders { 195.170.0.1;  };
        forward only;
};


top


Stats


Μία από τις πιο χρήσιμες εντολές του rndc είναι η εντολή stats, με την οποία μπορούμε να παράγουμε
στατιστικά. Η σύνταξή της είναι αρκετά απλή:


# rndc stats
(code)


και παράγει τα στατιστικά στοιχεία στο αρχείο που έχουμε δηλώσει μέσω του named.conf αλλιώς στο αρχείο
named.stats κάτω από τον κατάλογο που έχουμε τις ζώνες μας. Στο δικό μας παράδειγμα είναι το
/var/named/named.stats


Αλλίως με την δική μας δήλωση


statistics-file "/var/log/bind/named.stats";


μπορούμε να τροποποιήσουμε το αρχείο στο οποίο θα καταγράφονται τα στατιστικά.


top


allow-query


Ο dns server που έχουμε ΔΕΝ θέλουμε να εξυπηρετεί όλον τον κόσμο. Θέλουμε να εξυπηρετεί μόνο εμάς.
Οπότε η δήλωση που πρέπει να βάλουμε στο αρχείο ρυθμίσεων /etc/named.conf είναι το allow-query


Η δήλωση allow-query παίρνει ως όρισμα μία ip ή ακόμα και ένα class και αποτελεί μία από τις καλύτερες λύσεις
για να "κόψουμε" κάποιον εκτός του δίκτυου μας. Η δήλωση αυτή μπορεί να μπει και να έχει καθολική σημασία
στην directive options ή σε μία συγκεκριμένη ζώνη ή ακόμα σε ένα view.


Παραδείγματα χρήσης είναι τα παρακάτω:


allow-query { 192.168.1.1; };


ή


allow-query { 192.168.1/24; };


Ένα τυπικό μήνυμα λάθους είναι το εξής:


Host 13.0.0.127.in-addr.arpa not found: 5(REFUSED)


Ενώ στον server μας :


top


urls


Ίσως το καλύτερο site για dns


http://www.zytrax.com/books/dns/


Bind 9.4 Manual


http://www.isc.org/sw/bind/arm94/index.php


top


Troubleshooting


This section contains commands for simple troubleshooting for dns.


dig any +short ebalaskas.gr
dig any +trace ebalaskas.gr
host -t ns ebalaskas.gr
host -t mx ebalaskas.gr
host -t soa ebalaskas.gr

top