NetBSD.SE Logotype
Meny
Välkommen till NetBSD.se

Sök bland pkgsrc/wip:Sök efter manual:
 


Att sätta upp en DNS-server med BIND 9 i NetBSD 2
2005-09-20 14:27:40 inskickat av Andreas Pettersson

GuiderI den här guiden har jag skrivit lite om hur man sätter upp en enkel DNS-server i NetBSD.

Maskinen jag använder är en sparcstation med NetBSD 2.0.2.
I NetBSD följer BIND 8, jag har dock valt att installera BIND 9
då det har fler funktioner, t ex rndc och stöd för IPv6.

Installera:

Kompilera och installera:
# cd /usr/pkgsrc/net/bind9
# make && make install && make clean && make clean-depends



Konfigurera en chroot-miljö att köra named i:

Användaren named finns redan som default och chroot-miljön är nästan
klar att använda. Det krävs dock att vi fixar vissa saker.
named behöver komma åt /dev/random och /dev/null, det fixar vi genom
att använda mknod. För att lista ut rätt parametrar till mknod måste
du dock kolla i din /dev/MAKEDEV för de skiljer sig åt mellan olika
arkitekturer.

Jag hittar följande intressanta rader i min /dev/MAKEDEV:

mkdev null c 3 2 666
mkdev random c 119 0 444


# cd /var/chroot/named
# mknod dev/null c 3 2
# mknod dev/random c 119 0
# chmod 666 dev/null
# chmod 444 dev/random


Nu behöver vi en rndc-nyckel (lite mer om rndc senare i artikeln).
För att skapa den använder vi rndc-confgen.
I de exempel jag sett används /dev/random, detta funkar dock inte alltid
så bra så jag rekomenderar att ni använder /dev/urandom.
Argumentet -b 512 anger att nyckeln ska vara 512 bitar och -r /dev/urandom
anger varifrån rndc-confgen kan hitta slumpdata till nyckelgenereringen.

# rndc-confgen -b 512 -r /dev/urandom

Skriv in det som står i /etc/rndc.conf respektive /etc/named.conf

Sedan börjar vi editera /etc/namedb/named.conf och ser till att det står:

options {
directory "/etc/namedb";
pid-file "/var/run/named.pid";
version none;
};


"direcotry" berättar vilken katalog som är arbetskatalog. Standard
katalog för konfigurationsfiler etc. Notera att i och med att vi kör
chrootat är /etc/namedb här /var/chroot/named/etc/namedb.
"pid-file" anger till vilken fil named ska skriva sin process id.
Det används av andra program som ska skicka signaler till named.
"version" används för att ange vad named ska ange för versionsnummer,
none anger att named ska strunta i att svara på förfrågningar om
vilken version den är. Vill man att named ska svara något speciellt skriver man
det inom "" (skriver man inte med version här anges korrekt information).

Ändra rättigheter på filerna och flytta det rätt.

# chgrp named /etc/rndc.key
# chmod 640 /etc/rndc.key /etc/named.conf
# cp -p /etc/rndc.key /var/chroot/named/etc
# cp -p /etc/namedb/* /var/chroot/named/etc/namedb


Kopiera sedan /var/chroot/named/etc/namedb/named.conf
till /var/chroot/named/etc/named.conf

Se till att användaren named har rättigheter att läsa /var/chroot/named/etc/named.conf
och rättigheter att skriva i /var/chroot/named/namedb/ .

Filerna i /etc/namedb som vi kopierade är en bra början men till vad som behövs men de behöver
fixas lite.

Nu ska vi se till att bind startar vid start när NetBSD bootar.
# cp /usr/pkg/share/examples/rc.d/named9 /etc/rc.d/
Se sedan till att följande finns i /etc/rc.conf :

named9=YES
named_flags="-u named -t /var/chroot/named"


Dessutom behöver följande ändras i /etc/rc.d/named9 :
pidfile="/var/run/${name}.pid"
ska ändras till
pidfile="/var/chroot/named/var/run/${name}.pid"


