Archive for April, 2012

Sette opp en Ubuntu DNS-server på et lokalt netverk

Sunday, April 29th, 2012

Eg har i lang tid slitt med trådlause routerar som ikkje tåler belastninga i nettverket mitt, og har byta router utallege gonger. For ei tid sida fann eg ut at det ikkje er trådlausfunksjonen i routerane som ikkje taklar belastninga, derimot er det ofte routerfunksjonen som knelar under press. Etter at eg satte opp Ubuntu tenaren som router, og kun nyttar trådlausrouteren som eit aksesspunkt, har eg ikkje hatt nemneverdige problem. Eit innlegg om korleis du får ein Ubuntu-tenar til å fungere som router kommer kanskje seinare.

Eg kjem til å leggje disse opplysningane til grunn, juster for å tilpasse til ditt nettverk:
Ubuntu 12.04 tenar med to nettverkskort:

eth0: Kobla til kabelmodem, mottek IP-adresse automatisk
eth1: IP: 10.0.0.1 Nettmakse: 255.255.255.0 (det samma som 10.0.0.1/24)

Ubuntu tenaren er satt opp som “default gateway” i nettverket, og fungerer òg som DHCP-tenar. Planen er at DNS-tenaren i tillegg til å svare på forespørningar om domenenamn på internett, òg skal svare på lokale hostnamn. For å få til det er det naudsynt å oppdatere DNS-tenaren med dynamiske opplysningar frå DCHP-tenaren.

Vi starter me då sette opp BIND som ein caching server, samt master for det lokale domenet. BIND vil då hugse alle forespørningar frå LAN-et og påfølgjane spørjingar går raskare.
Rediger /etc/bind/named.conf.local:
sudo nano -w /etc/bind/named.conf.local

# Lokalt domene
zone "noteng.lan." {
type master;
file "/etc/bind/zones/noteng.lan.db";
};

# For revers DNS
zone "0.0.10.in-addr.arpa" {
type master;
file "/etc/bind/zones/rev.0.0.10.in-addr.arpa";
};

Dersom du ynskjer å nytte din ISP sin nametjenar for oppslag må du legge til ein eller fleire forwarders i fila /etc/bind/named.conf.options. Om du ikkje legg til forwarders, vil BIND nytte rot-tenarane til oppslag. Å nytte rot-tenarane tek litt lenger tid, men då er du sikker på at ikkje nettleverandøren din har lagt inn eigne oppføringar.
sudo nano -w /etc/bind/named.conf.options

forwarders {
8.8.8.8; 8.8.4.4
};

8.8.8.8, og 8.8.4.4 er Google sine namnetjenarar, dei kan òg nyttast om du ikkje er redd for at Google veit kva nettsider du vitjer.

No er det på tide å sette opp Ubuntu-tenaren til å nytte seg sjølv til namneoppslag, i staden for namnetenaren den har fått oppgitt av DHCP på eth0:
sudo nano -w /etc/dhcp/dhclient.conf

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

send host-name "<hostname>";
#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
#send dhcp-lease-time 3600;
supersede domain-name "noteng.lan";
prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers,
dhcp6.domain-search, dhcp6.fqdn,
dhcp6.name-servers, dhcp6.sntp-servers;
#require subnet-mask, domain-name-servers;
#timeout 60;
#retry 60;

No er det på tide å sette opp sonefilene:
sudo mkdir  /etc/bind/zones
sudo nano -w /etc/bind/zones/noteng.lan.db

$TTL 1D
@ IN SOA ns.noteng.lan. andreas.noteng.no. (
2012042901
1d
2h
4w
1h
);
noteng.lan.    NS      ns
legoknekt       CNAME   ns
ns                    IN      A          10.0.0.1

sudo nano -w /etc/bind/zones/rev.0.0.10.in-addr.arpa

