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

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


DNS server med NetBSD 3.0.1
2006-10-24 05:30:51 inskickat av Mats

GuiderDet går bra att maila frågor och kommentarer till texten
för den som vill och det går naturligtvis att ställa frågor
på www.NetBSD.se forum också. Jag vill också passa på att tacka Andreas Petterson på www.netbsd.se, jag har nämligen utgått från hans beskrivning och modifierat de delar som inte fungerar med NetBSD 3.0.1.


Den här guiden ska inte ses som en text för att lära sig DNS. Det handlar mer om att snabbt komma igång. Maskinen jag använder är en vanlig pc, en äldre dellmaskin med NetBSD 3.0.1. I den versionen av NetBSD ingår BIND 9. I /etc/defaults/rc.conf finns två möjligheter att köra named, här använder jag den som är chrooted för att fullfölja säkerhetstänkandet inom NetBSD. Jag använder den i ett lokalt nätverk som är placerat med en soekris 4801 brandvägg som front mot Internet.

Ett tips om du använder comhem som leverantör av ditt bredband. Ta först reda på vilket ip-nummer du har blivit tilldelad från dhcp-polen. Ett enkelt sätt är att surfa in på http://www.testadatorn.se. Om du har 1.2.3.4 så har du ett domännamn som heter c1-2-3-4.bredband.comhem.se som du kan använda i olika sammanhang. Du kan också besöka www.no-ip.com för att få en trevligare site-adress.

Vi börjar med att konfigurera den chrootade miljön.
/var/chroot/named finns redan och det vi vill placera där är
dev/null och dev/random. Om du redan har testat chrooted i något annat sammanhang så vet du att programmen som körs ser
/var/chroot/named som den översta directoryn. Börja med att titta i filen /dev/MAKEDEV och leta reda på några rader som ser ut så här
mkdev null c 2 2 666
mkdev random c 119 0 444
Dina siffror kan se annorlunda ut, kom ihåg eller anteckna dom.
Gör sedan följande kommandon:
# cd /var/chroot/named
# mknod dev/null c 2 2
# mknod dev/random c 119 0
# chmod 666 /dev/null
# chmod 444 dev/random

Det besvärliga kan vara att hålla reda på det här med directorys och hålla reda på var man är och vad som händer var. Det är lite så när man kör i chrootad miljö att det blir långa katalognamn. Nästa steg vi gör är att skapa en rndc nyckel, jag kommer med lite mer om rndc senare.
# rndc-confgen -a
Detta kommando skapar /etc/rndc.key, och dessutom talar han om att han skapade den.
Sen vill vi ha information till filerna named.conf och rndc.conf.
Det fixas med följande kommando:
# rndc-confgen -b 512 -r /dev/urandom > config.info
Detta skapar filen config.info (som är ett namn jag har valt på filen) och i den filen finns information för filerna named.conf och rndc.conf. Det är tydligt angivet i filen vilka rader som är till vilken fil. Men innan vi går vidare med det så utför följande:
# mkdir /var/chroot/named/etc
Därefter ska du skapa filen /var/chroot/named/etc/rndc.conf och kopiera in raderna som hör dit från filen config.info. Glasklart?
Öppna sedan filen /var/chroot/named/etc/named.conf och kopiera in de rader som ska dit, du hittar dom i config.info. Det är ganska tydligt markerat vilka som hör till vilken fil.

Sedan ska filen /var/chroot/named/etc/named.conf editeras, skriv in följande rader överst i filen:
options {
directory "/etc/namedb";
pid-file "/var/run/named.pid";
version none;
} ;

Directoryn som namnges här blir alltså i förhållande till
/var/chroot/named efetrsom vi kör chrooted. Version none innebär att vi inte lämnar ifrån oss någon information om vilken version av bind vi använder.

Nästa steg vi gör är att flytta lite filer rätt och sätta
rättigheterna. Användare named finns redan så du behöver inte skapa något konto för det.
# cp -p /etc/rndc.key /var/chroot/named/etc
# cp -p /etc/namedb/* /var/chroot/named/etc/namedb
# chgrp named /var/chroot/named/etc/rndc.key
# chmod 640 /var/chroot/named/etc/rndc.key
/var/chroot/named/etc/named.conf
Ovanstående är alltså en och samma rad. Hoppas att det framgår. Det är alltså filerna named.conf och rndc.key som chmod:as samtidigt.

