FreeBSD kézikönyv
Előző | Fejezet 11. Beállítás és finomhangolás | Következő

# 11.8. A hálózati kártyák beállítása

Írta: Marc Fonvieille.

Manapság már el sem tudunk képzelni számítógépet hálózati csatlakozás nélkül. A hálózati csatolókártyák hozzáadása és beállítása egy FreeBSD rendszergazda mindennapos feladata.

## 11.8.1. A megfelelő meghajtóprogram felderítése

Mielőtt bárminek is nekikezdenénk, érdemes tisztában lennünk azzal, hogy a rendelkezésünkre álló kártya milyen típusú, milyen chipet használ és hogy PCI vagy ISA buszon csatlakozik-e. A FreeBSD a PCI és ISA csatolós kártyák széles spektrumát ismeri. Az egyes kiadásokhoz mellékelt “Hardware Compatibility List” (Hardverkompatibilitási lista) dokumentumokban tudjuk ellenőrizni, hogy a kártyákat ismeri a rendszer.

Miután meggyőződtünk róla, hogy a kártyánkat ismeri a rendszer, meg kell keresnünk a hozzá tartozó meghajtót. A `/usr/src/sys/conf/NOTES` és a `/usr/src/sys/`arch`/conf/NOTES` állományok tartalmazzák a hálózati kártyák meghajtóinak rövid leírását, benne a támogatott chipsetek és kártyák típusaival. Ha ez alapján nem tudjuk teljes biztosággal eldönteni, hogy melyik a számunkra megfelelő meghajtó, nézzük meg a saját man oldalát. Ezen a man oldalon megtaláljuk az általa ismert összes eszközt és a velük kapcsolatban előforduló jellemző problémákat.

Ha egy elterjedt típust sikerült beszereznünk, akkor nem kell különösebben sokáig keresnünk a neki megfelelő meghajtót. Az ismertebb hálózati kártyák meghajtói ugyanis alapból benne vannak a `GENERIC` rendszermagban, ezért a rendszer indítása során ehhez hasonlóan meg is jelennek a kártyák:

    dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
    000ff irq 15 at device 11.0 on pci0
    miibus0: <MII bus> on dc0
    bmtphy0: <BCM5201 10/100baseTX PHY> PHY 1 on miibus0
    bmtphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
    dc0: Ethernet address: 00:a0:cc:da:da:da
    dc0: [ITHREAD]
    dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
    000ff irq 11 at device 12.0 on pci0
    miibus1: <MII bus> on dc1
    bmtphy1: <BCM5201 10/100baseTX PHY> PHY 1 on miibus1
    bmtphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
    dc1: Ethernet address: 00:a0:cc:da:da:db
    dc1: [ITHREAD]

Ebben a példában láthatunk is két olyan kártyát, amelyek a dc(4) meghajtót használják.

Ha a hálózati kártyánk meghajtója nem szerepel a `GENERIC` konfigurációban, akkor a működéséhez be kell tölteni a megfelelő meghajtót. Ezt alapvetően kétféleképpen érhetjük el:

- Ennek legegyszerűbb módja, ha a kldload(8) használatával alkalmanként vagy a `/boot/loader.conf` állományban a megfelelő sor hozzáadásával a rendszer indításával együtt betöltjük a hálózati kártya meghajtójához tartozó modult. Nem mindegyik hálózati kártya meghajtója érhető el modul formájában. Erre konkrét például szolgálnak az ISA kártyákhoz tartozó modulok.

- Másik lehetőségünk, ha statikusan beépítjük a kártyánk támogatását a rendszermagba. A `/usr/src/sys/conf/NOTES` és az `/usr/src/sys/`arch`/conf/NOTES` állományok, valamint a meghajtóhoz tartozó man oldal elolvasásából megtudhatjuk a rendszermag beállításait tartalmazó állományban megadandó paramétereket. A rendszermag újrafordítását lásd 8 fejezet. Ha a rendszermag (`GENERIC`) az indulás során észlelte a kártyánkat, nem kell újat készítenünk.

### 11.8.1.1. A Windows® NDIS meghajtóinak használata

Sajnos még mindig sok olyan gyártó akad, akik a nyílt forrású közösség számára nem adják ki a meghajtóik működésének alapjait, mivel az ilyen adatokat szakmai titoknak tekintik. Ebből következik, hogy a FreeBSD és más operációs rendszerek fejlesztői számára két választás marad: vagy a gyári meghajtók visszafejtésének hosszú és fájdalmas útján haladva fejlesztik ki a saját meghajtójukat, vagy pedig a Microsoft® Windows platformra kiadott meghajtók binárisait hasznosítják. A legtöbb fejlesztő, köztük a FreeBSD fejlesztői is, ez utóbbi megközelítést választották.