Nu bör det gå att starta bind genom att skriva:
# /etc/rc.d/named9 start

Dessutom ska syslog(d) kunna logga vad som sker tack vare ändringen av
pid-fil i named9-scriptet.
Kan tilläggas att i BIND8 var man tvungen att lägga till raden:
syslogd_flags="-p /var/chroot/named/var/run/log -p /var/run/log"
i rc.conf samt starta om syslog(d) för att den skulle logga matnyttig information.

Zoner

En zon kan kanske beskrivas som en del av en domän. Domäner delas upp i zoner
för att lättare kunna administreras. Alla topdomäner (t ex .se, .org, .com) och
även många domäner på lägre nivåer (t ex ericsson.se, telia.se) är uppdelade
i zoner. Ansvaret för zonerna kan sedan delegeras ut, t ex så att Ericsson ansvarar för
ericsson.se detta minskar jobbet för folket på NIC-SE som ansvarar för .se.

I named.conf definieras zoner.
I den named.conf som vi anväder oss av finns redan några zoner specificerade.
Det är . (rooten i DNS-systemet, denna skrivs sällan ut i vardagligt bruk men
ett exempel på ett korrekt domännamn är "netbsd.se.") localhost, mappningen
av localhosts IP-adress (dvs 127.0.0.1) till domännamnet localhost samt
IPv6-varianten ::1.

Vi tar och tittar lite närmare på några:

zone "localhost" {
type master;
file "localhost";
};


Denna definierar zonen "localhost", vi anger att vi är master för den domänen
och anger sedan i vilken fil själva informationen finns om noder i zonen.
Jag ska senare gå igenom hur dessa zon-filer skrivs.


zone "127.IN-ADDR.ARPA" {
type master;
file "127";
};


Denna definierar mappningen av 127-nätet. Sättet man skriver IP-adressen på
förtjänar dock ett förtydligande. IP-adresser ska skrivas baklänges. Så om
vi t ex vill ha en zon för 192.168.0.0/24 skrivs denna "0.168.192.IN-ADDR.ARPA",
detta för att likna DNS-systemet på så vis att man har hosten längst till vänster
och den mest generella delen till höger.


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


Vår DNS-server måste också känna till vilka root-servrar som finns. Root-servrarna är
de som lagrar information om alla toppdomäner och delegerar ut t ex .se till NIC-SE.
Dessa root-servrar finns listade i filen root.cache, notera dock att IP-adresser till
root-servrarna kan ändras så se till att uppdatera root.cache ibland. I filen står
var man kan hitta den färskaste varianten.

Ett annat sätt är att generera den själv genom:

Exempelvis: # dig @a.root-servers.net. . ns > root.cache

Zon-filer

Vi tar localhost som ett exempel.
Notera att det här är viktigt att vi skriver ut .-en efter domännamnet.
Kommentarer i zonfilen börjar med ;.

