FreeBSD handboek
Terug | Hoofdstuk 11. Instellingen en optimalisatie | Volgende

# 11.8. Netwerkkaarten instellen

Geschreven door Marc Fonvieille.

Het is tegenwoordig nauwelijks voorstelbaar dat een computer geen netwerkverbinding heeft. Het toevoegen en instellen van een netwerkkaart is een gebruikelijke taak voor een FreeBSD-beheerder.

## 11.8.1. Het juiste stuurprogramma vinden

Voor het zoeken begint, moet duidelijk zijn om welke kaart het gaat, welke chip erop zit en of het een PCI- of ISA-kaart is. FreeBSD ondersteunt vele kaarten. Op de Hardware Compatibiliteitslijst voor de betreffende uitgave staan de kaarten die ondersteund worden.

Als duidelijk is dat een kaart ondersteund wordt, moet vastgesteld worden wat het geschikte stuurprogramma is. In het bestand `/usr/src/sys/conf/NOTES` staat een lijst van stuurprogramma's voor netwerkinterfaces met wat informatie over de ondersteunde chipsets of kaarten. In geval van twijfel biedt de hulppagina voor het stuurprogramma (`man`) vaak uitkomst. In het algemeen bevat deze meer informatie over de ondersteunde hardware en mogelijke problemen die kunnen optreden.

Als een veelgebruikte kaart gebruikt wordt, hoeft meestal niet ver gezocht te worden. Stuurprogramma's voor veelvoorkomende netwerkinterfaces zijn al aanwezig in de algemene kernel `GENERIC`. In dat geval wordt zo'n kaart al gevonden bij het opstarten, bijvoorbeeld met het volgende bericht:

    dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
    000ff irq 15 at device 11.0 on pci0
    dc0: Ethernet address: 00:a0:cc:da:da:da
    miibus0: <MII bus> on dc0
    ukphy0: <Generic IEEE 802.3u media interface> on miibus0
    ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
    dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
    000ff irq 11 at device 12.0 on pci0
    dc1: Ethernet address: 00:a0:cc:da:da:db
    miibus1: <MII bus> on dc1
    ukphy1: <Generic IEEE 802.3u media interface> on miibus1
    ukphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto

In dit voorbeeld zitten er twee kaarten in het systeem die het stuurprogramma dc(4) gebruiken.

Als het stuurprogramma voor een NIC geen onderdeel is van de kernel `GENERIC`, dan dient het juiste stuurprogramma voor die NIC geladen te worden. Dit kan op twee manieren:

- De meest eenvoudige manier is het laden van een kernelmodule voor een netwerkkaart met kldload(8) of automatisch tijdens het opstarten van het systeem door de benodigde regel toe te voegen aan `/boot/loader.conf`. Niet alle NIC-stuurprogramma's zijn als module beschikbaar. Zo zijn er bijvoorbeeld geen modules beschikbaar voor ISA-kaarten.

- Ondersteuning voor een kaart kan ook in de kernel gecompileerd worden. In `/usr/src/sys/conf/NOTES`, `/usr/src/sys/`arch`/conf/NOTES` en de hulppagina van het stuurprogramma is na te lezen wat er in het kernelinstellingenbestand moet staan. In Hoofdstuk 8 staat meer informatie over het compileren van een eigen kernel. Als een netwerkkaart al bij het opstarten wordt herkend door de kernel `GENERIC`, is er geen reden om een andere kernel te bouwen.

### 11.8.1.1. Gebruik maken van Windows® NDIS-stuurpgrogramma's

Helaas zijn er nog steeds veel leveranciers die geen schema's leveren voor stuurprogramma's aan de open-source gemeenschap, omdat ze deze informatie beschouwen als handelsgeheimen. Als gevolg daarvan hebben de ontwikkelaars van FreeBSD en andere projecten twee keuzes: zelf de stuurprogramma's ontwikkelen door een langdurig en pijnlijk proces van de huidige stuurprogramma's te ontcijferen, of door gebruik te maken van de huidige binaire bestanden voor het Microsoft® Windows platform. De meeste ontwikkelaars, inclusief diegeen die gekoppeld zijn aan FreeBSD, hebben voor het laatste gekozen.

Dankzij de bijdragen van Bill Paul (wpaul) is er vanaf FreeBSD 5.3-RELEASE “native” ondersteuning voor de Network Driver Interface Specification (NDIS). De FreeBSD NDISulator (ook wel bekend als Project Evil) neemt een binair Windows stuurprogramma en doet net alsof deze in een Windows systeem draait. Omdat het stuurprogramma ndis(4) een Windows binary gebruikt; is het alleen bruikbaar op i386™- en amd64-systemen.

> Opmerking: Het stuurprogramma ndis(4) is ontwikkeld om ondersteuning te geven aan PCI-, CardBus- en PCMCIA-apparaten, USB-apparaten worden nog niet ondersteund.

Om gebruik te kunnen maken van de NDISulator heeft u drie dingen nodig:

1. De bronbestanden van de kernel

2. Een Windows XP stuurprogramma (met de extensie `.SYS`)

3. Een instellingenbestand van het Windows XP stuurprogramma (met de extensie `.INF`)

Lokaliseer de bestanden voor uw specifieke kaart. Over het algemeen kunnen deze gevonden worden op de bijgeleverde CD's of op de website van de leverancier. In de volgende voorbeelden maken we gebruik van `W32DRIVER.SYS` en `W32DRIVER.INF`.

> Opmerking: Let op, u kunt geen gebruik maken van een Windows/i386 stuurprogramma op FreeBSD/amd64, hiervoor zult u een Windows/amd64 stuurprogramma moeten gebruiken om het werkend te krijgen.

De volgende stap is het compileren van het binaire stuurprogramma in een laadbare kernelmodule. Om dit voor elkaar te krijgen moet ndisgen(8) gebruikt worden als `root`.

    # ndisgen /pad/naar/W32DRIVER.INF
    /pad/naar/W32DRIVER.SYS

Het gereedschap ndisgen(8) is interactief en zal vragen om extra informatie als dat nodig is; het zal een kernelmodule produceren in de huidige map die als volgt gebruikt kan worden:

    # kldload ./W32DRIVER.ko

Naast de gegenereerde kernelmodule, moeten ook de modules `ndis.ko` en `if_ndis.ko` geladen worden. Dit zou automatisch moeten gebeuren als er een module geladen wordt dit afhankelijk is van ndis(4). Als ze handmatig ingeladen moeten worden gebruik dan de volgende commando's:

    # kldload ndis
    # kldload if_ndis

Het eerste commando laadt de stuurprogrammawrapper voor de NDIS miniport, de tweede laadt de daadwerkelijke netwerkinterface.

Controleer nu dmesg(8) om te zien of er ergens fouten voorkomen. Als alles goed gegaan is ziet u ongeveer het volgende:

    ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
    ndis0: NDIS API version: 5.0
    ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
    ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
    ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps

Vanaf dit moment kan de `ndis0` net zo gebruikt worden als elke andere netwerkkaart (bv. `dc0`).

Het systeem kan geconfigureerd worden zodat de NDIS-modules automatisch gestart worden tijdens het opstarten van het systeem, net zoals bij andere modules. Kopieer eerst de gegenereerde module `W32DRIVER.ko` naar de map `/boot/modules`. Voeg daarna de volgende regel toe aan `/boot/loader.conf`:

    W32DRIVER_load="YES"

## 11.8.2. De netwerkkaart instellen

Nadat een geschikt stuurprogramma geladen is, moet de kaart nog ingesteld worden. Mogelijk is dit al gebeurd door sysinstall tijdens de installatie.

Om de instellen van de netwerkkaarten weer te geven:

    % ifconfig
    dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
            inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
            ether 00:a0:cc:da:da:da
            media: Ethernet autoselect (100baseTX <full-duplex>)
            status: active
    dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
            inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
            ether 00:a0:cc:da:da:db
            media: Ethernet 10baseT/UTP
            status: no carrier
    lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
    lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
            inet 127.0.0.1 netmask 0xff000000
    tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500

> Opmerking: Op oudere versies van of FreeBSD moet volgens ifconfig(8) misschien de optie `-a` gebruikt worden. In ifconfig(8) zijn meer details over de syntaxis te lezen. In dit voorbeeld is de uitvoer over IPv6 (`inet6` etc.) achterwege gelaten.

In dit voorbeeld werden de volgende apparaten weergegeven:

- `dc0`: de eerste Ethernet-interface;

- `dc1`: de tweede Ethernet-interface;

- `lp0`: de parallelle poortinterface;

- `lo0`: het loopback-apparaat;

- `tun0`: het tunnelapparaat gebruikt door ppp.

FreeBSD gebruikt de naam van het stuurprogramma gevolgd door een nummer voor de volgorde waarop de kaarten gedetecteerd zijn bij het opstarten. `sis2` is de derde netwerkkaart in het systeem die het stuurprogramma sis(4) gebruikt.

In het vorige voorbeeld is het apparaat `dc0` volledig operationeel. Dit blijkt uit de volgende indicatoren:

1. `UP` betekent dat de kaart ingesteld is en klaar is voor gebruik;

2. De kaart heeft een Internet (`inet`) adres (in dit geval `192.168.1.3`);

3. Het heeft een geldig subnetmasker (`netmask`; `0xffffff00` is hetzelfde als `255.255.255.0`);

4. Het heeft een geldig broadcastadres (in dit geval `192.168.1.255`);

5. Het MAC-adres van de kaart (`ether`) is `00:a0:cc:da:da:da`;

6. De fysieke mediaselectie staat in autoselectiemodus (`media: Ethernet autoselect (100baseTX <full-duplex>)`). `dc1` is ingesteld om met `10baseT/UTP`-media te werken. Meer informatie over de mogelijke mediatypes staan in de hulppagina's voor het betreffende stuurprogramma.

