Kapitel 7. Linux som server

Vi er tidligere kommet ind på en mere grundlæggende forklaring af netværk, TCP/IP og netværksadresser, idet dette er helt centralt for alt med netværk.

I dette kapitel ser vi nærmere på en række server-funktionaliteter DHCP, NFS (Unix-fildeling), NIS (adgangskode-deling) og AppleTalk (Mac-server). Desuden er der afsnit om hvordan man får en X-server og klient til at virke. Endelig behandles også hvordan du kan få adgang til din Linux-maskine via modem (eng. dial-in modem).

7.1. Opsætning af DHCP-server

Hvis man har mere end et par computere på sit netværk, eller hvis man ofte flytter computerne mellem forskellige netværk, så bliver det hurtigt besværligt at skulle konfigurere deres IP-adresser, standard-gatewayadresse og navneserver hver gang man flytter dem rundt.

Løsningen på det problem er at bruge DHCP – "Dynamic Host Configuration Protocol". Som navnet antyder, så er det en speciel protokol som er beregnet til at en computer kan blive konfigureret automatisk, uden at man skal ind og pille i opsætningen på hver enkelt maskine.

Bemærk, at hvis du har mere end én DHCP-server på samme netværks segment bør disse være koordineret. Hvis de ikke er koordineret vil du kunne opleve at det kun virker en gang imellem – nemlig når klienten får svaret fra den server, der er konfigureret korrekt.

7.1.1. Hvordan virker DHCP?

Når man tænder en computer der bruger DHCP, så vil den sende en forespørgsel ud på sit lokale netværk for at spørge efter en DHCP-server. Hvis der er en DHCP-server på nettet, så tager serveren en ubrugt IP-adresse fra den pulje af adresser, den er konfigureret til at bruge, og sender et svar tilbage om at den nye computer kan bruge den pågældende IP-adresse. Sammen med IP-adressen sendes også andre oplysninger som er nødvendige for at netværket kan fungere – som regel er det netmasken, IP-adressen for default gateway og navneservernes IP-adresser som fås fra DHCP-serveren.

Den IP-adresse som den nye computer får tildelt, må den bruge i et begrænset tidsrum – den får det der kaldes et "lease" på adressen, som skal fornyes med jævne mellemrum. Hvis ikke computeren beder om at forny sit lease, så inddrager DHCP-serveren det igen, og kan dele det ud til andre maskiner der har brug for en IP-adresse.

Når man bruger DHCP, kan man derfor ikke være sikker på, at ens computere altid har en fast IP-adresse – det afhænger af, hvor længe ad gangen de er tændt. Så længe de er på nettet, bliver de ved med at have den IP-adresse de har fået fra serveren. Men hvis de bliver lukket ned eller taget af nettet så længe at deres lease udløber, så vil de sandsynligvis få en ny IP-adresse næste gang de kontakter serveren.

Derfor er DHCP mest anvendelig på de systemer, som ikke kører nogen form for server-funktion – dvs. almindelige arbejdsstationer.

Det er dog muligt at konfigurere sin DHCP-server på en måde, så visse IP-adresser bliver reserveret til bestemte maskiner, og derved kan man sikre at den pågældende maskine altid har en bestemt IP-adresse. Derfor kan man godt bruge DHCP til servere, f.eks. hvis man vil styre netværks-konfigurationen centralt.

7.1.2. Valg af DHCP-server/servere

Der følger naturligvis en DHCP-server med din Linux-distribution – det er en server som er udviklet af ISC (Internet Software Consortium). De har også udviklet navneserveren BIND. I næste afsnit kan du se, hvordan man sætter den op.

Det anbefales derfor at du ikke har mere end én dhcp-server på et netværkssegment, og at du koordinerer hele opsætningen af DHCP i denne server. Du kan dog have mere end en DHCP server på samme netværkssegment. Dette forudsætter at de alle giver korrekte oplysninger til klienterne, og at deres puljer af adresser ikke overlapper hinanden.

