6.10. Bind

Dette afsnit vil gennemgå opsætningen af et registreret domæne på en DNS-server. Strukturen fra BIND 8.x er benyttet, da dette er den version de fleste DNS-servere anvender, modsætningen er den noget ældre BIND 4.x. De følgende eksempler kører på BIND 8.1.2, men nye versioner udvikles hele tiden. Opgraderinger kan hentes fra http://www.isc.org.

Den overordnede opsætningsfil er /etc/named.conf. I denne defineres hvilke zoner (domæner) DNS-serveren administrerer og i hvilke filer de enkelte zoner er defineret.

Som standard vil man skulle definere 4 zoner for domænet "intranet" med IP-adresser i intervallet 192.168.0.1-192.168.0.254 (ikke 255, da dette er broadcast-adressen).

6.10.1. /etc/named.conf

Følgende er et eksempel på en /etc/named.conf fil som indeholder ovenstående grundlæggende opsætning:

   
options {
  /* Hvor er filerne med DNS-opsætning */
  directory "/var/named";

  /* Indsaet 1-3 forwarder nameservere */
  /* Brug dem fra din ISP og indsaet IP-adresserne */
  /* i stedet for NNN.NNN.NNN.NNN og MMM.MMM.MMM.MMM */
  forwarders {
          NNN.NNN.NNN.NNN;
          MMM.MMM.MMM.MMM;
  };

  /* Lyt på DNS-forespørgsler til to IP-adresser */
  listen-on { 192.168.0.1; 127.0.0.1 ; };

  /* Udkommenter følgende linje hvis dit domæne 
     er kendt på internettet */
  notify no;
  
};

logging {
  category lame-servers { null; };
  category cname { null; };
};

zone "." in {
  type hint;
  file "root.cache";
};

zone "0.0.127.in-addr.arpa" in {
  type master;
  file "127.0.0.rev";
};

zone "0.168.192.in-addr.arpa" in {
  type master;
  file "192.168.0.rev";
};

zone "intranet" in {
  type master;
  file "intranet";
};

De første linjer definer i hvilket bibliotek de senere omtalte filer skal placeres. Standard er: /var/named, men du kan også anvende f.eks. /etc/named eller andre steder.

Logging-linjen forhindrer at man får en masse unødigt i sin syslog. (Log-funktionen er meget avanceret, en masse forskellige kriterier kan defineres).

Næste linje er en zone-definition. Her gælder det root-zonen, selve filen hentes fra ftp://ftp.internic.net. De resterende linjer fortæller først hvilket domæne det handler om, og derefter i hvilken fil selve domænet er defineret. Samtidig får serveren af vide om den er "master" eller "slave" for det pågældende domæne. I ovenstående tilfælde er DNS-serveren master for alle zoner. For at kunne registrere et domæne kræves det at man har 2 DNS-servere til domænet, master og slave, eller primær og sekundær. Følgende er et eksempel på en slave-zone:

   
zone "intranet" in {
  type slave;
  file "intranet";
  masters { 192.168.0.1; };
};

Udover at der nu står slave i stedet for master, er en linje tilføjet som fortæller hvilken server er master. Grunden til at slave-serveren skal kende master-serveren er, at slave-serveren henter zone-filerne fra master-serveren. Dette betyder at ændringer i et domæne på master-serveren automatisk vil blive overført til slave-serveren.

6.10.2. /var/named/root.cache

Vi kan f.eks. bruge følgende udgangspunkt for /var/named/root.cache – dvs. root-zonen.

;       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 registration services
;       under anonymous FTP as
;           file                /domain/named.root
;           on server           FTP.RS.INTERNIC.NET
;       -OR- under Gopher at    RS.INTERNIC.NET
;           under menu          InterNIC Registration Services (NSI)
;              submenu          InterNIC Registration Archives
;           file                named.root
;
;       last update:    Feb 28, 1997
;       related version of root zone:   1997022800
;
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
;
; formerly NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     128.9.0.107
;
; 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
;
; 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
;
; formerly NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
;
; temporarily housed at NSI (InterNIC)
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     198.41.0.10
;
; temporarily housed at NSI (InterNIC)
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
;
; temporarily housed at ISI (IANA)
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
;
; temporarily housed at ISI (IANA)
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
; End of File

6.10.3. /var/named/intranet

Den næste fil er for maskinerne i 192.168.0.*-området:

$TTL   1D
@   IN SOA ns.intranet. hostmaster.intranet. (
                                      1999102400 ; serial number
                                      60000      ; refresh (1 day)
                                      3600       ; retry (1 hour)
                                      2600000    ; expire (1 month)
                                      60000      ; minimum (1 day)
)