7. De status van de verbinding (`status`) is `active`, dat wil zeggen dat de drager is gevonden. Bij `dc1`staat echter `status: no carrier`. Dit is normaal als er geen Ethernetkabel in de kaart gestoken is.

Als de uitvoer ifconfig(8) er ongeveer zoals hieronder uitziet, dan is de netwerkkaart nog niet ingesteld:

    dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
                    ether 00:a0:cc:da:da:da

Om de kaart in te stellen zijn `root`-rechten nodig. De netwerkkaart kan vanaf de console worden ingesteld met ifconfig(8), maar dan moet dat na elke herstart herhaald worden. Daarom wordt het vrijwel altijd in `/etc/rc.conf` gezet.

In `/etc/rc.conf` moet voor elke netwerkkaart in een systeem een regel toegevoegd worden. In het huidige voorbeeld zou dat het volgende kunnen zijn:

    ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
    ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"

`dc0`, `dc1`, enzovoort, moeten vervangen worden door de correcte stuurprogramma's voor de netwerkkaarten, zo ook de IP-adressen. In de handleiding van het stuurprogramma en van ifconfig(8) staan meer details over de mogelijke opties en in rc.conf(5) staat meer informatie over `/etc/rc.conf`.

Als het netwerk al is ingesteld tijdens het installeren van FreeBSD staan er al enkele regels met betrekking tot de netwerkkaart(en) in `/etc/rc.conf`. Het is dus handig `/etc/rc.conf` te controleren voordat er regels toegevoegd worden.

Ook `/etc/hosts` moet worden gewijzigd om de namen en IP adressen van verschillende machines op het lokale netwerk, als ze er nog niet in staan. Meer informatie staat in hosts(5) en `/usr/share/examples/etc/hosts`.

## 11.8.3. Testen en problemen oplossen

Als de veranderingen in `/etc/rc.conf` zijn gemaakt, moet het systeem opnieuw gestarten worden (of moeten nauwkeurig alle daemons gestart of herstart worden). Veranderingen aan de interface(s) worden dan toegepast en dan kan er controleerd worden of herstarten goed werkt zonder foutmeldingen.

Als de kaart werkt, maar de prestaties zijn slecht, dan kan het de moeite waard zijn om tuning(7) door te nemen. Incorrecte netwerkinstellingen kunnen ook tot langzame verbindingen leiden.

Soms kunnen enkele “`device timeouts`” optreden. Met sommige kaarten is dit normaal gedrag. Maar als dit continu gebeurt of storend is, is het verstandig uit te zoeken of er geen sprake is van een hardwareconfict tussen de netwerkkaart en een ander apparaat. Ook dient nogmaals de bekabeling gecontroleerd te worden. Misschien zit er niets anders op dan een andere netwerkkaart te gebruiken.

Het is ook mogelijk dat er “`watchdog timeout`” foutmeldingen optreden. Als eerste moet dan de netwerkkabel gecontroleerd worden. Veel kaarten hebben een PCI-slot nodig dat Bus Mastering ondersteunt. Sommige oudere moederborden hebben maar één PCI-slot waarmee dit kan (meestal slot 0). In de documentatie van de netwerkkaart en het moederbord is na te gaan of dit het probleem is.

“`No route to host`” meldingen treden op als het systeem niet in staat is om een pakket naar de eindbestemming te routeren. Dit kan gebeuren als er geen standaardroute aangegeven is of als er een kabel niet verbonden is. De uitvoer van `netstat -rn` moet gecontroleerd worden of er een geldige route is naar de bestemming. Mocht dit niet het geval zijn, dan staat er meer informatie in Hoofdstuk 31.

“`ping: sendto: Permission denied`” foutmeldingen worden vaak veroorzaakt door een verkeerd ingestelde firewall. Als de kernel `ipfw` activeert bij het opstarten zonder dat er firewallregels zijn gedefiniëerd, is het standaardbeleid om alle verkeer te weigeren, zelfs pings! In Hoofdstuk 30 staat meer informatie.

Er kan ook sprake zijn van onvoldoende prestaties doordat de instelling van de mediaselectie niet optimaal is. In dergelijke gevallen is het mogelijk om de mediaselectie niet als `autoselect` in te stellen, maar expliciet aan te geven wat de mediaselectie moet zijn, bijvoorbeeld 10baseT/UTP voor twisted pair. Hoewel dit voor de meeste hardware helpt, kan het zijn dat de problemen blijven. Dan moeten nogmaals de netwerkinstellingen gecontroleerd worden en geeft de tuning(7) handleiding wellicht meer informatie.

Terug | Begin | Volgende
Gebruik van rc met FreeBSD | Omhoog | Virtuele hosts

Deze en andere documenten kunnen worden gedownload van ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Lees voor vragen over FreeBSD de documentatie alvorens contact te zoeken <questions@FreeBSD.org>.
Vragen over deze documentatie kunnen per e-mail naar <doc@FreeBSD.org>.