Hvis du har en eller anden form for router på dit netværk, så kan det være at du allerede har en DHCP-server på nettet. Små ISDN- og ADSL-routere har ofte en DHCP-server indbygget, og den kan man sagtens bruge. Man kan endda opleve at printere og andet udstyr med netværkstilslutning har en DHCP-server indbygget.

Hvis ikke alle DHCP-serverne er konfigureret korrekt og koordineret kan du opleve at det kun virker en gang imellem. Du skal være opmærksom på at du kan komme ud for udstyr som kun tænder for DHCP-serveren når det ikke kan finde en anden DHCP-server. I praksis betyder det at du kan opleve at det kun virker, når du tænder / tilslutter netværksenhederne i en bestemt rækkefølge.

7.1.3. ISC DHCP-server

ISC's DHCP-server bruger én konfigurationsfil. Normalt ligger den i /etc/dhcpd.conf. Derudover bruger den en midlertidig fil til at holde styr på hvilke IP-adresser den har uddelt til de forskellige maskiner på nettet; den ligger normalt i /etc/dhcpd.leases, og den administrerer selv serveren. Du skal blot sørge for at filen eksisterer inden du starter serveren – f.eks. ved at give kommandoen touch /etc/dhcpd.leases (for Red Hat 7.0 touch /var/lib/dhcp/dhcpd.leases) inden du starter serveren første gang. Installér dernæst følgende RPM-pakke for at få DHCP-serveren ind på Red Hat:


[root@linus /root]# rpm -ivh dhcp-*.rpm

For at konfigurere DHCP-serveren skal du bestemme dig for, hvilke oplysninger den skal uddele til de computere, der spørger den om en IP-adresse. Dvs. du skal vælge:

  • Hvor længe skal de have lov til at bruge den tildelte adresse?

  • Hvilket IP-adresseområde skal der tages adresser fra?

  • Hvilken netmaske har dit netværk?

  • Hvad er default gateway for nettet?

  • Hvilken IP-adresse bruges til navneserver?

Derudover er der en frygtelig masse oplysninger, som man kan levere via DHCP. Det er f.eks. domæne-navnet for maskinerne på dit netværk, navn på post-server, time-server, WINS-server etc. Det er dog langtfra alle disse oplysninger, som rent faktisk bruges til noget af de maskiner som kontakter DHCP-serveren, så derfor er det ikke altid at man får noget ud af at konfigurere dem på DHCP-serveren. Du kan se hvilke muligheder der er i "dhcp-options" man-siden.

7.1.3.1. dhcpd.conf filen

I netværket der bruges som eksempel, har man valgt at bruge følgende værdier til DHCP:

  • Et lease skal være fornyet efter 10 timer, og er max. gyldigt i 24 timer.

  • IP-adresser tildeles fra puljen 192.168.0.100 - 192.168.0.250

  • Netmasken er 255.255.255.0

  • Default gateway er 192.168.0.1

  • Navneserveren er 192.168.0.1

  • Domæne-navnet er "intranet"

Konfigurationsfilen /etc/dhcpd.conf skal så se således ud:


ddns-update-style ad-hoc;

subnet 192.168.0.0 netmask 255.255.255.0 {
        range 192.168.0.100 192.168.0.250;
        option subnet-mask 255.255.255.0;

        # default gateway
        option routers 192.168.0.1;

        option domain-name "intranet";
        option domain-name-servers 192.168.0.1;

        default-lease-time 36000;
        max-lease-time 86400;
}

"range" fortæller så, hvilke IP-adresser serveren kan tildele klienter på dette netværk – det er her, vi skriver at adresserne skal være i intervallet 192.168.0.100 til 192.168.0.250.

"option subnet-mask" definerer netmasken.

"option routers" definerer standard-gateway.

"option domain-name" og "option domain-name-servers" definerer DNS-domæne-navnet og navneserveren. DHCP-serveren laver så et opslag inden den tildeler IP-adressen til klienten. En smart ting hvis navneserveren skulle skifte IP-adresse. Hvis du ikke selv har en navneserver på dit netværk, så kan du sagtens skrive IP-adressen på din internetudbyders navneserver her.