$TTL 3D
@       IN      SOA     ns.noteng.lan. andreas.noteng.no. (
2012042901
3h
15
1w
3h
)
IN      NS      ns.noteng.lan.
1       IN      PTR     ns.noteng.lan.
1       IN      PTR     legoknekt.noteng.lan.

For ei forklaring på korleis sonefilene fungerer kan du ta ein titt på Wikipedia sin side om sonefilar: http://en.wikipedia.org/wiki/Zone_file

No gjenstår berre å sette åpp DHCP-tenaren til å be alle klientane nytte Ubuntu-tenaren som DNS-tenar:
sudo nano -w /etc/dhcp/dhcpd.conf

subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.2 10.0.0.200;
option domain-name-servers 10.0.0.1, 8.8.8.8;
option domain-name "noteng.lan";
option routers 10.0.0.1;
option broadcast-address 10.0.0.255;
default-lease-time 600;
max-lease-time 7200;
}

Subnet-definisjonen over er eit døme på eit fungerande LAN, tilpass etter det som passar ditt nettverk.
No er det på tide å ta i bruk dei nye instillingane:
sudo ifdown eth0 && sudo ifup eth0
sudo /etc/init.d/bind9 restart
sudo /etc/init.d/isc-dhcp-server restart

No kan du undersøke om alt fungerte ved å sjekke loggen:
cat /var/log/syslog

Det som no gjenstår er å få dhcp-tenaren til å automatisk oppdatere sonefila til BIND med nye adresser etterkvart som nye klientar koplar seg på nettverket.

Først må vi lage ein nøkkel for sikker kommunikasjon:
dnssec-keygen -a hmac-md5 -b 128 -n USER dhcpupdate
Kommandoen over produserer to filer, sjå i den som slutar på .key og kopier nøkkelen (den siste strengen).
Deretter redigerar du /etc/bind/named.conf.options og legger til følgjande i sluten av fila:

key dhcpupdate {
algorithm hmac-md5;
secret "HEMMELIGNØKKEL==";
};

Sett sjølvsagt inn nøkkelen du laga over.
Deretter må vi redigere innstillingane for sonane:
sudo nano -w /etc/bind/named.conf.local

# Lokalt domene
zone "noteng.lan." {
type master;
file "/etc/bind/zones/noteng.lan.db";
allow-update { key dhcpupdate; };
};

# For revers DNS
zone "0.0.10.in-addr.arpa" {
type master;
file "/etc/bind/zones/rev.0.0.10.in-addr.arpa";
allow-update { key dhcpupdate; };
};

No har vi satt opp BIND til å motta DDNS-updates, men vi må òg sette opp DHCP-tenaren til å sende dei:
sudo nano -w /etc/dhcp/dhcpd.conf

ddns-update-style interim;
key dhcpupdate {
algorithm hmac-md5;
secret "DINHEMMELEGENØKKEL";
};
zone noteng.lan. {
primary 127.0.0.1;
key dhcpupdate;
}

zone 0.0.10.in-addr.arpa. {
primary 127.0.0.1;
key dhcpupdate;
}

Lagre og restart tenestene:
sudo /etc/init.d/isc-dhcp-server restart && sudo /etc/init.d/bind9 restart

Se etter eventuelle feilmeildinger i syslog:
cat /var/log/syslog

Om du plages med at BIND (named) spammer syslog med at den ikke finne IPv6 rot-tenarane kan du slå av IPv6 ved å legge til -4 i OPTIONS i /etc/default/bind9
Truleg må du legge til følgjande i apparmor-profilen til BIND:
sudo nano -w /etc/apparmor.d/usr.sbin.named

/etc/bind/zones/* rw,

samt gje BIND tillating til å skriva til /etc/bind/zones

sudo chmod g+w /etc/bind/zones && sudo chown :bind /etc/bind/zones

Vote for Launchpad to add usage statistics.
Bloggurat
Bloggurat
Twitter: anoteng

BalleClorins geekblog is using WP-Gravatar