Bill Paul (wpaul) jóvoltából a FreeBSD 5.3-RELEASE változatában megjelent a “Network Driver Interface Specification” (NDIS, avagy hálózati meghajtók szabványos felülete) “natív” támogatása. A FreeBSD NDISulator (másnéven Project Evil, a Gonosz terve) nevű komponense fog egy Windows-os meghajtót és elhiteti vele, hogy a Windows operációs rendszerrel kommunikál. Mivel az ndis(4) meghajtó Windows binárisokat használ fel, ezért csak i386 és amd64 rendszerek esetén érhető el.

> Megjegyzés: Az ndis(4) meghajtó leginkább a PCI, CardBus és PCMCIA csatolójú eszközök támogatására lett kitalálva, az USB eszközöket még nem ismeri.

Az NDISulator használatához három tényezőre van szükségünk:

1. A rendszermag forrása

2. a Windows XP meghajtó binárisa (`.SYS` a kiterjesztése)

3. a Windows XP meghajtó konfigurációs állománya (`.INF` a kiterjesztése)

Keressük meg az említett állományokat az adott kártyához. Ezeket általában a mellékelt CD-n vagy a gyártó honlapján találjuk meg. A most következő példákban a `W32DRIVER.SYS` és a `W32DRIVER.INF` neveket fogjuk használni.

> Megjegyzés: A Windows i386 architektúrájú verziójához készült meghajtóprogramokat nem tudjuk a FreeBSD/amd64 verziójával használni. A működéshez amd64-re készült Windows-os meghajtókra van szükség.

A következő lépés a meghajtó binárisainak betölthető modulba fordítása. Ennek eléréséhez használjuk az ndisgen(8) parancsot a `root` felhasználóval:

    # ndisgen /windowsos/meghajtó/W32DRIVER.INF /windowsos/meghajtó/W32DRIVER.SYS

Az ndisgen(8) egy interaktív segédprogram, amely működése közben még rákérdez néhány szükséges információra. Az aktuális könyvtárban létrehoz egy rendszermagmodult, amelyet az alábbi módon tudunk betölteni:

    # kldload ./W32DRIVER_SYS.ko

Az előállított modul mellé be kell töltenünk még az `ndis.ko` és az `if_ndis.ko` modulokat is. Ez általában minden olyan modul esetén megtörténik magától, amely függ az ndis(4) használatától. Kézileg a következő parancsokkal tudjuk ezeket betölteni:

    # kldload ndis
    # kldload if_ndis

Itt az első parancs betölti az NDIS miniport meghajtó burkolására szánt kódot, valamint a második a tényleges hálózati csatolófelületet.

Most pedig a dmesg(8) kimenetében ellenőrizzük, hogy történt-e valamilyen hiba a betöltés során. Ha minden jól ment, akkor az alábbiakhoz hasonló kimenetet produkált:

    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

Innentől kezdve az `ndis0` nevű eszközt úgy tudjuk használni, mint bármelyik más hálózati felületet (például `dc0`).

A többi modulhoz hasonló módon be tudjuk állítani, hogy a rendszer indulásával együtt betöltődjenek az NDIS modulok. Ehhez először másoljuk az imént létrehozott modult, az `W32DRIVER_SYS.ko` állományt a `/boot/modules` könyvtárba. Ezután adjuk hozzá a következő sort a `/boot/loader.conf` állomány tartalmához:

    W32DRIVER_SYS_load="YES"

## 11.8.2. A hálózati kártya beállítása

Ahogy betöltődött a megfelelő meghajtó a hálózati kártyánkhoz, be is kell állítanunk a kártyát. A hálózati kártyák sok más dologgal együtt beállíthatóak a telepítés során a sysinstall segítségével.

A rendszerünkben beállított hálózati csatolófelületek megjelenítéséhez gépeljük be a következő parancsot:

    % ifconfig
    dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
            options=80008<VLAN_MTU,LINKSTATE>
            ether 00:a0:cc:da:da:da
            inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
            media: Ethernet autoselect (100baseTX <full-duplex>)
            status: active
    dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
            options=80008<VLAN_MTU,LINKSTATE>
            ether 00:a0:cc:da:da:db
            inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
            media: Ethernet 10baseT/UTP
            status: no carrier
    plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
    lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
            options=3<RXCSUM,TXCSUM>
            inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
            inet6 ::1 prefixlen 128
            inet 127.0.0.1 netmask 0xff000000
            nd6 options=8010<POINTOPOINT,MULTICAST> mtu 1500

Az előbbi parancs kimenetében a következő eszközök jelentek meg:

- `dc0`: az első Ethernet felület

- `dc1`: a második Ethernet felület

- `plilp0`: a párhuzamos port felülete (amennyiben található párhuzamos port a számítógépben)

- `lo0`: a loopback eszköz