option domain-name-servers 192.168.0.1, 192.168.0.2;

"default-lease-time" er det antal sekunder, et lease er gyldigt. Herefter skal klienten forny sit lease hos DHCP-serveren.

"max-lease-time" er det antal sekunder en IP-adresse må bruges. Når den tid er gået skal klienten holde op med at bruge IP-adressen.

Forskellen på "default-lease-time" og "max-lease-time". Funktionen af de to tider er defineret i RFC 2131, afsnit 4.4.5 "Reacquisition and expiration". Kort fortalt går det ud på, at når default-lease-time ("T1" i RFC'en) udløber, skal klienten begynde at forsøge at forny sit lease på IP-adressen ved at kontakte den DHCP-server, den oprindelig fik adressen fra. Det kan klienten så blive ved med at forsøge indtil den får svar, eller indtil "max-lease-time" ("T2" i RFC'en) udløber. Hvis T2 udløber skal klienten stoppe med at benytte IP-adressen, og i stedet begynde at broadcaste efter en ny DHCP-server.

Tiden mellem default-lease-time og max-lease-time er altså den frist, som en klient har til at forny sit lease på en IP-adresse. Da servere kan være nede, er det nødvendigt at der er lidt tid til at klare sådan en ekspeditionssag – helst så længe, at klienterne ikke begynder at falde af nettet pga. et enkelt nedbrud af DHCP-serveren.

Hvordan vælger man en fornuftig lease-time? Det der giver mindst belastning af DHCP-serveren er, hvis arbejdsstationerne ikke behøver at forny deres lease hele tiden – en gang om dagen er rimeligt, og derfor er default-lease-time sat til lidt længere end en normal arbejdsdag (10 timer) og max-tiden til 24 timer (86400 sekunder). Omvendt vil man måske godt have, at klienterne hurtigt opdager hvis man skifter DNS-server – for at det skal ske hurtigt, skal default-lease-time sættes ned, så klienterne får friske oplysninger fra serveren noget oftere. Det er en afvejning, man må gøre.

DHCP-serveren kan håndtere flere "subnet" – f.eks. hvis serveren også fungerer som router, så der er flere netkort installeret i maskinen. Så kan man konfigurere én DHCP-server, som deler adresser ud til de forskellige netværk. Almindeligvis har man dog kun ét netværk, der får adresser fra sin DHCP-server – men derfor skal der være en "subnet"-erklæring, der fortæller hvad det er for et fysisk netværk denne DHCP-pulje handler om. Har man f.eks. to netkort hvor man kun ønsker at DHCP-serveren skal tildele IP-adresser i det ene net – skal man alligevel definere DHCP-serveren for begge net, men vise at DHCP-serveren ikke skal tildele IP-adresser i det andet net, f.eks. for et klasse C-netværk 192.168.36.X. I det tilfælde kan følgende tilføjes til /etc/dhcpd.conf.


        subnet 192.168.36.0 netmask 255.255.255.0 {
                  deny booting;
        }


Hvis man gerne vil styre hvilke netkort DHCP-serveren lytter på, kan man tilføje det/dem som afsluttende argument(er) i kaldet af dhcpd (sikkert fra et skript i /etc/init.d/).

7.1.3.2. Start DHCP-serveren

Efter at have redigeret /etc/dhcpd.conf færdig er du klar til at starte DHCP-serveren. Kører du Red Hat, er det nemt. Du skal installere dhcp-pakken og køre


[root@linus /root]# /sbin/chkconfig --level 2345 dhcpd on

Så starter DHCP-serveren automatisk når maskinen starter op. Det virker dog først efter en genstart, så hvis du vil have serveren i gang med det samme, så kører du


[root@linus /root]# /etc/rc.d/init.d/dhcpd start

