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.
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/
á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.arch
/conf/NOTES
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:
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/
á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 - A FreeBSD rendszermag testreszabása. Ha a rendszermag
(arch
/conf/NOTESGENERIC
) az indulás
során észlelte a kártyánkat, nem
kell újat készítenünk.
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.
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:
A rendszermag forrása
a Windows® XP meghajtó binárisa
(.SYS
a kiterjesztése)
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.
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:
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:
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 1500Az 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:
Az UP
szó mutatja, hogy a
kártyát sikerült beállítani
és készen áll a
használatra.
A kártya internet (inet
)
címe (jelen esetünkben ez 192.168.1.3
).
Érvényes hálózati maszkkal
rendelkezik (netmask
, ahol a 0xffffff00
a 255.255.255.0
címnek felel
meg).
Érvényes broadcast
(üzenetszóró) címmel rendelkezik
(ami itt most 192.168.1.255
).
A kártya MAC-címe
(ether
) 00:a0:cc:da:da:da
.
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.
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:
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:
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.
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
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
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.
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 msMost 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 msHa beállítottuk az
/etc/hosts
állományt, akkor
a 192.168.1.2
helyett a
gép nevét is megadhatjuk.
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. fejezet - Egyéb haladó hálózati
témákre.
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 - Tűzfalak 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.
Ha kérdése van a FreeBSD-vel kapcsolatban, a
következő címre írhat (angolul):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.