A FreeBSD a kártyához tartozó meghajtó nevével és egy sorszámmal azonosítja a rendszermag indulása során talált eszközöket. Például az `sis2` a rendszerben található harmadik olyan eszköz, amely a sis(4) meghajtót használja.

A példában a `dc0` eszköz aktív és működőképes. Ennek legfontosabb jelei:

1. Az `UP` szó mutatja, hogy a kártyát sikerült beállítani és készen áll a használatra.

2. A kártya internet (`inet`) címe (jelen esetünkben ez `192.168.1.3`).

3. Érvényes hálózati maszkkal rendelkezik (`netmask`, ahol a `0xffffff00` a `255.255.255.0` címnek felel meg).

4. Érvényes broadcast (üzenetszóró) címmel rendelkezik (ami itt most `192.168.1.255`).

5. A kártya MAC-címe (`ether`) `00:a0:cc:da:da:da`.

6. A hozzá tartozó fizikai eszköz kiválasztása automatikus (`media: Ethernet autoselect (100baseTX <full-duplex>)`). Láthatjuk, hogy a `dc1` eszközt egy `10baseT/UTP` típusú fizikai eszközhöz állítottuk be. Az egyes meghajtókhoz tartozó fizikai módokról a nekik megfelelő man oldalakon olvashatunk.

7. A kapcsolat állapota (`status`) `active` értékű, tehát van vonal. A `dc1` esetén láthatjuk, hogy a `status: no carrier` (nincs vonal). Ez teljesen normálisnak tekinthető minden olyan esetben, amikor a kártyába még nem dugtunk Ethernet-kábelt.

Amennyiben az ifconfig(8) kimenete valami ilyesmi:

    dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
    	        options=80008<VLAN_MTU,LINKSTATE>
    	        ether 00:a0:cc:da:da:da
    	        media: Ethernet autoselect (100baseTX <full-duplex>)
    	        status: active

akkor az arra utal, hogy a kártyát nem állítottuk be.

A kártya beállításához a `root` felhasználó jogosultságaira van szükségünk. A hálózati kártyák beállítása az ifconfig(8) segítségével elvégezhető parancssorból is, de a gép újraindításakor az így megadott értékek elvesznek. Ezért az `/etc/rc.conf` állományba kell felvennünk a hálózati kártyák érvényes beállításait.

A kedvenc szövegszerkesztőnkben nyissuk meg az `/etc/rc.conf` állományt. Minden egyes hálózati csatolóhoz fel kell vennünk benne egy sort, ennek megfelelően most a példához tartozó módon az alábbiakat:

    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"

A `dc0` és `dc1` neveket kell a rendszerünkben ténylegesen megtalálható eszközök neveire kicserélni, valamint megadni a nekik megfelelő címeket. A kártya meghajtójának és az ifconfig(8) man oldalának elolvasásával kideríthetjük az itt megadható további beállításokat, valamint az rc.conf(5) man oldalán részletesebben megismerhetjük az `/etc/rc.conf` formai követelményeit.

Ha a telepítés során beállítottuk volna a hálózati kapcsolatokat, akkor tapasztalhatjuk, hogy egyes hálózati kártyák sorai itt már szerepelnek. Ellenőrizzük az `/etc/rc.conf` tartalmát, mielőtt bővítenénk!

Mindezek mellett az `/etc/hosts` állományba is be kell írnunk a helyi hálózatunkon található különféle gépek neveit és IP-címeit, ha még nem szerepelnének ott. Erről további részleteket a hosts(5) man oldalról és az `/usr/share/examples/etc/hosts` állományból tudhatunk meg.

> Megjegyzés: Ha a géppel szeretnénk majd csatlakozni az internetre, akkor ne felejtsük el manuálisan beállítani az alapértelmezett átjárót és a névfeloldáshoz szükséges kiszolgálót:

>     # echo 'defaultrouter="alapertelmezett_atjaro"' >> /etc/rc.conf
>     # echo 'nameserver DNS_kiszolgalo' >> /etc/resolv.conf

## 11.8.3. Tesztelés és hibaelhárítás

Miután az `/etc/rc.conf` állományban elvégeztük a szükséges változtatásokat, érdemes újraindítanunk a rendszerünket. Ennek révén érvényesítjük a csatolófelületekkel kapcsolatos változtatásainkat és ellenőrizzük, hogy így a rendszer mindenféle hibaüzenet nélkül képes elindulni. A másik lehetőség, ha csak magát a hálózati alrendszer konfigurációját indítjuk el újra:

    # /etc/rc.d/netif restart

> Megjegyzés: Ha az `/etc/rc.conf` állományban már beállítottuk az alapértelmezett átjárót, akkor elegendő csupán ez a parancs:

>     # /etc/rc.d/routing restart

Ahogy újrakonfiguráltuk a hálózati alrendszert, ki is tudjuk próbálni a hálózati felületeket.