$TTL 3600
@ IN SOA localhost. root.localhost. (
1999012100 ; Serial
3600 ; Refresh
300 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS localhost.
localhost. IN A 127.0.0.1
IN AAAA ::1


Den första raden specificerar TTL - Time To Live, det betyder att informationen
i den här filen endast får lagras i max 3600 sekunder i andra namnservrars
cacheminne, efter det måste de fråga den ansvariga namnservern igen. Detta är
naturligtvis dock inte aktuellt för localhost.
Den andra raden börjar med ett '@', det lagrar var i DNS-hiarkin den här zonen
hör (taget från den zon-sektionen i named.conf). Det skulle alltså ha kunnat
stå "localhost. IN SOA ...".
Zonfilen består av ett antal RR (Resource Records), det första här är SOA.

SOA står för Start Of Authority och ska finnas i varje zonfil. Det beskriver
zonen, var den kommer från, vem som är ansvarig och saker som har att göra med
cacheandet av RRs att göra.
Här ser vi att zonfilen kommer från en maskin som heter localhost, i den fil som
finns med från installationen av NetBSD står där netbsd.org., se till att ändra
detta (i alla de filer som redan finns där) till något lämpligare, har du en
egen domän kan du skriva in den, jag valde att helt enkelt skriva localhost.
Sedan ser vi att det står root.localhost., detta utläses som root@localhost och
ska vara en mail-adress till en den ansvarige för DNS-servern.
Serial är ett serienummer på zonfilen, detta används av slavservern
för att se om det finns en nyare version av zonfilen. Serienumret ska
alltså ökas från sitt ursprungliga värde vid en eventuell uppdatering av
filen, i annat fall erhåller inte slavservern den nya uppdaterade zonen.
Inte hellt ovanligt är att man använder datumet detta sker för att skapa serienummret.
Refresh specificerar med vilket tidsintervall slavservrar kollar serial för
att bestämma om zonfilen har updaterats.
Retry är hur länge slavservern ska vänta innan den försöker kontakta huvudservern
igen om den inte fick kontakt vid första försöket.
Expire är tiden innan slavservern ger upp och kastar sin data.
Minimum är tiden som ska gå innan vi vill bli frågade igen om något som vi inte
viste svaret på tidigare.
Alla tider är i sekunder.

Det andra RRet är NS. Den här gången behövs inte "@", det följer med sedan förra raden.
NS-recordet berättar vilken maskin som är namnserver för domänen localhost, i det här
fallet är det localhost.
Nästa rad är ett A-record, A står för address och här står att den pekar på 127.0.0.1.
Sista raden är ett AAAA-record, det är som A-recordet men för IPv6 istället, också
denna ska peka på loopback-interfacet som i IPv6-världen är ::1.

Nästa exempel på en zon-fil blir 127:

$TTL 3600
@ IN SOA localhost. root.localhost. (
1999012100 ; Serial
3600 ; Refresh
300 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS localhost.
1.0.0 IN PTR localhost.


Det mesta ser ut som i localhost här med vissa undantag.
Näst sista raden specificerar att localhost är namnserver för 127-nätet.
Raden under är ett PTR-record som säger att adressen 127.0.0.1 har domännamnet
localhost, notera dock att även här skrivs det baklänges.
Hade man i named.conf specificerat zonen "0.0.127.in-addr-arpa" istället
(vilket jag har sett i flera exempel) hade man alltså skrivit PTR-recordet så
här istället 1 IN PTR localhost.".

Det är alltså IN PTR man använder för att få reverse på sin IP-adress.

Vill vi bara ha vår DNS-server som en cacheande namnserver räcker det såhär.
En cacheande namnserver används för att snabba upp surfandet då man inte behöver
anropa en namnserver på Internet (den ISP man har brukar ge tillgång till
DNS-servrar) varje gång man ska slå upp ett domännamn utan det räcker med att fråga
den man har själv på det lokala nätet.
Det enda som alltså behöver ändras i zonfilerna som kommer med installationen är att
byta ut det i SOA-recordet som säger vem som är ansvarig för zonen.

Om man däremot har en egen domän eller vill kunna namnge sina datorer för att slippa
komma ihåg IP-adresser till alla och inte vill ha all data i hosts-filer på alla datorer
måste man specificera ytterligare några zoner.



Jag använder mig av exempeldomänen example.com.
Vi börjar med att lägga till två zoner i named.conf.

zone "example.com" {
type master;
file "example.com";
};

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


Tänk på att bind kommer leta efter filerna i /var/chroot/named/etc/namedb/
så det är där vi ska lägga även dessa zonfiler.

; example.com - exempelzonfil.

$TTL 3600
@ IN SOA ns. root.ns. (
20040730 ; Serial
3600 ; Refresh
300 ; Retry
3600000 ; Expire
3600 ) ; Minimum
NS ns
MX 10 mail
MX 20 mail.example.net.

localhost A 127.0.0.1

ns A 192.168.0.12
MX 10 mail
MX 20 mail.example.net.
seleya CNAME ns


mail A 192.168.0.2
MX 10 mail
MX 20 mail.example.net.

surak A 192.168.0.8
MX 10 mail
MX 20 mail.example.net.
www CNAME surak
ftp CNAME surak
example.com. A 192.168.0.8


foobar.example.com. NS ns.friend.example.net.

; EOF


Första raden efter SOA-recordet berättar att ns är namnserver för example.com.
Här har vi dock inte med . efter, detta innebär att den automatiskt hänger på example.com.
efter, annars hade vi varit tvungna att skriva ns.example.com.
Raden under specificerar MX för domänen. MX står för Mail eXchange och är alltså vilken mail-
server som ska kontaktas om någon försöker skicka mail till någon på vår domän.
Siffran är ett prioritetsnummer och används bara för jämförelser mellan de mailservrar som är
listade. Här har jag angivit att mail (dvs. mail.example.com.) ska vara primär mailserver
medan jag har specificerat att en sekundär mailserver finns på mail.example.net.

Nästa rad berättar nu vilken adress ns har. Jag specificerar mailserver även för denna.
Dessutom har jag ett CNAME-record (Canonical NAME, dvs ett alias/nickname) som berättar att jag
vill att seleya.example.com. ska vara ett alias/nickname för ns.example.com.

Näst sista raden är för att jag vill att example.com ska peka på webbservern. Den domän som
är toppdomän i den zon zonfilen hör till får dock inte vara en CNAME utan måste vara en A-pekare.
De övriga exemplen är relativt självklara.

Med sista raden delegerar vi ut domänen foobar.example.com. till vår kompis som får ta hand om och administrera
den zonen, hanns DNS-server har namnet ns.friend.example.net., notera också att det inte ska stå en IP-adress där.


Då har vi zonfilen "192.168.0" kvar att skriva.

; 192.168.0 - exempelfil

$TTL 3600
@ IN SOA ns. root.ns. (
20040730 ; Serial
3600 ; Refresh
300 ; Retry
3600000 ; Expire
3600 ) ; Minimum
NS ns.example.com.

2 PTR mail.example.com.
8 PTR surak.example.com.
12 PTR ns.example.com.

; EOF


Då vi i named.zone kallade denna zon för "0.168.192.in-addr.arpa" behöver
vi alltså bara skriva ut host-delen i IP-adressen.


RNDC

Jag lovade tidigare att jag skulle nämna lite om rndc. RNDC är ett sätt att skicka
kommandon till namnservern. Man kan t ex ladda om zon- och konfigurationsfiler, skriva
ut statistik, slänga bort cachen osv.

Exempel:

# rndc reload

Laddar om konfigurationsfilen och alla zonfiler.



För mer information, läs man-sidorna och dokumentationen som finns i /usr/pkg/share/doc/bind9/

Källor:
http://othyro.freeshell.org/bind.html
http://www.muine.org/~hoang/dns.html
http://www.faqs.org/rfcs/rfc1035.html
http://www.tldp.org/HOWTO/DNS-HOWTO.html
http://www.erikd.se/archive/200506/bind-9-chroot-on-freebsd/
http://feyrer.de/NetBSD/named-chroot.html
http://www.ezunix.org/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=53&page=1
http://people.freebsd.org/~seanc/bind9/



skrivut.gif Utskriftsformat mail.gif Skicka artikeln till någon


Kommentarer tillhörande (Att sätta upp en DNS-server med BIND 9 i NetBSD 2)


Namn (tomt = anonym):
Din email:






© 2003-2008 NetBSD.se
Materialet som publicerats på denna sida tillhör respektive författare. Materialet får kopieras med förutsättning av att källanvisning medförs som i detta fall är www.netbsd.se. Eventuella kommentarer tillhör skrivande individ. All information erbjuds utan garanti på funktion och duglighet och NetBSD.se tar inget ansvar för händelser som åsakats på grund av något på denna sida. NetBSD är ett registrerat varumärke som tillhör The NetBSD Foundation. Alla varumärken och copyright på denna sida ägs av deras respektive ägare. Vår maskot går under BSD-licensen och är fri att användas.