Kopiera sedan /var/chroot/named/etc/namedb/named.conf till
/var/chroot/named/etc/named.conf. Jag vet faktiskt inte varför
den filen ska behöva vara på två ställen, det är från en
beskrivning som jag har läst. Du kan gärna prova med att ta bort en och se om det fungerar ändå, efter att du fått det att fungera förståss.

Nästa steg är att fixa lite rättigheter för användaren named.
# chmod 444 /var/chroot/named/etc/named.conf
# chown named /var/chroot/named/namedb

Från här så ska vi ha en rätt bra start på det hela, men lite till återstår att fixa (PUH! Men häng på.)

I /etc/rc.conf ska följande stå, jag kopierade från
/etc/defaults/rc.conf:
named=YES named_flags="" # see below for named_chrootdir
# To run the named(8) DNS server as an unprivileged user under a
# chroot(2) cage, uncomment the following after migrating the contents
# of /etc/namedb to /var/chroot/named/etc/namedb
#
named_chrootdir="/var/chroot/named"

Du kan nu testa att se om du har allt rätt så här långt genom följande kommando
# /etc/rc.d/named start

OK? Om inte så finns det tre skäl.
1) Du har gjort något fel i beskrivningen.
2) Jag har beskrivit något fel, eller oklart.
3) Förhållandena för dig är helt olika de som jag har.

Begrunda ovanstående punkter och bege dig sedan till forumet på www.netbsd.se och fråga.

Om allt fungerar så ska syslog(d) kunna logga vad som sker också. Om inte så beror det på vad som står i /etc/rc.d/named skriptet
angående pid.

Zoner -----
Då ger vi oss in på så kallade 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. Om du vill fördjupa dig i det ämnet så rekommenderar jag boken DNS and BIND från http://www.oreilly.com.
ISBN 0-596-10057-4. Det är bättre om du läser den boken än att jag beskriver DNS för dig här. Den här guiden är bara för att du ska få igång det hela och den förutsätter att du befinner dig på ett nätverk där du litar på folk.

Vi börjar med att justera zoner och sånt istället
för att jag ger mig in på långrandiga förklaringar om DNS.
Om ip-nummer i filerna ser konstiga ut så beror det på att de skrivs baklänges, detta för att ha host längst till vänster och den generella delen till höger och på det sättet så liknar man själva dns-systemet.

OK, börja med att cd:a dig till katalogen
/var/chroot/named/etc/namedb . Och där hittar du tre filer som heter 127, localhost och loopback.v6. Dessa tre filer anger i orginal netbsd.org som domännamn. Det ska ändras till det domännamn som du har valt att använda. Jag använde det som tilldelas mig från comhem som jag beskrev innan här. I den beskrivningen som jag har utgått från för att skriva den här guiden så säger författaren att han har använt localhost som domännamn.
I samma katalog så hittar du en underkatalog som heter cache. För min del brydde jag mig inte om den katalogen utan skapade en egen root-cache direkt i katalogen /var/chroot/named/etc/namedb.
För att få en färsk root-cache så utför följande kommando:
# dig @a.root-servers.net. . ns > root.cache

Från här så ska det alltså fungera för dig är det tänkt. Du kan nu alltså ändra din nameserver i /etc/resolv.conf till att peka på ditt ip-nummer istället. Något i den här stilen:
nameserver 192.168.1.1
Eller vad du nu använder för lokala ipnummer. Vi låter alltså inte någon utifrån göra förfrågningar av ip över port 53. Om du vill lägga till den biten så bifogar jag här Andreas Pettersons
beskrivning av det:

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.

;

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/


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


Kommentarer tillhörande (DNS server med NetBSD 3.0.1)
Anonym fegis 83.254.xxx.xxx 2007-01-05 14:08:56 Svara
test5


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.