;
; NB: BRUG TABULATOR SOM MELLEMRUM
;

;
; Dette domænes DNS-servere:
;
      IN   NS   ns.intranet.

;
; Mailserveren for dette domæne:
;
      IN   MX   0   mail.intranet.

;
;  Standardhostnavne afbildet til IP-adresser:
;
localhost   IN   A   127.0.0.1
linus       IN   A   192.168.0.1

;
; Øvrige hostnavne afbildet til IP-adresser:
;
alan        IN   A   192.168.0.2
richard     IN   A   192.168.0.3
eric        IN   A   192.168.0.4

;
; Alias adresser:
;
ns          IN   CNAME   linus.intranet.
mail        IN   CNAME   linus.intranet.

Husk: Den første linje $TTL - "Time to live" skal med, og der anvendes tabulator til at adskille hvert felt, og der må ikke anvendes mellemrum. Bemærk specielt, at der er punktum efter hvert maskin-navn i CNAME-linjerne.

Når en computer ude på nettet har spurgt vores server om noget på vores zone vil den have modtaget noget data. Efter et par dage vil det være muligt at disse data er forældet. Derfor kan man med "TTL"-parameteren angive hvor lang tid en klient må beholde data som den har fået fra en DNS-server.

Linje to til syv angiver diverse parametre for selve domænet. Det er ikke så vigtigt at forstå ordenen i disse linjer, derimod er det vigtigt at forstå betydningen. Det første tegn "@" er en variabel for selve domænet. Her kunne altså i stedet stå "intranet.". Grunden til at man i stedet sætter en variabel, er at man på den måde ikke behøver ændre dette felt hvis man bruger denne zone-fil til at lave en anden zone-fil.

"IN" står for "INTERNET" og angiver den klasse data man benytter. I dag bliver der meget sjældent benyttet andre klasser, så derfor er IN default, og man behøver derfor ikke angive dette. SOA står som tidligere skrevet for "Start Of Authority" og fortæller efterfølgende hvilken navneserver der er ansvarlig for denne zone.

"ns.intranet." fortæller hvilket domæne navneserveren er ansvarlig for, "hostmaster.intranet" er e-post-adressen til vedkommende som er ansvarlig for domænet. Bemærk, at det første . (punktum) skal læses som et @.

"Serial" er serienummeret for zonen. Hver gang man laver en ændring, skal serienummeret opdateres. Eneste regel er at tallet skal blive mindst én højere (inkrementeres). De fleste vælger at bruge dags dato sammen med et 2-cifret tal. Det gør det muligt at vide hvornår sidste opdatering blev foretaget. Grunden til at man har serienummeret, er at man kun opdaterer sine zone-filer på sin master-server. Slave-serveren vil derefter selv hente ændringerne, men den ved kun at der er foretaget ændringer hvis serienummeret er blevet inkrementeret.

"Refresh" fortæller hvor tit slave-serveren skal spørge master-serveren om serienummeret på det pågældende domæne og herved beslutte om der skal foretages en overførsel.

Hvis slave-serveren ikke er i stand til at skabe kontakt til master-serveren i første forsøg, definerer man med "Retry" hvor lang tid den skal vente før den prøver igen.

I tilfælde af at slave-serveren slet ikke kan få kontakt til master-serveren, vil det efter nogle dage kunne være sandsynligt at der er foretaget ændringer på master-serveren som slave-serveren ikke har. Hvilket vil sige at den primære og den sekundære server giver modstridende oplysninger til deres klienter! For at undgå dette kan man definere hvor lang tid slave-serveren skal tro på at dens zone-data er gode nok. Dette gøres med "expire"-parameteren. Det skal forstås således, at når slave-serveren ikke kan kontakte master-serveren og det angivne tidsrum er udløbet, vil slave-serveren smide sine data om den pågældende zone ud, og altså ikke besvare forespørgsler omkring denne zone.

Ovenstående parametre som angives i tidsrum, kan skrives i S, M, H, D (Sekunder, Minutter, Timer, Dage). De fleste vælger at angive dem alle i sekunder, det gør dog ingen forskel, og det er rimelig besværligt at skulle omregne eksempelvis 86400 sekunder (1 dag).

Der findes mange meninger om hvorledes ovenstående parametre skal sættes. De 4 første handler udelukkende om DNS-serverne, og derfor er det yderst begrænset hvor store fejl, der kan opstå ved at sætte nogle af disse 4 parametre "forkert", hvis man selv administrerer både master og slave. Derimod er det mindre hensigtsmæssigt at sætte TTL helt forkert. Resultatet kan eksempelvis blive at man ikke kan modtage post i en uges tid, hvis man er kommet til at angive en forkert IP-adresse til mail-serveren, og TTL er sat til en uge.