Du kan nu prøve at konfigurere enten en Linux-maskine eller en Windows-maskine til at bruge DHCP, og så se om den får oplysningerne fra serveren. Hvis det er en Windows-maskine du bruger til at teste med, så kan du bruge winipcfg-programmet (Win95 og Win98) eller ipconfig /all (Windows NT) til at se, hvordan maskinen er blevet konfigureret af en DHCP-server.

Når serveren kører, logger den forespørgsler til en log-fil, almindeligvis /var/log/messages. Det kan se således ud:


dhcpd: DHCPDISCOVER from 00:00:b4:c7:1e:e6 via eth0
dhcpd: DHCPOFFER on 192.168.0.101 to 00:00:b4:c7:1e:e6 via eth0
dhcpd: DHCPREQUEST for 192.168.0.101 from 00:00:b4:c7:1e:e6 via eth0
dhcpd: DHCPACK on 192.168.0.101 to 00:00:b4:c7:1e:e6 via eth0 

Først er det klienten, som leder efter en DHCP-server. Så tilbyder DHCP-serveren at klienten kan bruge adressen "192.168.0.101". Den beder klienten så om, og serveren svarer tilbage at det er OK.

De underlige adresser der står i hver linje, er Ethernet-adressen (MAC adressen) på det netkort, som spørger DHCP-serveren. Dem kan man bruge til at give servere en fast IP-adresse, selv om de får oplysningerne via DHCP.

7.1.3.3. Konfigurér en server med DHCP

Hvis man ønsker at en bestemt maskine altid får den samme IP-adresse fra DHCP-serveren, så kan man give den en statisk tildeling i DHCP-server-konfigurationen. Her bruger man den maskinens ethernet-kortets adresse, hvis maskinen tidligere har fået en IP-adresse fra DHCP-serveren, så kan man se ethernet-kortets -adresse i server-maskinens log-fil. På en Linux-maskinen kan du se dens egen ethernet-adressen med kommandoen /sbin/ifconfig:


[root@eric]$ /sbin/ifconfig eth0
          Link encap:Ethernet  HWaddr 00:00:B4:C7:1E:E6  
          inet addr:192.168.0.104  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:55 errors:0 dropped:0 overruns:0 frame:0
          TX packets:94 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:10 Base address:0x6100

"HWaddr" er Ethernet-kortets adresse. Hvis nu vi vil have at denne maskine altid får IP-adressen "192.168.0.4" selv om den får sin IP-adresse fra DHCP-serveren, så tilføjer vi nogle linjer til /etc/dhcpd.conf, inden i den "subnet"-blok som vi lavede før – så kommer den til at se således ud:


ddns-update-style ad-hoc;

subnet 192.168.0.0 netmask 255.255.255.0 {
        range 192.168.0.100 192.168.0.250;
        option subnet-mask 255.255.255.0;

        # default gateway
        option routers 192.168.0.1;

        option domain-name "intranet";
        option domain-name-servers 192.168.0.1;

        default-lease-time 36000;
        max-lease-time 86400;

        host eric {
                hardware ethernet 00:00:B4:C7:1E:E6;
                fixed-address 192.168.0.4;
        }
}

"host eric" indleder en særlig specifikation af hvordan en enkelt vært skal konfigureres. For at DHCP-serveren kan kende værten bruger vi Ethernet-adressen – den tager vi fra ifconfig-beskeden. For at tildele denne host en fast adresse bruges "fixed-address 192.168.0.4", og den adresse vil den pågældende vært så altid få.

Bemærk, at man godt kan tildele faste IP-adresser, der ligger uden for det område af IP-adresser, der står i "range"-specifikationen.

Fordelen ved også at konfigurere servere med IP-adresser fra en DHCP-server er, at hvis nogle af de andre oplysninger ændrer sig - f.eks. navneserveren eller standard-gateway – så skal man kun ændre det ét sted, nemlig på DHCP-serveren. Alle andre servere og arbejdsstationer får oplysningerne fra den.

Der er dog en enkelt undtagelse – DHCP-serveren kan ikke spørge sig selv om, hvilken IP-adresse den skal have. Den er man nødt til at konfigurere manuelt med en statisk IP-adresse, standard-gateway osv.