### 11.8.3.1. Az Ethernet kártyák tesztelése

Az Ethernet kártyák helyes beállításának vizsgálatához két dolgot kell kipróbálnunk. Először is pingeljük magát a felületet, majd ezután pingeljünk meg a helyi hálózaton egy másik számítógépet.

Elsőként tehát próbáljuk meg a helyi felületet:

    % ping -c5 192.168.1.3
    PING 192.168.1.3 (192.168.1.3): 56 data bytes
    64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
    64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
    64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
    64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
    64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms

    --- 192.168.1.3 ping statistics ---
    5 packets transmitted, 5 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms

Most pedig pingeljünk meg egy másik számítógépet a helyi hálózaton:

    % ping -c5 192.168.1.2
    PING 192.168.1.2 (192.168.1.2): 56 data bytes
    64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
    64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
    64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
    64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
    64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms

    --- 192.168.1.2 ping statistics ---
    5 packets transmitted, 5 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms

Ha beállítottuk az `/etc/hosts` állományt, akkor a `192.168.1.2` helyett a gép nevét is megadhatjuk.

### 11.8.3.2. A hibák elhárítása

A hardverek és szoftverek beállításaiban mindig is valódi kín megtalálni a hibákat, és ezeket a kínokat többnyire úgy tudjuk enyhíteni, ha először az egyszerű hibaforrásokat szűrjük ki. Csatlakoztattuk a hálózati kábelt? Tisztességesen beállítottuk a hálózati szolgáltatásokat? Jól állítottuk be a tűzfalat? A FreeBSD képes kezelni a kártyát? A hibajelentések elküldése előtt mindig bújjuk át a támogatott hardvereszközök listáját. A FreeBSD verziókat frissítsük a legújabb STABLE változatra. Olvassuk át a levelezési listák archívumait vagy legalább keressünk rá a témára az interneten.

Ha a kártya működik, de a teljesítménye nem kielégítő, érdemes ennek utánanézni a tuning(7) man oldalon. Ilyenkor érdemes ellenőrizni a hálózati beállításainkat is, mivel a helytelen beállítások gyakran okoznak teljesítményvesztést.

Bizonyos esetekben láthatunk egy vagy két “`device timeout`” típusú hibát is, ami a kártyák egyes fajtáinál elfogadható. Ha azonban folyamatosan megjelennek vagy zavaróvá válnak, érdemes utánanéznünk, hogy az eszköz nem ütközik-e valamelyik másikkal. Mindenképpen győződjünk meg a kábelek épségéről és csatlakoztatásáról. Még az is elképzelhető, hogy egyszerűen csak egy másik hálózati kártyára van szükségünk.

Néha felbukkanak “`watchdog timeout`” jellegű hibák is. Ilyenkor elsőként mindig a hálózati kábelt ellenőrizzük. Egyes kártyáknak olyan PCI foglalatra van szükségük, ami támogatja a Bus Mastering opciót. Néhány régebbi alaplapon csak ilyen PCI bővítőhely található (ami általában a 0. foglalat). Olvassunk utána a hálózati kártya és az alaplap dokumentációjában, hátha ezek okozzák a problémát.

A “`No route to host`” üzenet akkor jelenik meg, ha a rendszer képtelen megállapítani, milyen úton juttassa el a csomagokat a megadott célhoz. Ez többnyire olyankor történik meg, amikor nem adtunk meg alapértelmezett kézbesítési irányt (default route) vagy nem dugtuk be a hálózati kábelt. A `netstat -rn` kimenetéből meg tudjuk állapítani, hogy létezik-e érvényes út az elérni kívánt cél felé. Ha nincs, akkor haladjunk tovább a 31 fejezetre.

A “`ping: sendto: Permission denied`” jellegű üzeneteket többségében egy helytelenül beállított tűzfal okozza. Ha az `ipfw` működését engedélyeztük a rendszermagban, de nem adtunk meg hozzá szabályokat, akkor az alapértelmezett házirend szerint minden forgalmat blokkolni fog, tehát még a pingeket is! Ezzel kapcsolatban a 30 fejezet elolvasását ajánljuk.

Előfordulhat, hogy a kártya teljesítménye igen gyenge vagy az átlagos alatt van. Ilyenkor a fizikai eszköz `autoselect` (automatikus) típusú kiválasztása helyett érdemes megadnunk a konkrét eszköznek megfelelő típust. Habár ez a legtöbb hardver esetén beválik, nem mindenki számára jelent megoldást. Ismételten csak annyit tudunk ehhez hozzátenni, hogy ellenőrizzük a hálózati beállításainkat és olvassuk el a tuning(7) man oldalt.

Előző | Tartalom | Következő
Az rc használata FreeBSD alatt | Fel | Virtuális címek

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.