Ein Rechner ohne Netzanschluss ist heute nicht mehr vorstellbar. Die Konfiguration einer Netzwerkkarte gehört zu den alltäglichen Aufgaben eines FreeBSD Administrators.
Bevor Sie anfangen, sollten Sie das Modell Ihrer Karte kennen, wissen welchen Chip die Karte benutzt und bestimmen, ob es sich um eine PCI- oder ISA-Karte handelt. Eine Aufzählung der unterstützten PCI- und ISA-Karten finden Sie in der Liste der unterstützen Geräte. Schauen Sie nach, ob Ihre Karte dort aufgeführt ist.
Wenn Sie wissen, dass Ihre Karte unterstützt wird,
müssen Sie den Treiber für Ihre Karte bestimmen.
/usr/src/sys/conf/NOTES
und
/usr/src/sys/
enthalten eine
Liste der verfügbaren Treiber mit Informationen zu den
unterstützten Chipsätzen und Karten. Wenn Sie sich nicht
sicher sind, ob Sie den richtigen Treiber ausgewählt haben,
lesen Sie die Hilfeseite des Treibers. Die Hilfeseite enthält
weitere Informationen über die unterstützten Geräte
und macht auch auf mögliche Probleme aufmerksam.arch
/conf/NOTES
Wenn Sie eine gebräuchliche Karte besitzen, brauchen Sie
meistens nicht lange nach dem passenden Treiber zu suchen. Die
Treiber zu diesen Karten sind schon im
GENERIC
-Kernel enthalten und die Karte sollte
während des Systemstarts erkannt werden:
Im Beispiel erkennt das System zwei Karten, die den dc(4) Treiber benutzen.
Ist der Treiber für Ihre Netzwerkkarte nicht
in GENERIC
enthalten, müssen
Sie den Treiber laden, um die Karte zu benutzen.
Sie können den Treiber auf zwei Arten laden:
Am einfachsten ist es, das Kernelmodul für Ihre Karte mit kldload(8) zu laden. Allerdings gibt es nicht für alle Karten Kernelmodule; zum Beispiel gibt es keine Kernelmodule für ISA-Karten.
Alternativ können Sie den Treiber für die
Karte fest in den Kernel einbinden. Schauen Sie sich dazu
/usr/src/sys/conf/NOTES
,
/usr/src/sys/
und die Hilfeseite des Treibers, den Sie in den Kernel
einbinden möchten, an. Die Übersetzung des Kernels
wird in Kapitel 9, Konfiguration des FreeBSD-Kernels beschrieben. Wenn
Ihre Karte während des Systemstarts vom Kernel
(arch
/conf/NOTESGENERIC
) erkannt wurde, müssen
Sie den Kernel nicht neu übersetzen.
Leider stellen nach wie vor viele Unternehmen die Spezifikationen ihrer Treiber der Open Source Gemeinde nicht zur Verfügung, weil sie diese Informationen als Geschäftsgeheimnisse betrachten. Daher haben die Entwickler von FreeBSD und anderen Betriebssystemen nur zwei Möglichkeiten. Entweder versuchen sie in einem aufwändigen Prozess den Treiber durch Reverse Engineering nachzubauen, oder sie versuchen, die vorhandenen Binärtreiber der Microsoft® Windows®-Plattform zu verwenden. Die meisten Entwickler, darunter auch die an FreeBSD beteiligten, haben sich für den zweiten Ansatz entschieden.
Bill Paul (wpaul) ist es zu verdanken, dass es seit eine „native“ Unterstützung der Network Driver Interface Specification (NDIS) gibt. Der FreeBSD NDISulator (auch als Project Evil bekannt) nutzt den binären Windows®-Treiber, indem er diesem vorgibt, unter Windows® zu laufen. Da der ndis(4)-Treiber eine Windows®-Binärdatei nutzt, kann er nur auf i386™- und amd64-Systemen verwendet werden.
Der ndis(4)-Treiber unterstützt primär PCI-, CardBus- sowie PCMCIA-Geräte, USB-Geräte werden hingegen noch nicht unterstützt.
Um den NDISulator zu verwenden, benötigen Sie drei Dinge:
Die Kernelquellen
Den Windows® XP-Binärtreiber
(mit der Erweiterung .SYS
)
Die Konfigurationsdatei des Windows® XP-Treibers
(mit der Erweiterung .INF
)
Suchen Sie die Dateien für Ihre Karte. Diese
befinden sich meistens auf einer beigelegten CD-ROM, oder
können von der Internetseite des Herstellers
heruntergeladen werden. In den folgenden Beispielen werden
die Dateien W32DRIVER.SYS
und
W32DRIVER.INF
verwendet.
Sie können einen Windows®/i386-Treiber nicht unter FreeBSD/amd64 einsetzen, vielmehr benötigen Sie dafür einen Windows®/amd64-Treiber.
Als Nächstes kompilieren Sie den binären
Treiber, um ein Kernelmodul zu erzeugen. Dazu rufen Sie als
root
ndisgen(8) auf:
#
ndisgen /path/to/W32DRIVER.INF
/path/to/W32DRIVER.SYS
ndisgen(8) arbeitet interaktiv, benötigt es weitere Informationen, so fragt es Sie danach. Als Ergebnis erhalten Sie ein Kernelmodul im Arbeitsverzeichnis, das Sie wie folgt laden können:
#
kldload ./W32DRIVER.ko
Neben dem vorhin erzeugten Kernelmodul müssen Sie
auch die Kernelmodule ndis.ko
und
if_ndis.ko
laden. Diese Module sollten
automatisch geladen werden, wenn Sie ein von ndis(4)
abhängiges Modul laden. Wollen Sie die Module hingegen
manuell laden, geben Sie die folgenden Befehle ein:
#
kldload ndis
#
kldload if_ndis
Der erste Befehl lädt dabei den NDIS-Miniport-Treiber, der zweite das tatsächliche Netzwerkgerät.
Überprüfen Sie nun die Ausgabe von dmesg(8) auf eventuelle Fehler während des Ladevorgangs. Gab es dabei keine Probleme, sollten Sie eine Ausgabe ähnlich der folgenden erhalten:
Ab jetzt können Sie mit dem Gerät
ndis0
wie mit jeder anderen
Gerätedatei (etwa dc0
)
arbeiten.
Wie jedes Kernelmodul können auch die NDIS-Module
beim Systemstart automatisch geladen werden. Dazu kopieren
Sie das erzeugte Modul (W32DRIVER_SYS.ko
)
in das Verzeichnis /boot/modules
. Danach
fügen Sie die folgende Zeile in
/boot/loader.conf
ein:
Nachdem der richtige Treiber für die Karte geladen ist, muss die Karte konfiguriert werden. Unter Umständen ist die Karte schon während der Installation mit sysinstall konfiguriert worden.
Das nachstehende Kommando zeigt die Konfiguration der Karten eines Systems an:
%
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=8802<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> metric 0 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=3<PERFORMNUD,ACCEPT_RTADV>Im Beispiel werden Informationen zu den folgenden Geräten angezeigt:
dc0
: Der erste
Ethernet-Adapter
dc1
: Der zweite
Ethernet-Adapter
plip0
: Die parallele
Schnittstelle (falls Ihr System über eine
derartige Schnittstelle verfügt)
lo0
: Das Loopback-Gerät
Der Name der Netzwerkkarte wird aus dem Namen des Treibers und
einer Zahl zusammengesetzt. Die Zahl gibt die Reihenfolge an, in
der die Geräte beim Systemstart erkannt wurden. Die dritte
Karte, die den sis(4) Treiber benutzt, würde
beispielsweise sis2
heißen.
Der Adapter dc0
aus dem Beispiel ist
aktiv. Sie erkennen das an den folgenden Hinweisen:
UP
bedeutet, dass die Karte
konfiguriert und aktiv ist.
Der Karte wurde die Internet-Adresse (inet
)
192.168.1.3
zugewiesen.
Die Subnetzmaske ist richtig
(0xffffff00
entspricht
255.255.255.0
).
Die Broadcast-Adresse 192.168.1.255
ist richtig.
Die MAC-Adresse der Karte (ether
)
lautet 00:a0:cc:da:da:da
.
Die automatische Medienerkennung ist aktiviert
(media: Ethernet autoselect (100baseTX
<full-duplex>)
). Der Adapter
dc1
benutzt das Medium
10baseT/UTP
. Weitere Informationen
über die einstellbaren Medien entnehmen
Sie bitte der Hilfeseite des Treibers.
Der Verbindungsstatus (status
) ist
active
, das heißt es wurde ein
Trägersignal entdeckt. Für
dc1
wird status: no
carrier
angezeigt. Das ist normal, wenn kein Kabel
an der Karte angeschlossen ist.
Wäre die Karte nicht konfiguriert, würde die Ausgabe von ifconfig(8) so aussehen:
Sie brauchen die Berechtigungen von root
, um
Ihre Karte zu konfigurieren. Die Konfiguration kann auf der
Kommandozeile mit ifconfig(8) erfolgen, allerdings
müsste sie dann nach jedem Neustart wiederholt werden.
Dauerhaft wird die Karte in /etc/rc.conf
konfiguriert.
Öffnen Sie /etc/rc.conf
mit Ihrem
Lieblingseditor und fügen Sie für jede Karte Ihres
Systems eine Zeile hinzu. In dem hier diskutierten Fall wurden
die nachstehenden Zeilen eingefügt:
Ersetzen Sie dc0
,
dc1
usw. durch die Gerätenamen Ihrer
Karten und setzen Sie die richtigen IP-Adressen ein. Die
Hilfeseiten des Treibers und ifconfig(8) enthalten weitere
Einzelheiten über verfügbare Optionen. Die Syntax von
/etc/rc.conf
wird in rc.conf(5)
erklärt.
Wenn Sie das Netz während der Installation
konfiguriert haben, existieren vielleicht schon Einträge
für Ihre Karten. Überprüfen Sie
/etc/rc.conf
bevor Sie weitere Zeilen
hinzufügen.
In /etc/hosts
können Sie die Namen
und IP-Adressen der Rechner Ihres LANs eintragen. Weitere
Informationen entnehmen Sie bitte hosts(5) und
/usr/share/examples/etc/hosts
.
Soll Ihr System sich auch mit dem Internet verbinden können, müssen Sie Default-Gateway und Nameserver manuell konfigurieren:
#
echo 'defaultrouter="Ihr_Default_Gateway
"' >> /etc/rc.conf
#
echo 'nameserver Ihr_DNS_Server
' >> /etc/resolv.conf
Nachdem Sie die notwendigen Änderungen in
/etc/rc.conf
vorgenommen haben, führen
Sie einen Neustart Ihres Systems durch. Dadurch werden die Adapter
konfiguriert und Sie stellen sicher, dass der Start ohne
Konfigurationsfehler erfolgt. Alternativ können Sie
auch lediglich die Netzwerkeinstellungen neu initialisieren:
#
/etc/rc.d/netif restart
Haben Sie ein Default-Gateway definiert (in der Datei
/etc/rc.conf
), müssen Sie
auch den folgenden Befehl ausführen:
#
/etc/rc.d/routing restart
Wenn das System gestartet ist, sollten Sie die Netzwerkkarten testen.
Mit zwei Tests können Sie prüfen, ob die
Ethernet-Karte richtig konfiguriert ist. Testen Sie zuerst mit
ping
den Adapter selbst und sprechen Sie dann
eine andere Maschine im LAN an.
Zuerst, der Test des Adapters:
%
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 msJetzt versuchen wir, eine andere Maschine im LAN zu erreichen:
%
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 msSie können auch den Namen der Maschine anstelle von
192.168.1.2
benutzen, wenn Sie
/etc/hosts
entsprechend eingerichtet
haben.
Fehler zu beheben, ist immer sehr mühsam. Indem Sie die einfachen Sachen zuerst prüfen, erleichtern Sie sich die Aufgabe. Steckt das Netwerkkabel? Sind die Netzwerkdienste richtig konfiguriert? Funktioniert die Firewall? Wird die Netwerkkarte von FreeBSD unterstützt? Lesen Sie immer die Hardware-Informationen des Releases, bevor Sie einen Fehlerbericht einsenden. Aktualisieren Sie Ihre FreeBSD-Version auf -STABLE. Suchen Sie in den Archiven der Mailinglisten oder auf dem Internet nach bekannten Lösungen.
Wenn die Karte funktioniert, die Verbindungen aber zu langsam sind, lesen Sie bitte die Hilfeseite tuning(7). Prüfen Sie auch die Netzwerkkonfiguration, da falsche Einstellungen die Ursache für langsame Verbindungen sein können.
Wenn Sie viele device timeout Meldungen in den Systemprotokollen finden, prüfen Sie, dass es keinen Konflikt zwischen der Netzwerkkarte und anderen Geräten Ihres Systems gibt. Überprüfen Sie nochmals die Verkabelung. Unter Umständen benötigen Sie eine neue Netzwerkkarte.
Wenn Sie in den Systemprotokollen watchdog timeout Fehlermeldungen finden, kontrollieren Sie zuerst die Verkabelung. Überprüfen Sie dann, ob der PCI-Steckplatz der Karte Bus Mastering unterstützt. Auf einigen älteren Motherboards ist das nur für einen Steckplatz (meistens Steckplatz 0) der Fall. Lesen Sie in der Dokumentation Ihrer Karte und Ihres Motherboards nach, ob das vielleicht die Ursache des Problems sein könnte.
Die Meldung No route to host
erscheint, wenn Ihr System ein Paket nicht zustellen
kann. Das kann vorkommen weil beispielsweise keine
Default-Route gesetzt wurde oder das Netzwerkkabel
nicht richtig steckt. Schauen Sie in der Ausgabe
von netstat -rn
nach, ob eine
Route zu dem Zielsystem existiert. Wenn nicht, lesen
Sie bitte das Kapitel 32, Weiterführende Netzwerkthemen.
Die Meldung ping: sendto: Permission
denied wird oft von einer falsch konfigurierten
Firewall verursacht. Wenn keine Regeln definiert wurden,
blockiert eine aktivierte Firewall alle Pakete, selbst
einfache ping
-Pakete. Weitere
Informationen erhalten Sie in Kapitel 31, Firewalls.
Falls die Leistung der Karte schlecht ist, setzen
Sie die Medienerkennung von autoselect
(automatisch) auf das richtige Medium. In vielen Fällen
löst diese Maßnahme Leistungsprobleme. Wenn
nicht, prüfen Sie nochmal die Netzwerkeinstellungen
und lesen Sie die Hilfeseite tuning(7).
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.