Der Mechanismus mit dem ein Rechner einen Rechner über ein Netzwerk finden kann, wird als Routing bezeichnet. Eine „Route“ besteht aus einem definierten Adresspaar: Einem „Ziel“ und einem „Gateway“. Die Route zeigt an, dass Pakete über das Gateway zum Ziel gelangen können. Es gibt drei Arten von Zielen: Einzelne Rechner (Hosts), Subnetze und das „Standard“ziel. Die „Standardroute“ wird verwendet, wenn keine andere Route zutrifft. Außerdem gibt es drei Arten von Gateways: Einzelne Rechner (Hosts), Schnittstellen (Interfaces, auch als „Links“ bezeichnet), sowie Ethernet Hardware-Adressen (MAC). Bekannte Adressen werden in einer Routingtabelle gespeichert.
Dieser Abschnitt bietet einen Überblick über die Grundlagen des Routings. Er demonstriert, wie ein FreeBSD-System als Router konfiguriert werden kann und bietet einige Tipps zur Fehlerbehebung.
netstat(1) zeigt die Routingtabellen eines FreeBSD-Systems an:
%
netstat -r
Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default outside-gw UGS 37 418 em0 localhost localhost UH 0 181 lo0 test0 0:e0:b5:36:cf:4f UHLW 5 63288 re0 77 10.20.30.255 link#1 UHLW 1 2421 example.com link#1 UC 0 0 host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0 host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 => host2.example.com link#1 UC 0 0 224 link#1 UC 0 0
Die Einträge in diesem Beispiel sind wie folgt:
Die erste Route in der Ausgabe gibt die
Standardroute (default
) an. Wenn
sich der lokale Rechner mit einem entfernten Rechner
verbinden will, wird die Routingtabelle überprüft, um
festzustellen, ob bereits ein bekannter Pfad vorhanden
ist. Wird für den entfernten Rechner ein Eintrag in
der Routingtabelle gefunden, so prüft das System ob es
sich über die angegebene Schnittstelle verbinden
kann.
Wenn das Zielsystem mit keinem Eintrag
übereinstimmt, oder wenn alle bekannten Routen
fehlschlagen, verwendet das System die Standardroute.
Für die Rechner im lokalen Netzwerk ist das Feld
Gateway
auf das System gesetzt,
welches direkt mit dem Internet verbunden ist.
UG
in der Spalte
Flags
zeigt an, dass das Gateway
einsatzbereit ist.
Die Standardroute für einen Rechner, der selbst als Gateway zur Außenwelt fungiert, ist der Gateway-Rechner des Internetanbieters (ISP).
Die zweite Route zeigt die
localhost
Route. Die festgelegte
Schnittstelle in der Netif
-Spalte
für localhost
ist
lo0
, das auch als loopback-Gerät
bekannt ist. Das bedeutet, dass der gesamte
Datenverkehr für dieses Ziel intern bleibt, anstatt ihn
über ein Netzwerk zu versenden.
Bei den mit 0:e0:
beginnenden
Adressen handelt es sich um
MAC-Adressen. FreeBSD identifiziert
Rechner im lokalen Netz, im Beispiel
test0
, automatisch und fügt
eine direkte Route über die Ethernet-Schnittstelle
re0
zu diesem Rechner hinzu.
Außerdem existiert in der Spalte
Expire
ein Timeout, der verwendet
wird, wenn dieser Rechner in einem definierten Zeitraum
nicht reagiert. Wenn dies passiert, wird die Route zu
diesem Rechner automatisch gelöscht. Rechner im lokalen
Netz werden über das Routing Information Protocol
(RIP) identifiziert, welches den
kürzesten Weg zu den jeweiligen Rechnern
berechnet.
FreeBSD wird automatisch Subnetzrouten für das lokale
Subnetz hinzufügen. In diesem Beispiel ist 10.20.30.255
die
Broadcast-Adresse für das Subnetz 10.20.30
, und
example.com
ist der
zu diesem Subnetz gehörige Domainname. Das Ziel
link#1
bezieht sich auf die erste
Ethernet-Karte im Rechner.
Routen für Rechner im lokalen Netz und lokale Subnetze werden automatisch durch den routed(8) Daemon konfiguriert. Ist dieser nicht gestartet, existieren nur statische Routen, die vom Administrator definiert werden.
Die Zeile host1
bezieht sich auf
den Rechner, der durch seine Ethernetadresse bekannt
ist. Da es sich um den sendenden Rechner handelt,
verwendet FreeBSD automatisch das Loopback-Gerät
(lo0
), anstatt den Datenverkehr
über die Ethernet-Schnittstelle zu senden.
Die zwei host2
Zeilen
repräsentieren Aliase, die mit ifconfig(8) erstellt
wurden. Das Symbol =>
nach der
lo0
-Schnittstelle sagt aus, dass
zusätzlich zur Loopback-Adresse auch ein Alias
eingestellt ist. Solche Routen sind nur auf Rechnern
vorhanden, die den Alias bereitstellen. Alle anderen
Rechner im lokalen Netz haben für solche Routen nur eine
link#1
Zeile.
Die letzte Zeile (Zielsubnetz
224
) behandelt Multicasting.
Schließlich gibt es für Routen noch
verschiedene Attribute, die sich in der Spalte
Flags
befinden. Tabelle 31.1, „Allgemeine Attribute in Routingtabellen“ fasst einige dieser Flags und
deren Bedeutung zusammen:
Attribut | Bedeutung |
---|---|
U | Die Route ist aktiv (up). |
H | Das Ziel der Route ist ein einzelner Rechner (Host). |
G | Alle Daten, die an dieses Ziel gesendet werden, werden von dem Gateway an ihr jeweiliges Ziel weitergeleitet. |
S | Diese Route wurde statisch konfiguriert. |
C | Erzeugt eine neue Route, basierend auf der Route für den Rechner, mit dem wir uns verbinden. Diese Routenart wird normalerweise für lokale Netzwerke verwendet. |
W | Eine Route, die automatisch konfiguriert wurde. Sie basiert auf einer lokalen Netzwerkroute (Clone). |
L | Die Route beinhaltet einen Verweis auf eine Ethernetkarte (Link). |
In FreeBSD kann die Standardroute durch
die Angabe der IP-Adresse des
Standard-Gateways in /etc/rc.conf
definiert werden:
defaultrouter="10.20.30.1"
Die Standardroute kann mit route
auch
manuell gesetzt werden:
#
route add default 10.20.30.1
Beachten Sie, dass manuell hinzugefügte Routen bei einem Neustart des Systems verloren gehen. Weitere Informationen zum Bearbeiten von Netzwerk-Routingtabellen finden Sie in route(8).
Ein FreeBSD-System kann als Standard-Gateway bzw. Router für ein Netzwerk konfiguriert werden, wenn es sich um einen Dual-Homed-Host handelt. Ein Dual-Homed-Host ist ein Rechner, der sich in mindestens zwei verschiedenen Netzwerken befindet. Typischerweise ist jedes Netzwerk über eine separate Netzwerkschnittstelle verbunden. Mit IP Aliasing können mehrere Adressen, die jeweils zu einem andren Subnetz gehören, an eine physikalische Schnittstelle gebunden werden.
Damit Pakete zwischen den Schnittstellen weitergeleitet
werden können, muss das FreeBSD-System als Router konfiguriert
werden. Internetstandards und gute Ingenieurspraxis sorgten
dafür, dass diese Funktion in FreeBSD in der Voreinstellung
deaktiviert ist. Sie kann jedoch aktiviert werden,
indem folgende Zeile in /etc/rc.conf
hinzugefügt wird:
gateway_enable="YES" # Auf YES setzen, wenn der Rechner als Gateway arbeiten soll
Um das Routing zu aktivieren, setzen Sie die
sysctl(8)-Variable
net.inet.ip.forwarding
auf
1
. Um das Routing zu stoppen,
muss die Variable wieder auf 0
gesetzt
werden.
Die Routingtabelle eines Routers benötigt zusätzliche Routen, damit er weiß, wie er andere Netzwerke erreichen kann. Die Routen können entweder manuell als statische Routen hinzugefügt werden, oder aber der Router lernt automatisch die Routen anhand des Routing-Protokolls. Statische Routen eignen sich für kleine Netzwerke und dieser Abschnitt beschreibt, wie Sie eine statische Route für ein kleines Netzwerk hinzufügen.
In großen Netzwerken sind statische Routen schlecht skalierbar. FreeBSD beinhaltet den BSD-Routing-Daemon routed(8), der die Protokolle RIP (Version 1 und Version 2) sowie IRDP unterstützt. Die Routing-Protokolle BGP und OSPF können über den Port oder das Paket net/zebra installiert werden.
Nehmen wir an, dass wir über folgendes Netzwerk verfügen:
RouterA
, ein FreeBSD-Rechner, dient
als Router für den Zugriff auf das Internet. Die
Standardroute ist auf 10.0.0.1
gesetzt, damit ein
Zugriff auf das Internet möglich wird.
RouterB
ist bereits konfiguriert, da
er 192.168.1.1
als
Standard-Gateway benutzt.
Bevor die statischen Routen hinzugefügt werden, sieht
die Routingtabelle auf RouterA
in
etwa so aus:
%
netstat -nr
Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 10.0.0.1 UGS 0 49378 xl0 127.0.0.1 127.0.0.1 UH 0 6 lo0 10.0.0/24 link#1 UC 0 0 xl0 192.168.1/24 link#2 UC 0 0 xl1
Mit dieser Routingtabelle hat
RouterA
keine Route zum Netzwerk
192.168.2.0/24
.
Der folgende Befehl wird das interne Netz 2 in die
Routingtabelle von RouterA
aufnehmen und dabei 192.168.1.2
als nächsten
Zwischenschritt (Hop)
verwenden:
#
route add -net 192.168.2.0/24 192.168.1.2
Ab sofort kann RouterA
alle
Rechner des Netzwerks 192.168.2.0/24
erreichen.
Allerdings gehen die Routing-Informationen verloren, wenn das
FreeBSD-System neu gestartet wird. Um statische Routen dauerhaft
einzurichten, müssen diese in
/etc/rc.conf
eingetragen werden:
# Add Internal Net 2 as a persistent static route static_routes="internalnet2" route_internalnet2="-net 192.168.2.0/24 192.168.1.2"
Die Variable static_routes
enthält
eine Reihe von Strings, die durch Leerzeichen getrennt sind.
Jeder String bezieht sich auf den Namen einer Route. Die
Variable
route_
enthält die statische Route.internalnet2
Wird mit der Variablen static_routes
mehr als eine Variable angegeben, so werden auch mehrere
Routen angelegt. Im folgenden Beispiel werden statische
Routen zu den Netzwerken 192.168.0.0/24
und
192.168.1.0/24
angelegt.
static_routes="net1 net2" route_net1="-net 192.168.0.0/24 192.168.0.1" route_net2="-net 192.168.1.0/24 192.168.1.1"
Wenn ein Adressraum einem Netzwerk zugeordnet wird, konfiguriert der Dienstanbieter seine Routing-Tabellen, so dass der gesamte Verkehr für das Netzwerk über die Verbindung zu der Seite gesendet wird. Aber woher wissen externe Webseiten, dass sie die Daten an das Netzwerk des ISP senden sollen?
Es gibt ein System, das alle zugewiesenen Adressräume verwaltet und die Verbindung zum Internet-Backbone definiert. Der „Backbone“ ist das Netz aus Hauptverbindungen, die den Internetverkehr in der ganzen Welt transportieren und verteilen. Jeder Backbone-Rechner verfügt über eine Kopie von Master-Tabellen, die den Verkehr für ein bestimmtes Netzwerk hierarchisch vom Backbone über eine Kette von Dienstanbietern bis hin zu einem bestimmten Netzwerk leiten.
Es ist die Aufgabe des Dienstanbieters, den Backbone-Seiten mitzuteilen, dass sie mit einer Seite verbunden wurden. Dieser Vorgang wird als Bekanntmachung von Routen (routing propagation) bezeichnet.
Manchmal kommt es zu Problemen bei der Bekanntmachung von
Routen, und einige Seiten sind nicht in der Lage, sich zu
verbinden. Der vielleicht nützlichste Befehl, um
festzustellen wo das Routing nicht funktioniert, ist
traceroute
. Das Programm ist nützlich,
falls ping
fehlschlägt.
Rufen Sie traceroute
mit dem Namen des
entfernten Rechners auf, mit dem eine Verbindung aufgebaut
werden soll. Die Ausgabe zeigt die Gateway-Rechner entlang
des Verbindungspfades an. Schließlich wird der Zielrechner
erreicht oder es kommt zu einem Verbindungsabbruch. Weitere
Informationen finden Sie in traceroute(8).
FreeBSD unterstützt sowohl Multicast-Anwendungen als auch Multicast-Routing. Multicast-Anwendungen benötigen keine spezielle Konfiguration, um auf FreeBSD lauffähig zu sein. Damit Multicast-Routing unterstützt wird, muss die folgende Option in der Kernelkonfiguration aktiviert werden:
options MROUTING
Der Multicast-Routing-Daemon
mrouted kann als Port oder Paket
net/mroute installiert werden. Dieser
Daemon implementiert das DVMRP
Multicast-Routing-Protokoll. Um die Tunnel und
DVMRP einzurichten, muss
/usr/local/etc/mrouted.conf
bearbeitet
werden. Bei der Installation von
mrouted wird auch
map-mbone und
mrinfo sowie die zugehörigen
Manualpages installiert, in denen Sie auch
Konfigurationsbeispiele finden können.
DVMRP wurde in vielen Multicast-Installationen weitgehend durch das PIM-Protokoll ersetzt. Weitere Informationen finden Sie in pim(4).
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>.