Hits :
5682
Bind – Dns :: Mini How To
Latest stable version 9.4.2
http://www.isc.org/
http://ftp.isc.org/isc/bind9/9[..]bind-9.4.2-P1.tar.gz[link1]
https://www.isc.org/bind/
Για chroot bind ρίξτε μια ματιά εδώ:
https://balaskas.gr/wiki/chroot/bind
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 127.0.0.13 192.168.1.1
Host 13.0.0.127.in-addr.arpa not found: 5(REFUSED)
Ενώ στον server μας :
># 29-May-2007 22:08:58.711 security: info: client 192.168.1.2#33111: query '13.0.0.127.in-addr.arpa/PTR/IN' denied
top
urls
Ίσως το καλύτερο site για dns
http://www.zytrax.com/books/dns/
Bind 9.4 Manual
https://www.isc.org/bind/
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