7.1.4. DHCP og DNS

Dette afsnit beskriver DHCP 3.0 fra ISC. Tidligere versioner i 2.X-serien har ikke haft samme funktionalitet.

Installationen er ret nem, enten henter du en rpm- eller en tarpakke med kildeteksten. Til Debian findes pakken dhcp3-server.

Når du har installeret DHCP 3.0, forestår der kun minimale ændringer. Du skal ændre i to filer: named.conf og dhcpd.conf. Eksempler kan hentes her cvs.linuxbog.dk/admin/eksempler.

I named.conf skal der tilføjes en option til de zoner hvor vores DHCP-server uddeler ip-numre til. Tilføjelsen giver named ret til at foretage opdateringer i vores zonefiler, og tilladelsen gives med følgende kommando: allow-update {localhost;}. Se eksempel nedenfor.


options {
    directory "/var/named";
    notify no;
    forwarders{
        XXX.XXX.XXX.XXX;
        XXX.XXX.XXX.XXX;
    };
};

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

zone "." in {
    type hint;
    file "named.ca";
};

zone "0.0.127.IN-ADDR.ARPA" in {
    type master;
    file "127.0.0";
};

zone "domænenavn" in {
    type master;
    file "filnavn";
    allow-update {localhost;};
};

zone "XXX.YYY.ZZZ.IN-ADDR.ARPA" in {
    type master;
    file "filnavn";
    allow-update {localhost;};
};

I dhcpd.conf skal der tilføjes en række options, der vedrører dynamisk dns. Disse options starter alle med ddns, og de væsentligste er følgende:

  • ddns-domainname "domænenavn"

  • ddns-rev-domainname "IN-ADDR.ARPA"

  • ddns-update-style interim

  • 
    zone domænenavn. {
        primary DNS-serverens ip-adresse;
    }
    
  • 
    zone reverse ip-adresse.IN-ADDR.ARPA. {
        primary DNS-serverens ip-adresse;
    }
    

Et eksempel følger nedenfor.


  option domain-name "domænenavn";
    ddns-update-style interim;

subnet  WWW.XXX.YYY.ZZZ. netmask 255.255.255.0 {
    range WWW.XXX.YYY.100 WWW.XXX.YYY.150;
    ddns-domainname "domænenavn";
    ddns-rev-domainname "IN-ADDR.ARPA";
#   log-facility local7;

    # default gateway
    option routers WWW.XXX.ZZZ.YYY;
    option domain-name-servers WWW.XXX.ZZZ.YYY;
    option interface-mtu 1500;
    option broadcast-address WWW.XXX.ZZZ.255;

    option netbios-name-servers WWW.XXX.ZZZ.YYY;
    option netbios-dd-server WWW.XXX.ZZZ.YYY;
    option netbios-node-type 8;

    default-lease-time 36000;
    max-lease-time 86400;
}

host prtsrv {
        hardware ethernet 00:40:8C:30:6F:CE;
        fixed-address prtsrv.domænenavn;
}

zone domænenavn. {
  primary WWW.XXX.ZZZ.YYY;
}

zone ZZZ.XXX.WWWW.in-addr.arpa. {
  primary WWW.XXX.ZZZ.YYY;
}

Hvis du bruger Redhat 7.2, mangler der en sidste rettelse. Rettelsen skal foretages i filen /etc/sysconfig/network, hvor du skal tilføje følgende:

  • DHCP_hostname="hostnavnet på klienten"

Det skal bemærkes, at ovenstående hostnavn er uden angivelse af domænet. Hvis vi f.eks. har domænet intranet, og ønsker at tildele klienten eric en adresse, skal hostnavnet angives som eric og ikke som eric.intranet.

Undlad at lave manuelle opdateringer i dynamiske zone filer. Hvis man vil lave manuelle opdateringer skal man først stoppe DNS serveren og dernæst slette .jnl filerne, så lave opdateringerne og starte serveren igen. Man kan desuden bruge nsupdate til at ændre i dynamiske zoner.