Resten af zone-filen er selve "records". Den første kolonne fortæller hvilket navn man vil omsætte. Eksempelvis kunne der stå "mail.intranet" for at fortælle hvad "mail.intranet" skulle referere til. Hvis man ikke angiver noget i den første kolonne, vil selve zonen være default, altså "intranet."

En vigtig ting som altid gælder når man angiver navne: Hvis man ikke afslutter med et "." (punktum) vil serveren automatisk tilføje det pågældende domæne til navnet. "mail.intranet" vil derfor blive til "mail.intranet.intranet".

Herefter skal der angives hvilken klasse man arbejder med – her er "IN" igen default. Derpå skal man fortælle hvilken type record man vil angive (de mest brugte vil blive gennemgået i det efterfølgende). Det sidste der skal angives, er hvilket navn eller hvilken IP-adresse DNS-serveren skal svare tilbage med, når den bliver spurgt om denne record.

Den først record er af typen "NS" (Name Server), her angiver man navnet på DNS-serveren, først den primære, herefter den sekundære.

Den næste record er af typen "MX" (Mail eXchanger), her angives navnet på post-serveren.

Herefter kommer en stribe standard "A"-records (A = Address). Denne record angiver hvilket IP-nummer den omtalte host har.

"CNAME" står for Canonical name og betyder alias. Denne record-type bruges til at have flere navne til at referere til en IP-adresse.

6.10.4. /var/named/127.0.0.rev

Den første "reverse"-fil er for "localhost", som vi i /etc/named.conf valgte at gemme i /var/named/127.0.0.rev.

$TTL    1D
@ IN  SOA   ns.intranet. hostmaster.intranet. (
                                      1999102400 ; serial number
                                      60000     ; refresh (1 day)
                                      3600       ; retry (1 hour)
                                      2600000    ; expire (1 month)
                                      60000     ; minimum (1 day)
)

;
; NB: BRUG TABULATOR SOM MELLEMRUM
;

;
; DNS-serveren for denne zone:
;
IN   NS    ns.intranet.

;
; Reverse mappings:
;
1   IN   PTR   localhost.

Husk den første linje $TTL - "Time to live" - skal med, og der anvendes tabulator til at adskille hvert felt. Bemærk specielt, at der er punktum efter hvert maskin-navn.

Igen har vi SOA-recorden (fra linje 2 til 7). Det er en fordel at have en generel SOA-record for alle sine zoner, dog kan man naturligvis have behov for forskelle nogle steder, men rent administrativt er det langt mere overskueligt med samme parametre.

Grunden til at der kun er angivet en DNS-server, er at denne zone udelukkende er for 127.0.0 som altså kun kan være den lokale server, hvilket ikke har noget at gøre med den/de andre DNS-servere.

Reverse records er af typen PTR. Da forespørgsler til reverse-zoner skal besvares med et navn i stedet for en IP-adresse er strukturen i disse zoner også anderledes. Der er simpelthen byttet om på navnet og IP-adressen. Derfor står IP-adressen først, i det her tilfælde 1 (1 + zone-navnet (127.0.0) = 127.0.0.1), herefter klassen (IN), record-typen (PTR) og til sidst navnet (localhost).

6.10.5. /var/named/192.168.0.rev

Den næste "reverse"-fil er for maskinerne i 192.168.0.*-området:

$TTL   1D
@ IN SOA   ns.intranet. hostmaster.intranet. (
                                      1999102400 ; serial number
                                      60000      ; refresh (1 day)
                                      3600       ; retry (1 hour)
                                      2600000    ; expire (1 month)
                                      60000      ; minimum (1 day)
)

;
; NB: BRUG TABULATOR SOM MELLEMRUM
;

;
; Name Servers for this reverse zone:
;
IN   NS    ns.intranet.

;
; Reverse mappings:
;
1   IN   PTR   linus.intranet.
2   IN   PTR   alan.intranet.
3   IN   PTR   richard.intranet.
4   IN   PTR   eric.intranet.

Ovenstående er reverse zone-filen for zonen 192.168.0.*. Nok en gang - den første linje $TTL - "Time to live" skal med, og der anvendes tabulator til at adskille hvert felt. Bemærk igen, at der er punktum efter hvert maskin-navn.

Her gælder de samme regler som for 127.0.0 zonen. 4 reverse records er defineret fra 1 til 4 svarende til 192.168.0.1-192.168.0.4, dvs. vores fire maskiner. Har du brug for et andet eksempel på opsætning af DNS, så kan du se i http://www.sslug.dk/artikler/dnsbind.shtml.