doc/de_DE.ISO8859-1/books/handbook/advanced-networking/chapter.sgml
2012-09-14 17:47:48 +00:00

6657 lines
259 KiB
XML

<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<!--
The FreeBSD Documentation Project
The FreeBSD German Documentation Project
$FreeBSD$
$FreeBSDde: de-docproj/books/handbook/advanced-networking/chapter.sgml,v 1.195 2011/02/23 12:30:43 jkois Exp $
basiert auf: 1.436
-->
<chapter id="advanced-networking">
<chapterinfo>
<authorgroup>
<author>
<firstname>Johann</firstname>
<surname>Kois</surname>
<contrib>Übersetzt von </contrib>
</author>
</authorgroup>
</chapterinfo>
<title>Weiterführende Netzwerkthemen</title>
<sect1 id="advanced-networking-synopsis">
<title>Übersicht</title>
<para>Dieses Kapitel beschreibt verschiedene
weiterführende Netzwerkthemen.</para>
<para>Nachdem Sie dieses Kapitel gelesen haben, werden Sie</para>
<itemizedlist>
<listitem>
<para>Die Grundlagen von Gateways und Routen kennen.</para>
</listitem>
<listitem>
<para>&bluetooth;- sowie drahtlose, der Norm &ieee;&nbsp;802.11
entsprechende, Geräte mit FreeBSD verwenden
können.</para>
</listitem>
<listitem>
<para>Eine Bridge unter FreeBSD einrichten können.</para>
</listitem>
<listitem>
<para>Einen plattenlosen Rechner über das Netzwerk starten
können.</para>
</listitem>
<listitem>
<para>Wissen, wie man NAT (Network Address Translation)
einrichtet.</para>
</listitem>
<listitem>
<para>Zwei Computer über PLIP verbinden können.</para>
</listitem>
<listitem>
<para>IPv6 auf einem FreeBSD-Rechner einrichten
können.</para>
</listitem>
<listitem>
<para>ATM einrichten können.</para>
</listitem>
<listitem>
<para>CARP, das Common Address Redundancy Protocol, unter
&os; einsetzen können.</para>
</listitem>
</itemizedlist>
<para>Bevor Sie dieses Kapitel lesen, sollten Sie</para>
<itemizedlist>
<listitem>
<para>Die Grundlagen der <filename>/etc/rc</filename>-Skripte
verstanden haben.</para>
</listitem>
<listitem>
<para>Mit der grundlegenden Netzwerkterminologie vertraut
sein.</para>
</listitem>
<listitem>
<para>Einen neuen FreeBSD-Kernel konfigurieren und installieren
können (<xref linkend="kernelconfig"/>).</para>
</listitem>
<listitem>
<para>Wissen, wie man zusätzliche Softwarepakete von
Drittherstellern installiert (<xref linkend="ports"/>).</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="network-routing">
<sect1info>
<authorgroup>
<author>
<firstname>Coranth</firstname>
<surname>Gryphon</surname>
<contrib>Beigetragen von </contrib>
</author>
</authorgroup>
</sect1info>
<title>Gateways und Routen</title>
<indexterm>
<primary>Routing</primary>
</indexterm>
<indexterm>
<primary>Gateway</primary>
</indexterm>
<indexterm>
<primary>Subnetz</primary>
</indexterm>
<para>Damit ein Rechner einen anderen über ein Netzwerk
finden kann, muss ein Mechanismus vorhanden sein, der
beschreibt, wie man von einem Rechner zum anderen gelangt.
Dieser Vorgang wird als <firstterm>Routing</firstterm>
bezeichnet. Eine <quote>Route</quote> besteht aus einem
definierten Adressenpaar: Einem <quote>Ziel</quote> und einem
<quote>Gateway</quote>. Dieses Paar zeigt an, dass Sie
über das <emphasis>Gateway</emphasis> zum
<emphasis>Ziel</emphasis> gelangen wollen. Es gibt drei Arten
von Zielen: Einzelne Rechner (Hosts), Subnetze und das
<quote>Standard</quote>ziel. Die <quote>Standardroute</quote>
wird verwendet, wenn keine andere Route zutrifft. Wir werden
Standardrouten später etwas genauer behandeln.
Außerdem gibt es drei Arten von Gateways: Einzelne Rechner
(Hosts), Schnittstellen (Interfaces, auch als <quote>Links</quote>
bezeichnet), sowie Ethernet Hardware-Adressen (MAC-Adressen).
</para>
<sect2>
<title>Ein Beispiel</title>
<para>Um die verschiedenen Aspekte des Routings zu
veranschaulichen, verwenden wir folgende Ausgaben von
<command>netstat</command>:</para>
<screen>&prompt.user; <userinput>netstat -r</userinput>
Routing tables
Destination Gateway Flags Refs Use Netif Expire
default outside-gw UGSc 37 418 ppp0
localhost localhost UH 0 181 lo0
test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 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
</screen>
<indexterm>
<primary>Defaultroute</primary>
</indexterm>
<para>Die ersten zwei Zeilen geben die Standardroute (die wir
im <link linkend="network-routing-default"> nächsten
Abschnitt</link> behandeln), sowie die
<hostid>localhost</hostid> Route an.</para>
<indexterm>
<primary>Loopback-Gerät</primary>
</indexterm>
<para>Das in der Routingtabelle für
<literal>localhost</literal> festgelegte Interface
(<literal>Netif</literal>-Spalte)
<devicename>lo0</devicename>, ist auch als loopback-Gerät
(Prüfschleife) bekannt. Das heißt, dass der ganze
Datenverkehr für dieses Ziel intern (innerhalb des
Gerätes) bleibt, anstatt ihn über ein Netzwerk (LAN)
zu versenden, da das Ziel dem Start entspricht.</para>
<indexterm>
<primary>Ethernet</primary>
<secondary>MAC-Adresse</secondary>
</indexterm>
<para>Der nächste auffällige Punkt sind die mit
<hostid role="mac">0:e0:</hostid> beginnenden Adressen. Es
handelt sich dabei um Ethernet Hardwareadressen, die auch als
MAC-Adressen bekannt sind. FreeBSD identifiziert Rechner im
lokalen Netz automatisch (im Beispiel <hostid>test0</hostid>)
und fügt eine direkte Route zu diesem Rechner hinzu. Dies
passiert über die Ethernet-Schnittstelle
<devicename>ed0</devicename>. Außerdem existiert ein Timeout
(in der Spalte <literal>Expire</literal>) für diese Art
von Routen, 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 durch einen als RIP (Routing
Information Protocol) bezeichneten Mechanismus identifiziert,
der den kürzesten Weg zu den jeweiligen Rechnern
bestimmt.</para>
<indexterm>
<primary>Subnetz</primary>
</indexterm>
<para>FreeBSD fügt außerdem Subnetzrouten für das
lokale Subnetz hinzu (<hostid
role="ipaddr">10.20.30.255</hostid> ist die Broadcast-Adresse
für das Subnetz <hostid role="ipaddr">10.20.30</hostid>,
<hostid role="domainname">example.com</hostid> ist der zu
diesem Subnetz gehörige Domainname). Das Ziel
<literal>link#1</literal> bezieht sich auf die erste
Ethernet-Karte im Rechner. Sie können auch feststellen,
dass keine zusätzlichen Schnittstellen angegeben
sind.</para>
<para>Routen für Rechner im lokalen Netz und lokale
Subnetze werden automatisch durch den
<application>routed</application> Daemon konfiguriert. Ist
dieser nicht gestartet, sind nur statisch definierte
(explizit eingegebene) Routen vorhanden.</para>
<para>Die Zeile <literal>host1</literal> bezieht sich auf
unseren Rechner, der durch seine Ethernetadresse bekannt ist.
Da unser Rechner der Sender ist, verwendet FreeBSD automatisch
das Loopback-Gerät (<devicename>lo0</devicename>),
anstatt den Datenverkehr über die Ethernetschnittstelle
zu senden.</para>
<para>Die zwei <literal>host2</literal> Zeilen sind ein Beispiel
dafür, was passiert, wenn wir ein &man.ifconfig.8; Alias
verwenden (Lesen Sie dazu den Abschnitt über Ethernet,
wenn Sie wissen wollen, warum wir das tun sollten.). Das
Symbol <literal>=&gt;</literal> (nach der
<devicename>lo0</devicename>-Schnittstelle) sagt aus, dass wir
nicht nur das Loopbackgerät verwenden (da sich die
Adresse auf den lokalen Rechner bezieht), sondern dass es sich
zusätzlich auch um ein Alias handelt. Solche Routen sind
nur auf Rechnern vorhanden, die den Alias bereitstellen;
alle anderen Rechner im lokalen Netz haben für solche
Routen nur eine einfache <literal>link#1</literal>
Zeile.</para>
<para>Die letzte Zeile (Zielsubnetz <literal>224</literal>)
behandelt das Multicasting, das wir in einem anderen Abschnitt
besprechen werden.</para>
<para>Schließlich gibt es für Routen noch
verschiedene Attribute, die Sie in der Spalte
<literal>Flags</literal> finden. Nachfolgend finden Sie eine
kurze Übersicht von einigen dieser Flags und ihrer
Bedeutung:</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<colspec colwidth="1*"/>
<colspec colwidth="4*"/>
<tbody>
<row>
<entry>U</entry>
<entry>Up: Die Route ist aktiv.</entry>
</row>
<row>
<entry>H</entry>
<entry>Host: Das Ziel der Route ist ein einzelner
Rechner (Host).</entry>
</row>
<row>
<entry>G</entry>
<entry>Gateway: Alle Daten, die an dieses Ziel gesendet
werden, werden von diesem System an ihr jeweiliges
Ziel weitergeleitet.</entry>
</row>
<row>
<entry>S</entry>
<entry>Static: Diese Route wurde manuell konfiguriert,
das heißt sie wurde <emphasis>nicht</emphasis>
automatisch vom System erzeugt.</entry>
</row>
<row>
<entry>C</entry>
<entry>Clone: 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.</entry>
</row>
<row>
<entry>W</entry>
<entry>WasCloned: Eine Route, die automatisch
konfiguriert wurde. Sie basiert auf einer lokalen
Netzwerkroute (Clone).</entry>
</row>
<row>
<entry>L</entry>
<entry>Link: Die Route beinhaltet einen Verweis auf eine
Ethernetkarte (MAC-Adresse).</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 id="network-routing-default">
<title>Standardrouten</title>
<indexterm>
<primary>Defaultroute</primary>
</indexterm>
<indexterm>
<primary>Standardroute</primary>
<see>Defaultroute</see>
</indexterm>
<para>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.
Gehört dieser entfernte Rechner zu einem Subnetz, dessen
Pfad uns bereits bekannt ist
(<foreignphrase>Cloned route</foreignphrase>), dann versucht der
lokale Rechner über diese Schnittstelle eine Verbindung
herzustellen.</para>
<para>Wenn alle bekannten Pfade nicht funktionieren, hat der
lokale Rechner eine letzte Möglichkeit: Die
Standardroute (Defaultroute). Bei dieser
Route handelt es sich um eine spezielle Gateway-Route
(gewöhnlich die einzige im System vorhandene), die im
Flags-Feld immer mit <literal>C</literal> gekennzeichnet ist.
Für Rechner im lokalen Netzwerk ist dieses Gateway auf
<emphasis>welcher Rechner auch immer eine Verbindung nach
außen hat</emphasis> gesetzt (entweder über eine
PPP-Verbindung, DSL, ein Kabelmodem, T1 oder eine beliebige
andere Netzwerkverbindung).</para>
<para>Wenn Sie die Standardroute für einen Rechner
konfigurieren, der selbst als Gateway zur Außenwelt
funktioniert, wird die Standardroute zum Gateway-Rechner Ihres
Internetanbieter (ISP) gesetzt.</para>
<para>Sehen wir uns ein Beispiel für Standardrouten an. So
sieht eine übliche Konfiguration aus:</para>
<mediaobject>
<imageobject>
<imagedata fileref="advanced-networking/net-routing"/>
</imageobject>
<textobject>
<literallayout class="monospaced">
[Local2] &lt;--ether--&gt; [Local1] &lt;--PPP--&gt; [ISP-Serv] &lt;--ether--&gt; [T1-GW]
</literallayout>
</textobject>
</mediaobject>
<para>Die Rechner <hostid>Local1</hostid> und
<hostid>Local2</hostid> befinden sich auf Ihrer Seite.
<hostid>Local1</hostid> ist mit einem ISP über eine
PPP-Verbindung verbunden. Dieser PPP-Server ist über ein
lokales Netzwerk mit einem anderen Gateway-Rechner verbunden,
der über eine Schnittstelle die Verbindung des ISP zum
Internet herstellt.</para>
<para>Die Standardrouten für Ihre Maschinen lauten:</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="3">
<thead>
<row>
<entry>Host</entry>
<entry>Standard Gateway</entry>
<entry>Schnittstelle</entry>
</row>
</thead>
<tbody>
<row>
<entry>Local2</entry>
<entry>Local1</entry>
<entry>Ethernet</entry>
</row>
<row>
<entry>Local1</entry>
<entry>T1-GW</entry>
<entry>PPP</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Eine häufig gestellte Frage lautet: <quote>Warum (oder
wie) sollten wir <hostid>T1-GW</hostid> als Standard-Gateway
für <hostid>Local1</hostid> setzen, statt den (direkt
verbundenen) ISP-Server zu verwenden?</quote>.</para>
<para>Bedenken Sie, dass die PPP-Schnittstelle für die
Verbindung eine Adresse des lokalen Netzes des ISP verwendet.
Daher werden Routen für alle anderen Rechner im lokalen
Netz des ISP automatisch erzeugt. Daraus folgt, dass Sie
bereits wissen, wie Sie <hostid>T1-GW</hostid> erreichen
können! Es ist also unnötig, einen Zwischenschritt
über den ISP-Server zu machen.</para>
<para>Es ist üblich, die Adresse <hostid
role="ipaddr">X.X.X.1</hostid> als Gateway-Adresse für
ihr lokales Netzwerk zu verwenden. Für unser Beispiel
bedeutet dies Folgendes: Wenn Ihr lokaler Klasse-C-Adressraum
<hostid role="ipaddr">10.20.30</hostid> ist und Ihr ISP
<hostid role="ipaddr">10.9.9</hostid> verwendet, sehen die
Standardrouten so aus:</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<thead>
<row>
<entry>Rechner (Host)</entry>
<entry>Standardroute</entry>
</row>
</thead>
<tbody>
<row>
<entry>Local2 (10.20.30.2)</entry>
<entry>Local1 (10.20.30.1)</entry>
</row>
<row>
<entry>Local1 (10.20.30.1, 10.9.9.30)</entry>
<entry>T1-GW (10.9.9.1)</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Sie können die Standardroute ganz einfach in der Datei
<filename>/etc/rc.conf</filename> festlegen. In unserem
Beispiel wurde auf dem Rechner <hostid>Local2</hostid>
folgende Zeile in <filename>/etc/rc.conf</filename>
eingefügt:</para>
<programlisting>defaultrouter="10.20.30.1"</programlisting>
<para>Die Standardroute kann über &man.route.8; auch direkt
gesetzt werden:</para>
<screen>&prompt.root; <userinput>route add default 10.20.30.1</userinput></screen>
<para>Weitere Informationen zum Bearbeiten von
Netzwerkroutingtabellen finden Sie in &man.route.8;.</para>
</sect2>
<sect2 id="network-dual-homed-hosts">
<title>Rechner mit zwei Heimatnetzen</title>
<indexterm>
<primary>Dual-Homed-Hosts</primary>
</indexterm>
<para>Es gibt noch eine Konfigurationsmöglichkeit, die wir
besprechen sollten, und zwar Rechner, die sich in zwei
Netzwerken befinden. Technisch gesehen, zählt jeder als
Gateway arbeitende Rechner zu den Rechnern mit zwei
Heimatnetzen (im obigen Beispiel unter Verwendung einer
PPP-Verbindung). In der Praxis meint man damit allerdings nur
Rechner, die sich in zwei lokalen Netzen befinden.</para>
<para>Entweder verfügt der Rechner über zwei
Ethernetkarten und jede dieser Karten hat eine Adresse in
einem separaten Subnetz, oder der Rechner hat nur eine
Ethernetkarte und verwendet &man.ifconfig.8; Aliasing. Die
erste Möglichkeit wird verwendet, wenn zwei physikalisch
getrennte Ethernet-Netzwerke vorhanden sind, die zweite, wenn
es nur ein physikalisches Ethernet-Netzwerk gibt, das aber aus
zwei logisch getrennten Subnetzen besteht.</para>
<para>In beiden Fällen werden Routingtabellen erstellt,
damit jedes Subnetz weiß, dass dieser Rechner als Gateway
zum anderen Subnetz arbeitet (<foreignphrase>inbound
route</foreignphrase>). Diese Konfiguration (der
Gateway-Rechner arbeitet als Router zwischen den Subnetzen) wird
häufig verwendet, wenn es darum geht, Paketfilterung oder
eine Firewall (in eine oder beide Richtungen) zu implementieren.
</para>
<para>Soll dieser Rechner Pakete zwischen den beiden
Schnittstellen weiterleiten, müssen Sie diese Funktion
manuell konfigurieren und aktivieren. Lesen Sie den
nächsten Abschnitt, wenn Sie weitere Informationen zu
diesem Thema benötigen.</para>
</sect2>
<sect2 id="network-dedicated-router">
<title>Einen Router konfigurieren</title>
<indexterm>
<primary>Router</primary>
</indexterm>
<para>Ein Netzwerkrouter ist einfach ein System, das Pakete von
einer Schnittstelle zur anderen weiterleitet.
Internetstandards und gute Ingenieurspraxis sorgten
dafür, dass diese Funktion in FreeBSD in der Voreinstellung
deaktiviert ist. Sie können diese Funktion aktivieren,
indem Sie in &man.rc.conf.5; folgende Änderung
durchführen:</para>
<programlisting>gateway_enable="YES" # Auf YES setzen, wenn der Rechner als Gateway arbeiten soll</programlisting>
<para>Diese Option setzt die &man.sysctl.8;-Variable
<varname>net.inet.ip.forwarding</varname> auf
<literal>1</literal>. Wenn Sie das Routing kurzzeitig
unterbrechen wollen, können Sie die Variable auf
<literal>0</literal> setzen.</para>
<indexterm><primary>BGP</primary></indexterm>
<indexterm><primary>RIP</primary></indexterm>
<indexterm><primary>OSPF</primary></indexterm>
<para>Ihr neuer Router benötigt nun noch Routen, um zu
wissen, wohin er den Verkehr senden soll. Haben Sie ein
(sehr) einfaches Netzwerk, können Sie statische Routen
verwenden. FreeBSD verfügt über den Standard
BSD-Routing-Daemon &man.routed.8;, der RIP (sowohl Version 1
als auch Version 2) und IRDP versteht. BGP&nbsp;v4,
OSPF&nbsp;v2 und andere Protokolle werden von
<filename role="package">net/zebra</filename>
unterstützt. Es stehen auch kommerzielle Produkte
wie <application>gated</application> zur Verfügung.</para>
</sect2>
<sect2 id="network-static-routes">
<sect2info>
<authorgroup>
<author>
<firstname>Al</firstname>
<surname>Hoang</surname>
<contrib>Beigetragen von </contrib>
</author>
</authorgroup>
</sect2info>
<title>Statische Routen einrichten</title>
<sect3>
<title>Manuelle Konfiguration</title>
<para>Nehmen wir an, dass wir über folgendes Netzwerk
verfügen:</para>
<mediaobject>
<imageobject>
<imagedata fileref="advanced-networking/static-routes"/>
</imageobject>
<textobject>
<literallayout class="monospaced">
INTERNET
| (10.0.0.1/24) Default Router to Internet
|
|Interface xl0
|10.0.0.10/24
+------+
| | RouterA
| | (FreeBSD gateway)
+------+
| Interface xl1
| 192.168.1.1/24
|
+--------------------------------+
Internal Net 1 | 192.168.1.2/24
|
+------+
| | RouterB
| |
+------+
| 192.168.2.1/24
|
Internal Net 2
</literallayout>
</textobject>
</mediaobject>
<para><hostid>RouterA</hostid>, ein &os;-Rechner, dient als
Router für den Zugriff auf das Internet. Die
Standardroute ist auf <hostid role="ipaddr">10.0.0.1</hostid>
gesetzt, damit ein Zugriff auf das Internet möglich wird.
Wir nehmen nun an, dass <hostid>RouterB</hostid> bereits
konfiguriert ist und daher weiß, wie er andere Rechner
erreichen kann. Dazu wird die Standardroute von
<hostid>RouterB</hostid> auf
<hostid role="ipaddr">192.168.1.1</hostid> gesetzt, da dieser
Rechner als Gateway fungiert.</para>
<para>Sieht man sich die Routingtabelle für
<hostid>RouterA</hostid> an, erhält man folgende Ausgabe:
</para>
<screen>&prompt.user; <userinput>netstat -nr</userinput>
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</screen>
<para>Mit dieser Routingtabelle kann <hostid>RouterA</hostid>
unser internes Netz 2 nicht erreichen, da keine Route zum
Rechner <hostid role="ipaddr">192.168.2.0/24</hostid>
vorhanden ist. Um dies zu korrigieren, kann die Route manuell
gesetzt werden. Durch den folgenden Befehl wird das
interne Netz 2 in die Routingtabelle des Rechners
<hostid>RouterA</hostid> aufgenommen, indem
<hostid role="ipaddr">192.168.1.2</hostid> als nächster
Zwischenschritt verwenden wird:</para>
<screen>&prompt.root; <userinput>route add -net 192.168.2.0/24 192.168.1.2</userinput></screen>
<para>Ab sofort kann <hostid>RouterA</hostid> alle Rechner des
Netzwerks <hostid role="ipaddr">192.168.2.0/24</hostid>
erreichen.</para>
</sect3>
<sect3>
<title>Routen dauerhaft einrichten</title>
<para>Das obige Beispiel ist für die Konfiguration einer
statischen Route auf einem laufenden System geeignet. Diese
Information geht jedoch verloren, wenn der &os;-Rechner neu
gestartet werden muss. Um dies zu verhindern, wird diese
Route in <filename>/etc/rc.conf</filename> eingetragen:</para>
<programlisting># Add Internal Net 2 as a static route
static_routes="internalnet2"
route_internalnet2="-net 192.168.2.0/24 192.168.1.2"</programlisting>
<para>Die Variable <literal>static_routes</literal> enthält
eine Reihe von Strings, die durch Leerzeichen getrennt sind.
Jeder String bezieht sich auf den Namen einer Route. In
unserem Beispiel hat <literal>static_routes</literal>
<replaceable>internalnet2</replaceable> als einzigen String.
Zusätzlich verwendet man die Konfigurationsvariable
<literal>route_<replaceable>internalnet2</replaceable></literal>,
in der alle sonstigen an &man.route.8; zu übergebenden
Parameter festgelegt werden. In obigen Beispiel hätte
man folgenden Befehl verwendet:</para>
<screen>&prompt.root; <userinput>route add -net 192.168.2.0/24 192.168.1.2</userinput></screen>
<para>Daher wird
<literal>"-net 192.168.2.0/24 192.168.1.2"</literal> als
Parameter der Variable <literal>route_</literal> angegeben.
</para>
<para>Wie bereits erwähnt, können bei
<literal>static_routes</literal> auch mehrere Strings
angegeben werden. Dadurch lassen sich mehrere statische
Routen anlegen. Durch folgende Zeilen werden auf einem
imaginären Rechner statische Routen zu den Netzwerken
<hostid role="ipaddr">192.168.0.0/24</hostid> sowie <hostid
role="ipaddr">192.168.1.0/24</hostid> definiert:</para>
<programlisting>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"</programlisting>
</sect3>
</sect2>
<sect2 id="network-routing-propagation">
<title>Verteilung von Routing-Informationen</title>
<indexterm>
<primary>routing propagation</primary>
</indexterm>
<para>Wir haben bereits darüber gesprochen, wie wir unsere
Routen zur Außenwelt definieren, aber nicht darüber,
wie die Außenwelt uns finden kann.</para>
<para>Wir wissen bereits, dass Routing-Tabellen so erstellt
werden können, dass sämtlicher Verkehr für
einen bestimmten Adressraum (in unserem Beispiel ein
Klasse-C-Subnetz) zu einem bestimmten Rechner in diesem
Netzwerk gesendet wird, der die eingehenden Pakete im Subnetz
verteilt.</para>
<para>Wenn Sie einen Adressraum für Ihre Seite zugewiesen
bekommen, richtet Ihr Diensteanbieter seine Routingtabellen so
ein, dass der ganze Verkehr für Ihr Subnetz entlang Ihrer
PPP-Verbindung zu Ihrer Seite gesendet wird. Aber woher
wissen die Seiten in der Außenwelt, dass sie die Daten an
Ihren ISP senden sollen?</para>
<para>Es gibt ein System (ähnlich dem verbreiteten DNS),
das alle zugewiesenen Adressräume verwaltet und ihre
Verbindung zum Internet-Backbone definiert und dokumentiert.
Der <quote>Backbone</quote> ist das Netz aus
Hauptverbindungen, die den Internetverkehr in der ganzen Welt
transportieren und verteilen. Jeder Backbone-Rechner
verfügt über eine Kopie von Haupttabellen, die den
Verkehr für ein bestimmtes Netzwerk hierarchisch vom
Backbone über eine Kette von Diensteanbietern bis hin zu
Ihrer Seite leiten.</para>
<para>Es ist die Aufgabe Ihres Diensteanbieters, den
Backbone-Seiten mitzuteilen, dass sie mit Ihrer Seite
verbunden wurden. Durch diese Mitteilung der Route ist nun
auch der Weg zu Ihnen bekannt. Dieser Vorgang wird als
<emphasis>Bekanntmachung von Routen</emphasis>
(<foreignphrase>routing propagation</foreignphrase>)
bezeichnet.</para>
</sect2>
<sect2 id="network-routing-troubleshooting">
<title>Problembehebung</title>
<indexterm>
<primary><command>traceroute</command></primary>
</indexterm>
<para>Manchmal kommt es zu Problemen bei der Bekanntmachung von
Routen, und einige Seiten sind nicht in der Lage, Sie zu
erreichen. Vielleicht der nützlichste Befehl, um
festzustellen, wo das Routing nicht funktioniert, ist
&man.traceroute.8;. Er ist außerdem sehr nützlich,
wenn Sie einen entfernten Rechner nicht erreichen können
(lesen Sie dazu auch &man.ping.8;).</para>
<para>&man.traceroute.8; wird mit dem zu erreichenden Rechner
(Host) ausgeführt. Angezeigt werden die Gateway-Rechner
entlang des Verbindungspfades. Schließlich wird der
Zielrechner erreicht oder es kommt zu einem Verbindungsabbruch
(beispielsweise durch Nichterreichbarkeit eines
Gateway-Rechners).</para>
<para>Weitere Informationen finden Sie in
&man.traceroute.8;.</para>
</sect2>
<sect2 id="network-routing-multicast">
<title>Multicast-Routing</title>
<indexterm>
<primary>Multicast-Routing</primary>
</indexterm>
<indexterm>
<primary>Kerneloptionen</primary>
<secondary>MROUTING</secondary>
</indexterm>
<para>&os; unterstützt sowohl Multicast-Anwendungen als
auch Multicast-Routing. Multicast-Anwendungen müssen
nicht konfiguriert werden, sie laufen einfach.
Multicast-Routing muss in der Kernelkonfiguration aktiviert
werden:</para>
<programlisting>options MROUTING</programlisting>
<para>Zusätzlich muss &man.mrouted.8;, der
Multicast-Routing-Daemon, über die Datei
<filename>/etc/mrouted.conf</filename> eingerichtet werden,
um Tunnel und <acronym>DVMRP</acronym> zu aktivieren. Weitere
Informationen zu diesem Thema finden Sie in
&man.mrouted.8;.</para>
<note>
<para>&man.mrouted.8;, der Multicast Routing Daemon,
verwendet das <acronym>DVMRP</acronym> Multicast Routing
Protocol, das inzwischen in den meisten Multicast-Installationen
durch &man.pim.4; ersetzt wurde. &man.mrouted.8; sowie die
damit in Verbindung stehenden Werkzeuge &man.map-mbone.8; und
&man.mrinfo.8;können über die &os;-Ports-Sammlung
(genauer den Port <filename
role="package">net/mrouted</filename>) installiert werden.</para>
</note>
</sect2>
</sect1>
<sect1 id="network-wireless">
<sect1info>
<authorgroup>
<author>
<othername>Loader</othername>
</author>
<author>
<firstname>Marc</firstname>
<surname>Fonvieille</surname>
</author>
<author>
<firstname>Murray</firstname>
<surname>Stokely</surname>
</author>
</authorgroup>
</sect1info>
<title>Drahtlose Netzwerke</title>
<indexterm><primary>Netzwerke, drahtlos</primary></indexterm>
<indexterm>
<primary>802.11</primary>
<see>drahtlose Netzwerke</see>
</indexterm>
<sect2>
<title>Grundlagen</title>
<para>Die meisten drahtlosen Netzwerke basieren auf dem
Standard &ieee;&nbsp;802.11. Sie bestehen aus Stationen, die
in der Regel im 2,4&nbsp;GHz- oder im 5&nbsp;GHz-Band
miteinander kommunizieren. Es ist aber auch
möglich, dass regional andere Frequenzen,
beispielsweise im 2,3&nbsp;GHz- oder 4,9&nbsp;GHz-Band,
verwendet werden.</para>
<para>802.11-Netzwerke können auf zwei verschiedene
Arten aufgebaut sein: Im
<emphasis>Infrastruktur-Modus</emphasis> agiert eine
Station als Master, mit dem sich alle anderen Stationen
verbinden. Die Summe aller Stationen wird als BSS
(Basic Service Set), die Master-Station hingegen als
Access Point (AP) bezeichnet. In einem BSS läuft
jedwede Kommunikation über den Access Point. Die
zweite Form drahtloser Netzwerke sind die sogenannten
<emphasis>Ad-hoc-Netzwerke</emphasis> (auch als IBSS
bezeichnet), in denen es keinen Access Point gibt und
in denen die Stationen direkt miteinander
kommunizieren.</para>
<para>Die ersten 802.11-Netzwerke arbeiteten im
2,4&nbsp;GHz-Band und nutzten dazu Protokolle der
&ieee;-Standards 802.11 sowie 802.11b. Diese Standards
legen unter anderem Betriebsfrequenzen sowie Merkmale
des MAC-Layers (wie Frames und Transmissionsraten) fest.
Später kam der Standard 802.11a hinzu, der im
5&nbsp;GHz-Band, im Gegensatz zu den ersten beiden
Standards aber mit unterschiedlichen Signalmechanismen
und höheren Transmissionsraten arbeitet. Der
neueste Standard 802.11g implementiert die Signal- und
Transmissionsmechanismen von 802.11a im 2,4&nbsp;GHz-Band,
ist dabei aber abwärtskompatibel zu
802.11b-Netzwerken.</para>
<para>Unabhängig von den zugrundeliegenden
Transportmechanismen verfügen 802.11-Netzwerke
über diverse Sicherheitsmechanismen. Der
ursprüngliche 802.11-Standard definierte lediglich
ein einfaches Sicherheitsprotokoll namens WEP. Dieses
Protokoll verwendet einen fixen (gemeinsam verwendeten)
Schlüssel sowie die RC4-Kryptografie-Chiffre,
um Daten verschlüsselt über das drahtlose
Netzwerk zu senden. Alle Stationen des Netzwerks
müssen sich auf den gleichen fixen Schlüssel
einigen, um miteinander kommunizieren zu können. Dieses
Schema ist sehr leicht zu knacken und wird deshalb heute
kaum mehr eingesetzt. Aktuelle Sicherheitsmechanismen
bauen auf dem Standard &ieee;&nbsp;802.11i auf, der neue
kryptografische Schlüssel (Chiffren), ein neues
Protokoll für die Anmeldung von Stationen an einem
Access Point, sowie Mechanismen zum Austausch von
Schlüsseln als Vorbereitung der Kommunikation zwischen
verschiedenen Geräten festlegt. Kryptografische
Schlüssel werden regelmäßig getauscht.
Außerdem gibt es Mechanismen, um Einbruchsversuche
zu entdecken (und Gegenmaßnahmen ergreifen zu können).
Ein weiteres häufig verwendetes Sicherheitsprotokoll ist
WPA. Dabei handelt es sich um einen Vorläufer von 802.11i,
der von einem Industriekonsortium als Zwischenlösung bis
zur endgültigen Verabschiedung von 802.11i entwickelt
wurde. WPA definiert eine Untergruppe der Anforderungen des
802.11i-Standards und ist für den Einsatz in älterer
Hardware vorgesehen. WPA benötigt nur den (auf dem
ursprünglichen WEP-Code basierenden) TKIP-Chiffre. 802.11i
erlaubt zwar auch die Verwendung von TKIP, fordert aber
zusätzlich eine stärkere Chiffre (AES-CCM)
für die Datenverschlüsselung. (AES war für
WPA nicht vorgesehen, weil man es als zu rechenintensiv
für den Einsatz in älteren Geräten ansah.)</para>
<para>Neben den weiter oben erwähnten Standards ist auch
der Standard 802.11e von großer Bedeutung. Dieser
definiert Protokolle zur Übertragung von
Multimedia-Anwendungen wie das Streaming von Videodateien
oder Voice-over-IP (VoIP) in einem 802.11-Netzwerk. Analog
zu 802.11i verfügt auch 802.11e über eine
vorläufige Spezifikation namens WMM (ursprünglich
WME), die von einem Industriekonsortium als Untergruppe
von 802.11e spezifiziert wurde, um Multimedia-Anwendungen
bereits vor der endgültigen Verabschiedung des
802.11e-Standards implementieren zu können. 802.11e
sowie WME/WMM erlauben eine Prioritätenvergabe beim
Datentransfer im einem drahtlosen Netzwerk. Möglich
wird dies durch den Einsatz von Quality of Service-Protokollen
(QoS) und erweiterten Medienzugriffsprotokollen. Werden
diese Protokolle korrekt implementiert, erlauben sie daher
hohe Datenübertragungsraten und einen priorisierten
Datenfluss.</para>
<para>&os; unterstützt die Standards
802.11a, 802.11b, sowie 802.11g. Ebenfalls unterstützt
werden WPA sowie die Sicherheitsprotokolle gemäß
802.11i (dies sowohl für 11a, 11b als auch 11g). QoS und
Verkehrspriorisierung, die von den WME/WMM-Protokollen
benötigt werden, werden ebenfalls (allerdings nicht
für alle drahtlosen Geräte) unterstützt.</para>
</sect2>
<sect2 id="network-wireless-basic">
<title>Basiskonfiguration</title>
<sect3>
<title>Kernelkonfiguration</title>
<para>Um ein drahtloses Netzwerk zu nutzen, benötigen
Sie eine drahtlose Netzwerkkarte und einen Kernel, der
drahtlose Netzwerke unterstützt. Der &os;-Kernel
unterstützt den Einsatz von Kernelmodulen. Daher
müssen Sie nur die Unterstützung für die
von Ihnen verwendeten Geräte aktivieren.</para>
<para>Als Erstes benötigen Sie ein drahtloses Gerät.
Die meisten drahtlosen Geräte verwenden Bauteile von
Atheros und werden deshalb vom &man.ath.4;-Treiber
unterstützt. Um diesen Treiber zu verwenden,
nehmen Sie die folgende Zeile in die Datei
<filename>/boot/loader.conf</filename> auf:</para>
<programlisting>if_ath_load="YES"</programlisting>
<para>Der Atheros-Treiber besteht aus drei Teilen:
dem Treiber selbst (&man.ath.4;), dem
Hardware-Support-Layer für die
chip-spezifischen Funktionen (&man.ath.hal.4;)
sowie einem Algorithmus zur Auswahl der korrekten
Frame-Übertragungsrate (ath_rate_sample).
Wenn Sie die Unterstützung für diesen
Treiber als Kernelmodul laden, kümmert sich
dieses automatisch um diese Aufgaben. Verwenden
Sie ein Nicht-Atheros-Gerät, so müssen
Sie hingegen das für dieses Gerät geeignete
Modul laden, beispielsweise</para>
<programlisting>if_wi_load="YES"</programlisting>
<para>für Geräte, die auf Bauteilen von
Intersil Prism basieren und daher den Treiber
&man.wi.4; voraussetzen.</para>
<note>
<para>In den folgenden Abschnitten wird der
&man.ath.4;-Treiber verwendet. Verwenden Sie ein
anderes Gerät, müssen Sie diesen Wert
daher an Ihre Konfiguration anpassen. Eine Liste aller
verfügbaren Treiber und unterstützten
drahtlosen Geräte finden sich in den &os;
Hardware Notes. Diese sind für verschiedene
Releases und Architekturen auf der Seite <ulink
url="http://www.FreeBSD.org/releases/index.html">
Release Information</ulink> der &os; Homepage. Gibt es
keinen nativen &os;-Treiber für Ihr drahtloses
Gerät, können Sie möglicherweise mit
<link linkend="config-network-ndis">NDIS</link> einen
&windows;-Treiber verwenden.</para>
</note>
<para>Unter &os;&nbsp;7.X benötigen Sie zusätlich
zum korrekten Treiber auch die Unterstützung
für 802.11-Netzwerke. Für
den &man.ath.4;-Treiber werden dazu mindestens die
Module &man.wlan.4;, <literal>wlan_scan_ap</literal>
sowie <literal>wlan_scan_sta</literal> benötigt.
Das &man.wlan.4;-Kernelmodul wird automatisch mit dem
Treiber des drahtlosen Geräts geladen, die beiden
anderen Module werden jeweils durch einen Eintrag in der
Datei <filename>/boot/loader.conf</filename> beim Systemstart
geladen:</para>
<programlisting>wlan_scan_ap_load="YES"
wlan_scan_sta_load="YES"</programlisting>
<para>Ab &os;&nbsp;8.0 sind diese Module Teil des
&man.wlan.4;-Treibers und werden bei Bedarf automatisch
geladen.</para>
<para>Zusätzlich
benötigen Sie noch Module zur Verschlüsselung
ihres drahtlosen Netzwerks. Diese werden normalerweise
dynamisch vom &man.wlan.4;-Modul geladen. Im folgenden
Beispiel erfolgt allerdings eine manuelle Konfiguration.
Folgende Module sind verfügbar: &man.wlan.wep.4;,
&man.wlan.ccmp.4; sowie &man.wlan.tkip.4;. Sowohl
&man.wlan.ccmp.4; als auch &man.wlan.tkip.4; werden nur
benötigt, wenn Sie WPA und/oder die Sicherheitsprotokolle
von 802.11i verwenden wollen. Wollen Sie Ihr Netzwerk
hingegen ohne Verschlüsselung betreiben,
benötigen Sie nicht einmal
die &man.wlan.wep.4;-Unterstützung. Um alle drei
Module beim Systemstart zu laden, fügen Sie folgende
Zeilen in die Datei <filename>/boot/loader.conf</filename>
ein:</para>
<programlisting>wlan_wep_load="YES"
wlan_ccmp_load="YES"
wlan_tkip_load="YES"</programlisting>
<para>Um diese neuen Einträge in der Datei
<filename>/boot/loader.conf</filename> zu aktivieren, müssen
Sie Ihr &os;-System neu starten. Alternativ können Sie
die Kernelmodule aber auch manuell mit &man.kldload.8; laden.</para>
<note>
<para>Wollen Sie keine Kernelmodule verwenden, können
Sie die benötigten Treiber auch in Ihren Kernel
kompilieren. Daz nehmen Sie folgende Zeilen in Ihre
Kernelkonfigurationsdatei auf:</para>
<programlisting>device wlan # 802.11 support
device wlan_wep # 802.11 WEP support
device wlan_ccmp # 802.11 CCMP support
device wlan_tkip # 802.11 TKIP support
device wlan_amrr # AMRR transmit rate control algorithm
device ath # Atheros pci/cardbus NIC's
device ath_hal # pci/cardbus chip support
options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors
device ath_rate_sample # SampleRate tx rate control for ath</programlisting>
<para>Verwenden Sie &os;&nbsp;7.X, müssen Sie auch die beiden
Module <literal>wlan_scan_ap</literal> und
<literal>wlan_scan_sta</literal> in den Kernel aufnehmen (unter
&os;&nbsp;8.X ist dies hingegen nicht mehr notwendig):</para>
<programlisting>device wlan_scan_ap # 802.11 AP mode scanning
device wlan_scan_sta # 802.11 STA mode scanning</programlisting>
<para>Danach bauen Sie den neuen Kernel und starten Ihr
&os;-System neu.</para>
</note>
<para>Während des Systemstarts sollten nun einige
Informationen ähnlich den folgenden über das von
Ihnen verwendete drahtlose Gerät ausgegeben
werden:</para>
<screen>ath0: &lt;Atheros 5212&gt; mem 0x88000000-0x8800ffff irq 11 at device 0.0 on cardbus1
ath0: [ITHREAD]
ath0: AR2413 mac 7.9 RF2413 phy 4.5</screen>
</sect3>
</sect2>
<sect2>
<title>Infrastruktur-Modus</title>
<para>Drahtlose Netzwerke werden in der Regel im
Infrastruktur-Modus (auch BSS-Modus genannt) betrieben.
Dazu werden mehrere drahtlose Access Points zu einem
gemeinsamen drahtlosen Netzwerk verbunden. Jedes dieser
drahtlosen Netzwerke hat einen eigenen Namen, der als
<emphasis>SSID</emphasis> bezeichnet wird. Alle Clients
eines drahtlosen Netzwerks verbinden sich in diesem Modus
mit einem Access Point.</para>
<sect3>
<title>&os;-Clients</title>
<sect4>
<title>Einen Access Point finden</title>
<para>Um nach drahtlosen Netzwerken zu suchen verwenden Sie
<command>ifconfig</command>. Dieser Scanvorgang kann einige
Zei in Anspruch nehmen, da dazu jede verfügbare
Frequenz auf verfügbare Access Points hin
überprüft werden muss. Um die Suche zu starten,
müssen Sie als Super-User angemeldet sein:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> create wlandev <replaceable>ath0</replaceable></userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> up scan</userinput>
SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
dlinkap 00:13:46:49:41:76 11 54M -90:96 100 EPS WPA WME
freebsdap 00:11:95:c3:0d:ac 1 54M -83:96 100 EPS WPA</screen>
<note>
<para>Ihre Netzwerkkarte muss in den Status
<option>up</option> versetzt werden, bevor Sie den ersten
Scanvorgang starten können. Für spätere
Scans ist dies aber nicht mehr erforderlich.</para>
</note>
<note>
<para>Unter &os;&nbsp;7.X wird der Gerätetreiber,
beispielsweise
<devicename><replaceable>ath0</replaceable></devicename>,
direkt verwendet, anstatt auf das allgemeine Gerät
<devicename>wlan<replaceable>0</replaceable></devicename>
zuzugreifen. Verwenden Sie also &os;&nbsp;7.X, müssen
Sie die beiden Befehle im vorigen Beispiel durch den
folgenden Befehl ersetzen:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable> up scan</userinput></screen>
<para>Dies gilt auch für alle weiteren Ausführungen
in diesem Kapitel. Unter &os;&nbsp;7.X müssen analog
alle Befehle und Konfigurationsdateien/Zeilen entsprechend
angepasst werden.</para>
</note>
<para>Als Ergebnis erhalten Sie eine Liste mit allen
gefundenen BSS/IBSS-Netzwerken. Zusätzlich zur
<literal>SSID</literal> (dem Namen des Netzwerks) wird
auch die <literal>BSSID</literal> ausgegeben. Dabei
handelt es sich um MAC-Adresse des Access Points. Das
Feld <literal>CAPS</literal> gibt den Typ des Netzwerks
sowie die Fähigkeiten der Stationen innerhalb des
Netzwerks an:</para>
<variablelist>
<varlistentry>
<term><literal>E</literal></term>
<listitem>
<para>Extended Service Set (ESS). Zeigt an, dass die
Station Teil eines Infrastruktur-Netzwerks ist (und
nicht eines IBSS/Ad-hoc-Netzwerks).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>I</literal></term>
<listitem>
<para>IBSS/Ad-hoc-Netzwerk. Die Station ist Teil eines
Ad-hoc-Netzwerks (und nicht eines
ESS-Netzwerks).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>P</literal></term>
<listitem>
<para>Privacy. Alle Datenframes, die innerhalb des
BSS ausgetauscht werden, sind verschlüsselt.
Dieses BSS verwendet dazu kryptografische Verfahren
wie WEP, TKIP oder AES-CCMP.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>S</literal></term>
<listitem>
<para>Short Preamble. Das Netzwerk verwendet eine
kurze Präambel (definiert in 802.11b High
Rate/DSSS PHY). Eine kurze Präambel verwendet
ein 56&nbsp;Bit langes Sync-Feld (im Gegensatz
zu einer langen Präambel, die ein
128&nbsp;Bit langes Sync-Feld verwendet).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>s</literal></term>
<listitem>
<para>Short slot time. Das 802.11g-Netzwerk verwendet
eine kurze Slotzeit, da es in diesem Netzwerk keine
veralteten (802.11b) Geräte gibt.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Um eine Liste der bekannten Netzwerke auszugeben,
verwenden Sie den folgenden Befehl:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> list scan</userinput></screen>
<para>Diese Liste kann entweder automatisch durch das
drahtlose Gerät oder manuell durch eine
<option>scan</option>-Aufforderung aktualisiert werden.
Veraltete Informationen werden dabei automatisch
entfernt.</para>
</sect4>
<sect4>
<title>Basiseinstellungen</title>
<para>Dieser Abschnitt beschreibt, wie Sie ein einfaches
drahtloses Netzerk ohne Verschlüsselung unter &os;
einrichten. Nachdem Sie sich mit den Informationen dieses
Abschnitts vertraut gemacht haben, sollten Sie Ihr
drahtloses Netzwerk mit <link
linkend="network-wireless-wpa">WPA</link>
verschlüsseln.</para>
<para>Das Einrichten eines drahtlosen Netzwerks erfolgt
in drei Schritten: Der Auswahl eines Access Points, der
Anmeldung Ihrer Station sowie der Konfiguration Ihrer
IP-Adresse.</para>
<sect5>
<title>Einen Access Point auswählen</title>
<para>Im Normalfall wird sich Ihre Station automatisch mit
einem der zur Verfügung stehenden Access Points
verbinden. Sie müssen dazu lediglich Ihr
drahtloses Gerät aktivieren. Alternativ können
Sie auch einen Eintrag ähnlich dem folgenden in
<filename>/etc/rc.conf</filename> aufnehmen:</para>
<programlisting>wlans_ath0="wlan0"
ifconfig_wlan0="DHCP"</programlisting>
<note>
<para>Wie bereits erwähnt, benötigen Sie unter
&os;&nbsp;7.X anstelle dieser beiden Zeilen nur eine
Zeile (mit dem entsprechenden Gerätetreiber):</para>
<programlisting>ifconfig_ath0="DHCP"</programlisting>
</note>
<para>Wollen Sie sich hingegen mit einem bestimmten
Access Point verbinden, müssen Sie dessen
SSID angeben:</para>
<programlisting>wlans_ath0="wlan0"
ifconfig_wlan0="ssid <replaceable>Ihre_SSID</replaceable> DHCP"</programlisting>
<para>Gibt es in Ihrem Netzwerk mehrere Access Points
mit der gleichen SSID (was der Einfachheit wegen
häufig der Fall ist), können Sie sich dennoch
mit einem bestimmten Access Point verbinden. Dazu
müssen Sie lediglich die BSSID des Access Points
angeben (die Angabe der SSID ist in diesem Fall nicht
erforderlich):</para>
<programlisting>wlans_ath0="wlan0"
ifconfig_wlan0="ssid <replaceable>Ihre_SSID</replaceable> bssid <replaceable>xx:xx:xx:xx:xx:xx</replaceable> DHCP"</programlisting>
<para>Es gibt noch weitere Möglichkeiten, den Zugriff
auf bestimmte Access Point zu beschränken,
beispielsweise durch die Begrenzung der Frequenzen, auf
denen eine Station nach einem Access Point sucht. Sinnvoll
ist ein solches Vorgehen beispielsweise, wenn Ihr
drahtloses Gerät in verschiedenen Frequenzbereichen
arbeiten kann, da in diesem Fall das Prüfen aller
Frequenzen sehr zeitintensiv ist. Um nur innerhalb eines
bestimmten Frequenzbereichs nach einem Access Point zu
suchen, verwenden Sie die Option <option>mode</option>:</para>
<programlisting>wlans_ath0="wlan0"
ifconfig_wlan0="mode <replaceable>11g</replaceable> ssid <replaceable>Ihre_SSID</replaceable> DHCP"</programlisting>
<para>Dadurch sucht Ihr drahtloses Gerät nur im
2,4&nbsp;GHz-Band (802.11g), aber nicht innerhalb des
5&nbsp;GHz-Bandes nach einem Access Point. Mit der
Option <option>channel</option> können Sie eine
bestimmte Frequenz vorgeben, auf der gesucht werden
soll. Die Option <option>chanlist</option> erlaubt
die Angabe mehrerer erlaubter Frequenzen. Eine
umfassende Beschreibung dieser Optionen finden Sie in
der Manualpage &man.ifconfig.8;.</para>
</sect5>
<sect5>
<title>Authentifizierung</title>
<para>Wenn Sie einen Access Point gefunden haben, muss
sich Ihrem Station am Access Point anmelden, bevor
Sie Daten übertragen kann. Dazu gibt es
verschiedene Möglichkeiten. Am häufigsten
wird nach wie vor die sogenannte <emphasis>offene
Authentifizierung</emphasis> verwendet. Dabei wird
es jeder Station erlaubt, sich mit einem Netzwerk
zu verbinden und Daten zu übertragen. Aus
Sicherheitsgründen sollte diese Methode allerdings
nur zu Testzwecken bei der erstmaligen Einrichtung
eines drahtlosen Netzwerks verwendet werden. Andere
Authentifizierungsmechanismen erfordern den Austausch
kryptografischer Informationen, bevor Sie die
Übertragung von Daten erlauben. Dazu gehören
der Austausch fixer (vorher vereinbarter) Schlüssel
oder Kennwörter sowie der Einsatz komplexerer
Verfahren mit Backend-Diensten wie RADIUS. Die meisten
Netzwerke nutzen allerdings nach wie vor die offene
Authentifizierung, da dies die Voreinstellung ist. Am
zweithäufigsten kommt das weiter unten beschriebene
<link
linkend="network-wireless-wpa-wpa-psk">WPA-PSK</link>
(das auch als <foreignphrase>WPA Personal</foreignphrase>
bezeichnet wird) zum Einsatz.</para>
<note>
<para>Verwenden Sie eine
&apple; &airport; Extreme-Basisstation als Access Point,
benötigen Sie wahrscheinlich sowohl die
Shared-Key-Authentifizierung als auch einen
WEP-Schlüssel. Die entsprechende Konfiguration
erfolgt entweder in der Datei
<filename>/etc/rc.conf</filename> oder über das
Programm &man.wpa.supplicant.8;. Verwenden Sie nur
eine einzige &airport;-Basisstation, benötigen
Sie einen Eintrag ähnlich dem folgenden:</para>
<programlisting>wlans_ath0="wlan0"
ifconfig_wlan0="authmode shared wepmode on weptxkey <replaceable>1</replaceable> wepkey <replaceable>01234567</replaceable> DHCP"</programlisting>
<para>Normalerweise sollten Sie
Shared-Key-Authentifizierung aber nicht verwenden,
da diese die Sicherheit des WEP-Schlüssel noch
weiter verringert. Müssen Sie WEP einsetzen
(beispielsweise weil Sie zu veralteten Geräten
kompatibel bleiben müssen), sollten Sie WEP
nur zusammen mit der offenen Authentifizierung
(<literal>open</literal> authentication) verwenden.
WEP wird im <xref
linkend="network-wireless-wep"/> näher
beschrieben.</para>
</note>
</sect5>
<sect5>
<title>Eine IP-Adresse über DHCP beziehen</title>
<para>Nachdem Sie einen Access Point gefunden und sich
authentifiziert haben, benötigen Sie noch eine
IP-Adresse, die Sie in der Regel über DHCP
zugewiesen bekommen. Dazu müssen Sie lediglich
die Option <literal>DHCP</literal> in Ihre
in der Datei <filename>/etc/rc.conf</filename>
vorhandene Konfiguration Ihres drahtlosen Geräts
aufnehmen:</para>
<programlisting>wlans_ath0="wlan0"
ifconfig_wlan0="DHCP"</programlisting>
<para>Nun können Sie Ihr drahtloses Gerät
starten:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/netif start</userinput></screen>
<para>Nachdem Sie das Gerät aktiviert haben,
können Sie mit <command>ifconfig</command> den
Status des Geräts <devicename>ath0</devicename>
abfragen:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable></userinput>
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g
status: associated
ssid dlinkap channel 11 (2462 Mhz 11g) bssid 00:13:46:49:41:76
country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7
scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7
roam:rate 5 protmode CTS wme burst</screen>
<para><literal>status: associated</literal> besagt, dass
sich Ihr Gerät mit dem drahtlosen Netzwerk verbunden
hat (konkret mit dem Netzwerk <literal>dlinkap</literal>).
<literal>bssid 00:13:46:49:41:76</literal> gibt die
MAC-Adresse Ihres Access Points aus und die Zeile mit
<literal>authmode OPEN</literal> informiert Sie darüber,
dass Ihre Kommunikation nicht verschlüsselt wird.</para>
</sect5>
<sect5>
<title>Statische IP-Adressen</title>
<para>Alternativ zu dynamischen IP-Adressen
können Sie auch eine statische IP-Adresse verwenden.
Dazu ersetzen Sie in Ihrer Konfiguration
<literal>DHCP</literal> durch die zu verwendende
IP-Adresse. Beachten Sie dabei, dass Sie die anderen
Konfigurationsparameter nicht versehentlich
verändern:</para>
<programlisting>wlans_ath0="wlan0"
ifconfig_wlan0="inet <replaceable>192.168.1.100</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>your_ssid_here</replaceable>"</programlisting>
</sect5>
</sect4>
<sect4 id="network-wireless-wpa">
<title>WPA</title>
<para>Bei WPA (Wi-Fi Protected Access) handelt es sich um ein
Sicherheitsprotokoll, das in 802.11-Netzwerken verwendet
wird, um die Nachteile von <link
linkend="network-wireless-wep">WEP</link> (fehlende
Authentifizierung und schwache Verschlüsselung)
zu vermeiden. WPA stellt das aktuelle
802.1X-Authentifizierungsprotokoll dar und verwendet
eine von mehreren Chiffren, um die Datensicherheit
zu gewährleisten. Die einzige Chiffre, die von
WPA verlangt wird, ist TKIP (<foreignphrase>Temporary
Key Integrity Protocol</foreignphrase>), eine Chiffre,
die die von WEP verwendete RC4-Chiffre um Funktionen
zur Prüfung der Datenintegrität und zur
Erkennung und Bekämpfung von Einbruchsversuchen
erweitert.
TKIP ist durch Softwaremodifikationen auch unter
veralteter Hardware lauffähig. Im Vergleich zu
WEP ist WPA zwar sehr viel sicherer, es ist aber dennoch
nicht völlig immun gegen Angriffe. WPA definiert
mit AES-CCMP noch eine weitere Chiffre als Alternative
zu TKIP. AES-CCMP (das häufig als WPA2 oder RSN
bezeichnet wird) sollte, wenn möglich, eingesetzt
werden.</para>
<para>WPA definiert Authentifizierungs- und
Verschlüsselungsprotokolle. Die Authentifizierung
erfolgt in der Regel über eine der folgenden
Techniken: 802.1X gemeinsam mit einem
Backend-Authentifizierungsdienst wie RADIUS, oder durch
einen Minimal-Handshake zwischen der Station und dem
Access Point mit einem vorher vereinbarten gemeinsamen
Schlüssel. Die erste Technik wird als
<foreignphrase>WPA Enterprise</foreignphrase>, die zweite
hingegen als <foreignphrase>WPA Personal</foreignphrase>
bezeichnet. Da sich der Aufwand für das Aufsetzen
eines RADIUS-Backend-Servers für die meisten
drahtlosen Netzwerke nicht lohnt, wird WPA in der Regel
als WPA-PSK (WPA, Pre-Shared-Key) konfiguriert.</para>
<para>Die Kontrolle der drahtlosen Verbindung sowie die
vorangehende Authentifizierung (über Schlüssel
oder durch die Kommunikation mit einem Server) erfolgt
über das Programm &man.wpa.supplicant.8;, das
über die Datei
<filename>/etc/wpa_supplicant.conf</filename>
eingerichtet wird. Ausführliche Informationen
zur Konfiguration des Programms finden sich in der
Manualpage &man.wpa.supplicant.conf.5;.</para>
<sect5 id="network-wireless-wpa-wpa-psk">
<title>WPA-PSK</title>
<para>WPA-PSK oder WPA-Personal basiert auf einem
gemeinsamen (vorher vereinbarten) Schlüssel (PSK),
der aus einem Passwort generiert und danach als
Master-Key des drahtlosen Netzwerks verwendet wird.
Jeder Benutzer des drahtlosen Netzwerks verwendet daher
<emphasis>den gleichen</emphasis> Schlüssel. WPA-PSK
sollte nur in kleinen Netzwerken eingesetzt werden, in
denen die Konfiguration eines Authentifizierungsservers
nicht möglich oder erwünscht ist.</para>
<warning>
<para>Achten Sie darauf, dass Sie immer starke
Passwörter verwenden, die ausreichend lang
sind und, wenn möglich, auch Sonderzeichen
enthalten, damit diese nicht leicht erraten und/oder
umgangen werden können.</para>
</warning>
<para>Der erste Schritt zum Einsatz von WPA-PSK ist die
Konfiguration der SSID und des gemeinsamen Schlüssels
Ihres Netzwerks in der Datei
<filename>/etc/wpa_supplicant.conf</filename>:</para>
<programlisting>network={
ssid="freebsdap"
psk="freebsdmall"
}</programlisting>
<para>Danach geben Sie in <filename>/etc/rc.conf</filename>
an, dass WPA zur Verschlüsselung eingesetzt werden
soll und dass die IP-Adresse über DHCP bezogen
wird:</para>
<programlisting>wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"</programlisting>
<para>Nun können Sie Ihr Netzgerät aktivieren:</para>
<screen>&prompt.root; <userinput><filename>/etc/rc.d/netif</filename> start</userinput>
Starting wpa_supplicant.
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6
DHCPOFFER from 192.168.0.1
DHCPREQUEST on wlan0 to 255.255.255.255 port 67
DHCPACK from 192.168.0.1
bound to 192.168.0.254 -- renewal in 300 seconds.
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 MHz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme burst roaming MANUAL</screen>
<para>Alternativ können Sie die Konfiguration von
<link linkend="network-wireless-wpa-wpa-psk">WPA-PSK</link>
auch manuell durchführen, wobei Sie wiederum die
Konfigurationsdatei
<filename>/etc/wpa_supplicant.conf</filename>
verwenden:</para>
<screen>&prompt.root; <userinput>wpa_supplicant -i <replaceable>wlan0</replaceable> -c /etc/wpa_supplicant.conf</userinput>
Trying to associate with 00:11:95:c3:0d:ac (SSID='freebsdap' freq=2412 MHz)
Associated with 00:11:95:c3:0d:ac
WPA: Key negotiation completed with 00:11:95:c3:0d:ac [PTK=CCMP GTK=CCMP]
CTRL-EVENT-CONNECTED - Connection to 00:11:95:c3:0d:ac completed (auth) [id=0 id_str=]</screen>
<para>Im zweiten Schritt starten Sie nun
<command>dhclient</command>, um eine IP-Adresse vom
DHCP-Server zu beziehen:</para>
<screen>&prompt.root; <userinput>dhclient <replaceable>wlan0</replaceable></userinput>
DHCPREQUEST on wlan0 to 255.255.255.255 port 67
DHCPACK from 192.168.0.1
bound to 192.168.0.254 -- renewal in 300 seconds.
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable></userinput>
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 MHz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme burst roaming MANUAL</screen>
<note>
<para>Enthält Ihre <filename>/etc/rc.conf</filename>
bereits die Zeile <literal>ifconfig_wlan0="DHCP"</literal>,
müssen Sie <command>dhclient</command> nicht mehr
manuell aufrufen, da <command>dhclient</command> in
diesem Fall automatisch gestartet wird, nachdem
<command>wpa_supplicant</command> die Schlüssel
übergibt.</para>
</note>
<para>Sollte der Einsatz von DHCP nicht möglich sein,
können Sie auch eine statische IP-Adresse
angeben, nachdem <command>wpa_supplicant</command> Ihre
Station authentifiziert hat:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> inet <replaceable>192.168.0.100</replaceable> netmask <replaceable>255.255.255.0</replaceable></userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable></userinput>
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 MHz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme burst roaming MANUAL</screen>
<para>Verwenden Sie DHCP nicht, müssen Sie
zusätzlich noch das Standard-Gateway sowie
den/die Nameserver manuell festlegen:</para>
<screen>&prompt.root; <userinput>route add default <replaceable>your_default_router</replaceable></userinput>
&prompt.root; <userinput>echo "nameserver <replaceable>your_DNS_server</replaceable>" &gt;&gt; /etc/resolv.conf</userinput></screen>
</sect5>
<sect5 id="network-wireless-wpa-eap-tls">
<title>WPA und EAP-TLS</title>
<para>Die zweite Möglichkeit, WPA einzusetzen, ist
die Verwendung eines
802.1X-Backend-Authentifizierungsservers. Diese
Variante wird als WPA-Enterprise bezeichnet, um sie
vom weniger sicheren WPA-Personal abzugrenzen, das
auf dem Austausch gemeinsamer (und vorher vereinbarter
Schlüssel) basiert. Die bei WPA-Enterprise
verwendete Authentifizierung basiert auf EAP
(<foreignphrase>Extensible Authentication
Protocol</foreignphrase>).</para>
<para>EAP selbst bietet keine Verschlüsselung,
sondern operiert in einem verschlüsselten
Tunnel. Es gibt verschiedene, auf EAP basierende
Authentifizierungsmethoden, darunter EAP-TLS,
EAP-TTLS sowie EAP-PEAP.</para>
<para>Bei EAP-TLS (<foreignphrase>EAP with Transport Layers
Security</foreignphrase>) handelt es sich um sehr gut
unterstütztes Authentifizierungsprotokoll, da es
sich dabei um die erste EAP-Methode handelt, die von
der <ulink url="http://www.wi-fi.org/">Wi-Fi
Alliance</ulink> zertifiziert wurde. EAP-TLS
erfordert drei Zertifikate: Das (auf allen Rechnern
installierte) CA-Zertifikat, das Server-Zertifikat
Ihres Authentifizierungsservers, sowie ein
Client-Zertifikat für jeden drahtlosen Client.
Sowohl der Authentifizierungsservers als auch die
drahtlosen Clients authentifizieren sich gegenseitig
durch ihre Zertifikate, wobei sie überprüfen,
ob diese Zertifikate auch von der
Zertifizierungs-Authorität (CA) des jeweiligen
Unternehmens signiert wurden.</para>
<para>Die Konfiguration erfolgt (analog zu WPA-PSK)
über die Datei
<filename>/etc/wpa_supplicant.conf</filename>:</para>
<programlisting>network={
ssid="freebsdap" <co id="co-tls-ssid"/>
proto=RSN <co id="co-tls-proto"/>
key_mgmt=WPA-EAP <co id="co-tls-kmgmt"/>
eap=TLS <co id="co-tls-eap"/>
identity="loader" <co id="co-tls-id"/>
ca_cert="/etc/certs/cacert.pem" <co id="co-tls-cacert"/>
client_cert="/etc/certs/clientcert.pem" <co id="co-tls-clientcert"/>
private_key="/etc/certs/clientkey.pem" <co id="co-tls-pkey"/>
private_key_passwd="freebsdmallclient" <co id="co-tls-pwd"/>
}</programlisting>
<calloutlist>
<callout arearefs="co-tls-ssid">
<para>Der Name des Netzwerks (die SSID).</para>
</callout>
<callout arearefs="co-tls-proto">
<para>Das RSN/WPA2-Protokoll (&ieee; 802.11i) wird
verwendet.</para>
</callout>
<callout arearefs="co-tls-kmgmt">
<para>Die <literal>key_mgmt</literal>-Zeile bezieht
sich auf das verwendete Key-Management-Protokoll.
In diesem Beispiel wird WPA gemeinsam mit der
EAP-Authentifizierung verwendet
(<literal>WPA-EAP</literal>).</para>
</callout>
<callout arearefs="co-tls-eap">
<para>Die für die Verbindung verwendete
EAP-Methode.</para>
</callout>
<callout arearefs="co-tls-id">
<para>Das <literal>identity</literal>-Feld enthält
den von EAP verwendeten Identifizierungsstring.</para>
</callout>
<callout arearefs="co-tls-cacert">
<para>Das Feld <literal>ca_cert</literal> gibt den Pfad
zum CA-Zertifikat an. Dieses Datei wird benötigt,
um das Server-Zertifikat zu verifizieren.</para>
</callout>
<callout arearefs="co-tls-clientcert">
<para>Die <literal>client_cert</literal>-Zeile gibt den
Pfad zum Client-Zertifikat an. Jeder Client hat ein
eigenes, innerhalb des Netzwerks eindeutiges,
Zertifikat.</para>
</callout>
<callout arearefs="co-tls-pkey">
<para>Das Feld <literal>private_key</literal> gibt den
Pfad zum privaten Schlüssel des
Client-Zertifikat an.</para>
</callout>
<callout arearefs="co-tls-pwd">
<para>Das Feld <literal>private_key_passwd</literal>
enthält die Passphrase für den privaten
Schlüssel.</para>
</callout>
</calloutlist>
<para>Danach fügen Sie die folgende Zeile in
<filename>/etc/rc.conf</filename> ein:</para>
<programlisting>wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"</programlisting>
<para>Nun können Sie Ihr drahtloses Gerät
über das <filename>rc.d</filename>-System
aktivieren:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/netif start</userinput>
Starting wpa_supplicant.
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
DHCPACK from 192.168.0.20
bound to 192.168.0.254 -- renewal in 300 seconds.
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 MHz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme burst roaming MANUAL</screen>
<para>Alternativ können Sie Ihr drahtloses Gerält
wiederum manuell über
<command>wpa_supplicant</command> und
<command>ifconfig</command> aktivieren.</para>
</sect5>
<sect5 id="network-wireless-wpa-eap-ttls">
<title>WPA und EAP-TTLS</title>
<para>Bei EAP-TLS müssen sowohl der
Authentifizierungsserver als auch die Clients jeweils
ein eigenes Zertifikat aufweisen. Setzen Sie hingegen
EAP-TTLS (<foreignphrase>EAP-Tunneled
Transport Layer Security</foreignphrase>) ein, ist das
Client-Zertifikat optional. EAP-TTLS geht dabei
ähnlich vor wie verschlüsselte Webseiten,
bei denen der Webserver einen sicheren SSL-Tunnel
erzeugen kann, ohne dass der Besucher dabei über
ein client-seitiges Zertifikat verfügen muss.
EAP-TTLS verwendet einen verschlüsselten
TLS-Tunnel zum sicheren Transport der
Authentifizierungsdaten.</para>
<para>Die Konfiguration von EAP-TTLS erfolgt in der
Datei <filename>/etc/wpa_supplicant.conf</filename>:</para>
<programlisting>network={
ssid="freebsdap"
proto=RSN
key_mgmt=WPA-EAP
eap=TTLS <co id="co-ttls-eap"/>
identity="test" <co id="co-ttls-id"/>
password="test" <co id="co-ttls-passwd"/>
ca_cert="/etc/certs/cacert.pem" <co id="co-ttls-cacert"/>
phase2="auth=MD5" <co id="co-ttls-pha2"/>
}</programlisting>
<calloutlist>
<callout arearefs="co-ttls-eap">
<para>Die für die Verbindung verwendete
EAP-Methode.</para>
</callout>
<callout arearefs="co-ttls-id">
<para>Das <literal>identity</literal>-Feld enthält
den Identifizierungsstring für die
EAP-Authentifizierung innerhalb des
verschlüsselten TlS-Tunnels.</para>
</callout>
<callout arearefs="co-ttls-passwd">
<para>Das <literal>password</literal>-Feld enthält
die Passphrase für die
EAP-Authentifizierung.</para>
</callout>
<callout arearefs="co-ttls-cacert">
<para>Das Feld <literal>ca_cert</literal> gibt den
Pfad zum CA-Zertifikat an, das benötigt wird,
um das Server-Zertifikat zu verifizieren.</para>
</callout>
<callout arearefs="co-ttls-pha2">
<para>Die innerhalb des verschlüsselten TLS-Tunnels
verwendete Authentifizierungsmethode. In unserem
Beispiel handelt es sich dabei um EAP und MD5. Diese
Phase der <quote>inneren Authentifizierung</quote> wird
oft als <quote>phase2</quote> bezeichnet.</para>
</callout>
</calloutlist>
<para>Folgende Zeilen müssen zusätzlich in die Datei
<filename>/etc/rc.conf</filename> aufgenommen werden:</para>
<programlisting>wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"</programlisting>
<para>Nun können Sie Ihr drahtloses Gerät
aktivieren:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/netif start</userinput>
Starting wpa_supplicant.
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21
DHCPACK from 192.168.0.20
bound to 192.168.0.254 -- renewal in 300 seconds.
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 MHz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme burst roaming MANUAL</screen>
</sect5>
<sect5 id="network-wireless-wpa-eap-peap">
<title>WPA und EAP-PEAP</title>
<para>PEAP (<foreignphrase>Protected EAP</foreignphrase>)
wurde als Alternative zu EAP-TTLS entwickelt. Es gibt
zwei verschiedene PEAP-Methoden, wobei es sich bei
PEAPv0/EAP-MSCHAPv2 um die häufiger verwendete
Methode handelt. In den folgenden Ausführungen
wird der Begriff PEAP synonym für diese
EAP-Methode verwendet. PEAP ist nach EAP-TLS der
am häufigsten verwendete und am besten
unterstützte EAP-Standard.</para>
<para>PEAP arbeitet ähnlich wie EAP-TTLS: Es
verwendet ein server-seitiges Zertifikat, um
einen verschlüsselten TLS-Tunnel zu erzeugen,
über den die sichere Authentifizierung zwischen
den Clients und dem Authentifizierungsserver erfolgt.
In Sachen Sicherheit unterscheiden sich EAP-TTLS und
PEAP allerdings: PEAP überträgt den
Benutzernamen im Klartext und verschlüsselt nur
das Passwort, während EAP-TTLS sowohl den
Benutzernamen als auch das Passwort über den
TLS-Tunnel überträgt.</para>
<para>Um EAP-PEAP einzurichten, müssen Sie die
Konfigurationsdatei
<filename>/etc/wpa_supplicant.conf</filename>
anpassen:</para>
<programlisting>network={
ssid="freebsdap"
proto=RSN
key_mgmt=WPA-EAP
eap=PEAP <co id="co-peap-eap"/>
identity="test" <co id="co-peap-id"/>
password="test" <co id="co-peap-passwd"/>
ca_cert="/etc/certs/cacert.pem" <co id="co-peap-cacert"/>
phase1="peaplabel=0" <co id="co-peap-pha1"/>
phase2="auth=MSCHAPV2" <co id="co-peap-pha2"/>
}</programlisting>
<calloutlist>
<callout arearefs="co-peap-eap">
<para>Die für die Verbindung verwendete
EAP-Methode.</para>
</callout>
<callout arearefs="co-peap-id">
<para>Das <literal>identity</literal>-Feld enthält
den Identifizierungsstring für die innerhalb
des verschlüsselten TLS-Tunnels erfolgende
EAP-Authentifizierung.</para>
</callout>
<callout arearefs="co-peap-passwd">
<para>Das Feld <literal>password</literal> enthält
die Passphrase für die EAP-Authentifizierung.</para>
</callout>
<callout arearefs="co-peap-cacert">
<para>Das Feld <literal>ca_cert</literal> gibt den Pfad
zum CA-Zertifikat an, das zur Verifizierung des
Server-Zertifikats benötigt wird.</para>
</callout>
<callout arearefs="co-peap-pha1">
<para>Dieses Feld enthält die Parameter für
die erste Phase der Authentifizierung (also den
TLS-Tunnel). Je nach dem, welchen
Authentifizierungsserver Sie verwenden, müssen
Sie hier einen unterschiedlichen Wert angeben.
In den meisten Fällen wird dieses Feld den
Wert <quote>client EAP encryption</quote> aufweisen,
der durch die Angabe von
<literal>peaplabel=0</literal> gesetzt wird. Weitere
Informationen zur Konfiguration von PEAP finden Sie
in der Manualpage &man.wpa.supplicant.conf.5;.</para>
</callout>
<callout arearefs="co-peap-pha2">
<para>Das innerhalb des verschlüsselten TLS-Tunnels
verwendete Authentifizierungsprotokoll. In unserem
Beispiel handelt es sich dabei um
<literal>auth=MSCHAPV2</literal>.</para>
</callout>
</calloutlist>
<para>Danach fügen Sie die folgende Zeile in
<filename>/etc/rc.conf</filename> ein:</para>
<programlisting>ifconfig_ath0="WPA DHCP"</programlisting>
<para>Zuletzt müssen Sie die Netzwerkkarte noch
aktivieren:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/netif start</userinput>
Starting wpa_supplicant.
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21
DHCPACK from 192.168.0.20
bound to 192.168.0.254 -- renewal in 300 seconds.
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 MHz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme burst roaming MANUAL</screen>
</sect5>
</sect4>
<sect4 id="network-wireless-wep">
<title>WEP</title>
<para>WEP (Wired Equivalent Privacy) ist Teil des
ursprünglichen 802.11-Standards. Es enthält
keinen Authentifzierungsmechanismus und verfügt
lediglich über eine schwache Zugriffskontrolle,
die sehr leicht umgangen werden kann.</para>
<para>WEP kann über <command>ifconfig</command>
aktiviert werden:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> create wlandev <replaceable>ath0</replaceable></userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> inet <replaceable>192.168.1.100</replaceable> netmask <replaceable>255.255.255.0</replaceable> \
ssid <replaceable>my_net</replaceable> wepmode on weptxkey <replaceable>3</replaceable> wepkey <replaceable>3:0x3456789012</replaceable></userinput></screen>
<itemizedlist>
<listitem>
<para> Mit <literal>weptxkey</literal> geben Sie an,
welcher WEP-Schlüssel für für die
Datenübertragung verwendet wird (in unserem
Beispiel ist dies der dritte Schlüssel). Der
gleiche Schlüssel muss auch am Access Point
eingestellt sein. Kennen Sie den vom Access Point
verwendeten Schlüssel nciht, sollten Sie zuerst
den Wert <literal>1</literal> (d.h. den ersten
Schlüssel) für diese Variable verwenden.</para>
</listitem>
<listitem>
<para>Mit <literal>wepkey</literal> legen Sie den zu
verwendenden WEP-Schlüssel in der Form
<replaceable>Nummer:Schlüssel</replaceable> fest.
Ist der Schlüssel "Nummer" nicht vorhanden, wird
automatisch Schlüssel <literal>1</literal>
verwendet. Die Angabe von "Nummer" ist zwingend
nötig, wenn Sie einen anderen als den ersten
Schlüssel verwenden wollen.</para>
<note>
<para>In Ihrer Konfiguration müssen Sie
<literal>0x3456789012</literal> durch den an
Ihrem Access Point konfigurierten Schlüssel
ersetzen.</para>
</note>
</listitem>
</itemizedlist>
<para>Weitere Informationen finden Sie in der Manualpage
&man.ifconfig.8;.</para>
<para>Das Programm <command>wpa_supplicant</command>
eignet sich ebenfalls dazu, WEP für Ihr drahtloses
Gerät zu aktivieren. Obige Konfiguration lässt
sich dabei durch die Aufnahme der folgenden Zeilen in die
Datei <filename>/etc/wpa_supplicant.conf</filename>
realisieren:</para>
<programlisting>network={
ssid="my_net"
key_mgmt=NONE
wep_key3=3456789012
wep_tx_keyidx=3
}</programlisting>
<para>Danach müssen Sie das Programm noch aufrufen:</para>
<screen>&prompt.root; <userinput>wpa_supplicant -i <replaceable>wlan0</replaceable> -c /etc/wpa_supplicant.conf</userinput>
Trying to associate with 00:13:46:49:41:76 (SSID='dlinkap' freq=2437 MHz)
Associated with 00:13:46:49:41:76</screen>
</sect4>
</sect3>
</sect2>
<sect2>
<title>Ad-hoc-Modus</title>
<para>Der IBSS-Modus (auch als Ad-hoc-Modus bezeichnet), ist
für Punkt-zu-Punkt-Verbindungen vorgesehen. Um
beispielsweise eine Ad-hoc-Verbindung zwischen den Rechnern
<hostid>A</hostid> und <hostid>B</hostid> aufzubauen,
benötigen Sie lediglich zwei IP-Adressen und eine
SSID.</para>
<para>Auf dem Rechner <hostid>A</hostid> geben Sie Folgendes
ein:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> create wlandev <replaceable>ath0</replaceable> wlanmode adhoc</userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> inet <replaceable>192.168.0.1</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>freebsdap</replaceable></userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable></userinput>
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
ether 00:11:95:c3:0d:ac
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet autoselect mode 11g &lt;adhoc&gt;
status: running
ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac
country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
protmode CTS wme burst</screen>
<para>Der <literal>adhoc</literal>-Parameter gibt an, dass die
Schnittstelle im IBSS-Modus läuft.</para>
<para>Rechner <hostid>B</hostid> sollte nun in der Lage sein,
Rechner <hostid>A</hostid> zu finden:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> create wlandev <replaceable>ath0</replaceable> wlanmode adhoc</userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> up scan</userinput>
SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
freebsdap 02:11:95:c3:0d:ac 2 54M -64:-96 100 IS WME</screen>
<para>Der Wert <literal>I</literal> (Spalte CAPS) gibt an,
dass sich Rechner <hostid>A</hostid> im Ad-hoc-Modus befindet.
Nun müssen Sie nur noch Rechner <hostid>B</hostid> eine
unterschiedliche IP-Adresse zuweisen:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> inet <replaceable>192.168.0.2</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>freebsdap</replaceable></userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable></userinput>
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet autoselect mode 11g &lt;adhoc&gt;
status: running
ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac
country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
protmode CTS wme burst</screen>
<para>Damit sind die Rechner <hostid>A</hostid> und
<hostid>B</hostid> bereit und können untereinander
Daten austauschen.</para>
</sect2>
<sect2 id="network-wireless-ap">
<title>&os; Host Access Points</title>
<para>&os; kann als Access Point (AP) agieren. Dies verhindert,
dass man sich einen Hardware AP kaufen oder ein ad-hoc
Netzwerk laufen lassen muss. Dies kann sinnvoll sein,
falls Ihre &os;-Computer als Gateway zu einem anderen
Netzwerk (z.B. Internet) fungiert.</para>
<sect3 id="network-wireless-ap-basic">
<title>Grundeinstellungen</title>
<para>Bevor Sie ihren &os;-Computer als einen AP konfigurieren,
muss der Kernel mit dem für ihre Wireless-Karte
entsprechenden Treibern konfiguriert werden. Sie
müssen ebenfalls die Sicherheitsprotokolle, die Sie
nutzen wollen, dem Kernel hinzufügen. Für
weitere Informationen siehe:
<xref linkend="network-wireless-basic"/>.</para>
<note>
<para>Die Verwendung der NDIS und &windows; Treiber erlauben
zur Zeit keinen AP-Modus. Nur die nativen
&os;-Wireless-Treiber unterstüten den AP Modus.</para>
</note>
<para>Nachdem die Unterstützung für ihr drahtloses
Netzwerk geladen ist, können Sie überprüfen, ob
Ihr Wireless-Gerät den hostbasierenden Access-Point Modus
(auch bekannt als hostap Modus) unterstützt:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> create wlandev <replaceable>ath0</replaceable></userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> list caps</userinput>
drivercaps=6f85edc1&lt;STA,FF,TURBOP,IBSS,HOSTAP,AHDEMO,TXPMGT,SHSLOT,SHPREAMBLE,MONITOR,MBSS,WPA1,WPA2,BURST,WME,WDS,BGSCAN,TXFRAG&gt;
cryptocaps=1f&lt;WEP,TKIP,AES,AES_CCM,TKIPMIC&gt;</screen>
<para>Diese Ausgabe zeigt die Möglichkeiten der Karte. Das
Wort <literal>HOSTAP</literal> bestätigt, dass diese
Wireless-Karte als Access Point agieren kann. Die
verschiedenen unterstützten Algorithmen
(z.B. WEP, TKIP, AES usw.) werden ebenfalls angezeigt.
Diese Informationen sind wichtig, wenn Sie wissen wollen,
welche Sicherheitsprotokolle auf diesem Access Point
verwendbar sind.</para>
<para>Das Wireless-Gerät kann nur während der Erzeugung
des Pseudo-Geräts in den hostap-Modus gesetzt werden.
Zuvor erstellte Pseudo-Geräte müssen also vorher
zerstört werden:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> destroy</userinput></screen>
<para>Danach muss das Gerät erneut erstellt werden, bevor
die restlichen Netzwerkparameter konfiguriert werden
können:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> create wlandev <replaceable>ath0</replaceable> wlanmode hostap</userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> inet <replaceable>192.168.0.1</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>freebsdap</replaceable> mode 11g channel 1</userinput></screen>
<para>Benutzen Sie danach erneut den Befehl
<command>ifconfig</command>, um den Status der
<devicename>wlan0</devicename>-Schnittstelle abzufragen:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable></userinput>
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
ether 00:11:95:c3:0d:ac
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet autoselect mode 11g &lt;hostap&gt;
status: running
ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
protmode CTS wme burst dtimperiod 1 -dfs</screen>
<para>Die <literal>hostap</literal>-Parameter geben die
Schnittstelle an, die im hostbasierenden Access Point Modus
läuft.</para>
<para>Die Konfiguration der Schnittstelle kann durch
Hinzufügen der folgenden Zeilen in die Datei
<filename>/etc/rc.conf</filename> automatisch während
des Bootvorganges erfolgen:</para>
<programlisting>wlans_ath0="wlan0"
create_args_wlan0="wlanmode hostap"
ifconfig_wlan0="inet <replaceable>192.168.0.1</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>freebsdap</replaceable> mode 11g channel <replaceable>1</replaceable>"</programlisting>
</sect3>
<sect3>
<title>Hostbasierender Access Point ohne Authentifizierung
oder Verschlüsselung</title>
<para>Obwohl es nicht empfohlen wird, einen AP ohne jegliche
Authentifizierung oder Verschlüsselung laufen zu lassen,
ist es eine einfache Art zu testen, ob der AP funktioniert.
Diese Konfiguration ist auch wichtig für die Fehlersuche
bei Client-Problemen.</para>
<para>Nachdem Sie den AP, wie oben beschrieben, konfiguriert
haben, ist es möglich von einem anderen drahtlosen
Computer eine Suche nach dem AP zu starten:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> create wlandev <replaceable>ath0</replaceable></userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> up scan</userinput>
SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
freebsdap 00:11:95:c3:0d:ac 1 54M -66:-96 100 ES WME</screen>
<para>Der Client-Rechner fand den Access Point und kann mit ihm
verbunden werden:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> inet <replaceable>192.168.0.2</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>freebsdap</replaceable></userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable></userinput>
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7
scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7
roam:rate 5 protmode CTS wme burst</screen>
</sect3>
<sect3>
<title>WPA-basierender Host-Access Point</title>
<para>Dieser Abschnitt beschäftigt sich mit dem Konfigurieren
eines &os;-Access-Points mit dem WPA-Sicherheitsprotokoll.
Weitere Einzelheiten zu WPA und der Konfiguration von Clients mit
WPA finden Sie im
<xref linkend="network-wireless-wpa"/>.</para>
<para>Der <application>hostapd</application>-Dienst wird genutzt,
um die Client-Authentifizierung und das Schlüsselmanagement
auf dem Access Point mit aktiviertem WPA zu nutzen.</para>
<para>In den folgenden Abschnitten werden allen Konfigurationen
auf dem &os;-Computer ausgeführt, der als AP agiert.
Nachdem der AP korrekt arbeitet, sollte
<application>hostapd</application> automatisch beim Booten
durch folgende Zeile in der <filename>/etc/rc.conf</filename>
aktiviert werden:</para>
<programlisting>hostapd_enable="YES"</programlisting>
<para>Bevor Sie versuchen <application>hostapd</application>
zu konfigurieren, stellen Sie sicher, dass die
Grundeinstellungen, wie in
<xref linkend="network-wireless-ap-basic"/> beschrieben,
ausgeführt wurden.</para>
<sect4>
<title>WPA-PSK</title>
<para>WPA-PSK ist für kleine Netzwerke gedacht, in denen die
Verwendung eines Authentifizierungs-Backend-Server nicht
möglich oder erwünscht ist.</para>
<para>Die Konfiguration wird in
<filename>/etc/hostapd.conf</filename>
durchgeführt:</para>
<programlisting>interface=wlan0 <co id="co-ap-wpapsk-iface"/>
debug=1 <co id="co-ap-wpapsk-dbug"/>
ctrl_interface=/var/run/hostapd <co id="co-ap-wpapsk-ciface"/>
ctrl_interface_group=wheel <co id="co-ap-wpapsk-cifacegrp"/>
ssid=freebsdap <co id="co-ap-wpapsk-ssid"/>
wpa=1 <co id="co-ap-wpapsk-wpa"/>
wpa_passphrase=freebsdmall <co id="co-ap-wpapsk-pass"/>
wpa_key_mgmt=WPA-PSK <co id="co-ap-wpapsk-kmgmt"/>
wpa_pairwise=CCMP TKIP <co id="co-ap-wpapsk-pwise"/></programlisting>
<calloutlist>
<callout arearefs="co-ap-wpapsk-iface">
<para>Dieses Feld zeigt die Wireless-Schnittstelle an, die
für den Access Point verwendet wird an.</para>
</callout>
<callout arearefs="co-ap-wpapsk-dbug">
<para>Dieses Feld legt den debuglevel von
<application>hostapd</application> während der
Ausführung fest. Ein Wert von <literal>1</literal>
ist der kleinste zulässige Wert.</para>
</callout>
<callout arearefs="co-ap-wpapsk-ciface">
<para>Das <literal>ctrl_interface</literal>-Feld gibt
den Pfadnamen des Verzeichnisses an, der von
<application>hostapd</application> dazu genutzt wird,
um die domain socket Dateien zu speichern, die für
die Kommunikation mit externen Programmen,
wie z.B. &man.hostapd.cli.8;, benutzt werden.
Hier wurden die Standardwerte benutzt.</para>
</callout>
<callout arearefs="co-ap-wpapsk-cifacegrp">
<para>Die Zeile <literal>ctrl_interface_group</literal>
legt fest, welche Gruppe (hier ist es die
<groupname>wheel</groupname>-Gruppe) die Erlaubnis hat,
die Schnittstellendateien zu kontrollieren.</para>
</callout>
<callout arearefs="co-ap-wpapsk-ssid">
<para>Dieses Feld setzt den Netzwerknamen.</para>
</callout>
<callout arearefs="co-ap-wpapsk-wpa">
<para>Das <literal>wpa</literal>-Feld aktiviert WPA und
gibt an welches WPA-Authentifizierungprotokoll
benötigt wird. Ein Wert von <literal>1</literal>
konfiguriert den AP mit WPA-PSK.</para>
</callout>
<callout arearefs="co-ap-wpapsk-pass">
<para>Das <literal>wpa_passphrase</literal>-Feld
beinhaltet das ASCII-Passwort für die
WPA-Authentifikation.</para>
<warning>
<para>Verwenden Sie immer sichere Passwörter,
die ausreichend lang sind und aus vielen
unterschiedlichen Zeichen bestehen, damit sie nicht
erraten werden oder umgangen werden können.</para>
</warning>
</callout>
<callout arearefs="co-ap-wpapsk-kmgmt">
<para>Die <literal>wpa_key_mgmt</literal> Zeile bestimmt
das Schlüsselmanagement-Protokoll, das benutzt wird.
In unserem Fall ist es WPA-PSK.</para>
</callout>
<callout arearefs="co-ap-wpapsk-pwise">
<para>Das <literal>wpa_pairwise</literal> Feld zeigt die
zulässigen Verschlüsselungs-Algorithmen
des Access Points. Hier werden beide, TKIP (WPA) und
CCMP (WPA2), akzeptiert. CCMP-Verschlüsselung ist
eine Alternative zu TKIP und sollte wenn möglich
eingesetzt werden. TKIP sollte nur da eingesetzt werden,
wo kein CCMP möglich ist.</para>
</callout>
</calloutlist>
<para>Als nächstes wird der
<application>hostapd</application> gestartet:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/hostapd forcestart</userinput></screen>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable></userinput>
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 2290
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe80::211:95ff:fec3:dac%ath0 prefixlen 64 scopeid 0x4
ether 00:11:95:c3:0d:ac
media: IEEE 802.11 Wireless Ethernet autoselect mode 11g &lt;hostap&gt;
status: associated
ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac
authmode WPA2/802.11i privacy MIXED deftxkey 2 TKIP 2:128-bit txpowmax 36 protmode CTS dtimperiod 1 bintval 100</screen>
<para>Der Access Point läft nun, die Clients
können mit ihm verbunden werden. Weitere
Informationen finden Sie im
<xref linkend="network-wireless-wpa"/>. Es ist möglich
zu sehen, welche Stationen mit dem AP verbunden sind.
Dazu geben Sie den Befehl
<command>ifconfig <replaceable>wlan0</replaceable> list sta</command>
ein.</para>
</sect4>
</sect3>
<sect3>
<title>WEP hostbasierender Access Point</title>
<para>Es ist nicht empfehlenswert, einen Access Point mit
WEP zu konfigurieren, da es keine
Authentifikationsmechanismen gibt und WEP leicht zu
knacken ist. Einige ältere WLAN-Karten
unterstützen nur WEP als Sicherheitsprotokoll. Für
solche Karten ist es notwendig den AP ohne
Authentifikation, Verschlüsselung oder mit dem
WEP-Protokoll zu konfigurieren.</para>
<para>Das Wireless-Gerät kann nun in den hostap-Modus
versetzt werden und mit der korrekten SSID und IP-Adresse
konfiguriert werden:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> create wlandev <replaceable>ath0</replaceable> wlanmode hostap</userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> inet <replaceable>192.168.0.1</replaceable> netmask <replaceable>255.255.255.0</replaceable> \
ssid <replaceable>freebsdap</replaceable> wepmode on weptxkey <replaceable>3</replaceable> wepkey <replaceable>3:0x3456789012</replaceable> mode 11g</userinput></screen>
<itemizedlist>
<listitem>
<para>Der <literal>weptxkey</literal> gibt an,
welcher WEP-Schlüssel bei der Übertragung
benutzt wird. Hier nutzen wir den 3. Schlüssel
(die Nummerierung der Schlüssel beginnt bei
<literal>1</literal>). Dieses Parameter muss angegeben
sein, damit die Daten wirklich verschlüsselt
werden.</para>
</listitem>
<listitem>
<para>Der <literal>wepkey</literal> gibt den
gewählten WEP-Schlüssel an. Er sollte im
folgenden Format <replaceable>index:key</replaceable>
vorliegen. Wenn kein Index vorhanden ist, wird der
Schlüssel <literal>1</literal> benutzt. Das bedeutet
wir brauchen einen Index, falls wir einen anderen
Schlüssel als den ersten nutzen wollen.</para>
</listitem>
</itemizedlist>
<para>Benutzen Sie den Befehl <command>ifconfig</command>
noch einmal um den Status der
<devicename>wlan0</devicename>-Schnittstelle zu sehen:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable></userinput>
wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
ether 00:11:95:c3:0d:ac
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet autoselect mode 11g &lt;hostap&gt;
status: running
ssid freebsdap channel 4 (2427 Mhz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode OPEN privacy ON deftxkey 3 wepkey 3:40-bit
txpower 21.5 scanvalid 60 protmode CTS wme burst dtimperiod 1 -dfs</screen>
<para>Es ist möglich, von einem anderen drahtlosen
Computer eine Suche nach dem AP zu starten:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> create wlandev <replaceable>ath0</replaceable></userinput>
&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> up scan</userinput>
SSID BSSID CHAN RATE S:N INT CAPS
freebsdap 00:11:95:c3:0d:ac 1 54M 22:1 100 EPS</screen>
<para>Der Client-Rechner fand den Access Point und kann
mit den korrekten Parametern (Schlüssel usw.)
mit ihm verbunden werden. Weitere Informationen gibt es in
folgendem <xref linkend="network-wireless-wep"/></para>
</sect3>
</sect2>
<sect2>
<title>Benutzung von drahtgebundenen und drahtlosen
Verbindungen</title>
<para>Eine Verbindung per Kabel bietet eine bessere Leistung
und eine höhere Zuverlässigkeit, während die
Wireless-Verbindung eine höhere Flexibilität
und Mobilität bietet. Benutzer von Laptops wollen
normalerweise beides nutzen und zwischen beiden hin und her
schalten.</para>
<para>Unter &os; ist es möglich zwei oder mehr
Netzwerkschnittstellen in einem <quote>failover</quote>-Mode zu
kombinieren, so dass automatisch die beste verfügbare Verbindung
aus der Gruppe ausgewählt wird, sobald der Linkstatus
wechselt.</para>
<para>Wir behandeln Link-Aggregation und Failover in dem Kapitel
<xref linkend="network-aggregation"/>. Dort gibt es auch ein
Beispiel (<xref linkend="networking-lagg-wired-and-wireless"/>)
für die Verwendung von sowohl kabelgebundenen wie
auch drahtlosen Verbindungen.</para>
</sect2>
<sect2>
<title>Problembehandlung</title>
<para>Die folgenden Auflistung zeigt, wie Sie einige
häufig auftretende Probleme bei der Einrichtung
Ihres drahtlosen Netzwerks beheben können.</para>
<itemizedlist>
<listitem>
<para>Wird Ihr Access Point bei der Suche nicht gefunden,
sollten Sie überprüfen, ob Sie bei Konfiguration
Ihres drahtlosen Geräts die Anzahl der Kanäle
beschränkt haben.</para>
</listitem>
<listitem>
<para>Wenn Sie sich nicht mit Ihrem Access Point verbinden
können, sollten Sie überprüfen, ob die
Konfiguration Ihrer Station auch der des Access Points
entspricht. Achten Sie dabei speziell auf die
Authentifzierungsmethode und die Sicherheitsprotokolle.
Halten Sie Ihre Konfiguration so einfach wie möglich.
Verwenden Sie ein Sicherheitsprotokoll wie WPA oder WEP,
sollten Sie testweise Ihren Access Point auf
<emphasis>offene Authentifizierung</emphasis> und
<emphasis>keine Sicherheit</emphasis> einstellen.
Danach versuchen Sie sich erneut mit Ihren Access Point
zu verbinden.</para>
</listitem>
<listitem>
<para>Nachdem Sie sich mit dem Access Point verbinden
können, prüfen Sie die Sicherheitseinstellungen,
beginnend mit einfachen Werkzeugen wie &man.ping.8;.</para>
<para>Das Programm <command>wpa_supplicant</command>
kann Ihnen bei der Fehlersuche helfen. Dazu starten
Sie es manuell mit der Option <option>-dd</option> und
durchsuchen anschließend die Protokollinformationen
nach eventuellen Fehlermeldungen.</para>
</listitem>
<listitem>
<para>Zusätzlich gibt es auch zahlreiche
Low-Level-Debugging-Werkzeuge. Die Ausgabe von
Debugging-Informationen des 802.11 Protocol Support Layers
lassen sich mit dem Programm <command>wlandebug</command>
(das sich unter
<filename>/usr/src/tools/tools/net80211</filename>
befindet) aktivieren. Um beispielsweise während
der Suche nach Access Points und des Aufbaus von
802.11-Verbindungen
(<foreignphrase>Handshake</foreignphrase>) auftretende
Systemmeldungen auf die Konsole auszugeben, verwenden
Sie den folgenden Befehl:</para>
<screen>&prompt.root; <userinput>wlandebug -i <replaceable>ath0</replaceable> +scan+auth+debug+assoc</userinput>
net.wlan.0.debug: 0 =&gt; 0xc80000&lt;assoc,auth,scan&gt;</screen>
<para>Der 802.11-Layer liefert umfangreiche Statistiken,
die Sie mit dem Werkzeug <command>wlanstats</command>
abrufen können. Diese Statistiken sollten alle
Fehler identifizieren, die im 802.11-Layer auftreten.
Beachten Sie aber, dass einige Fehler bereits im
darunterliegenden Gerätetreiber auftreten und
daher in diesen Statistiken nicht enthalten sind. Wie
Sie Probleme des Gerätetreibers identifizieren,
entnehmen Sie bitte der Dokumentation Ihres
Gerätetreibers.</para>
</listitem>
</itemizedlist>
<para>Können Sie Ihr Problem durch diese
Maßnahmen nicht lösen, sollten Sie einen
Problembericht (PR) erstellen und die Ausgabe der weiter
oben genannten Werkzeuge in den Bericht aufnehmen.</para>
</sect2>
</sect1>
<sect1 id="network-bluetooth">
<sect1info>
<authorgroup>
<author>
<firstname>Pav</firstname>
<surname>Lucistnik</surname>
<contrib>Beigetragen von </contrib>
<affiliation>
<address><email>pav@FreeBSD.org</email></address>
</affiliation>
</author>
</authorgroup>
</sect1info>
<title>Bluetooth</title>
<indexterm><primary>Bluetooth</primary></indexterm>
<sect2>
<title>Übersicht</title>
<para>Bluetooth ermöglicht die Bildung von persönlichen
Netzwerken über drahtlose Verbindungen bei einer maximalen
Reichweite von 10 Metern und operiert im unlizensierten
2,4-GHz-Band. Solche Netzwerke werden normalerweise spontan
gebildet, wenn sich mobile Geräte, wie Mobiltelefone,
Handhelds oder Notebooks miteinander verbinden. Im Gegensatz zu
Wireless LAN ermöglicht Bluetooth auch höherwertige
Dienste, wie FTP-ähnliche Dateiserver, Filepushing,
Sprachübertragung, Emulation von seriellen Verbindungen
und andere mehr.</para>
<para>Der Bluetooth-Stack von &os; verwendet das
Netgraph-Framework (&man.netgraph.4;). Viele
Bluetooth-USB-Adapter werden durch den &man.ng.ubt.4;-Treiber
unterstützt. Auf dem Chip BCM2033
von Broadcom basierende Bluetooth-Geräte werden von den
Treibern &man.ubtbcmfw.4; sowie &man.ng.ubt.4; unterstützt.
Die Bluetooth-PC-Card 3CRWB60-A von 3Com verwendet den
&man.ng.bt3c.4;-Treiber. Serielle sowie auf UART basierende
Bluetooth-Geräte werden von &man.sio.4;, &man.ng.h4.4;
sowie &man.hcseriald.8; unterstützt. Dieses Kapitel
beschreibt die Verwendung von USB-Bluetooth-Adaptern.</para>
</sect2>
<sect2>
<title>Die Bluetooth-Unterstützung aktivieren</title>
<para>Bluetooth-Unterstützung ist in der Regel als
Kernelmodul verfügbar. Damit ein Gerät funktioniert,
muss der entsprechende Treiber im Kernel geladen werden:</para>
<screen>&prompt.root; <userinput>kldload ng_ubt</userinput></screen>
<para>Ist das Bluetooth-Gerät beim Systemstart angeschlossen,
kann das entsprechende Modul auch von
<filename>/boot/loader.conf</filename> geladen werden:</para>
<programlisting>ng_ubt_load="YES"</programlisting>
<para>Schließen Sie Ihren USB-Adapter an, sollte eine
Meldung ähnlich der folgenden auf der Konsole (oder in
syslog) erscheinen:</para>
<screen>ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2
ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3,
wMaxPacketSize=49, nframes=6, buffer size=294</screen>
<para>Zum Starten und Beenden des Bluetooth-Stacks verwenden Sie
das Skript <filename>/etc/rc.d/bluetooth</filename>. Es ist
empfehlenswert, den Bluetooth-Stack zu beenden, bevor Sie den
Adapter entfernen. Selbst wenn Sie dies nicht tun, kommt es
(normalerweise) zu keinem fatalen Fehler. Wenn Sie den
Bluetooth-Stack starten, erhalten Sie eine Meldung ähnlich
der folgenden:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/bluetooth start ubt0</userinput>
BD_ADDR: 00:02:72:00:d4:1a
Features: 0xff 0xff 0xf 00 00 00 00 00
&lt;3-Slot&gt; &lt;5-Slot&gt; &lt;Encryption&gt; &lt;Slot offset&gt;
&lt;Timing accuracy&gt; &lt;Switch&gt; &lt;Hold mode&gt; &lt;Sniff mode&gt;
&lt;Park mode&gt; &lt;RSSI&gt; &lt;Channel quality&gt; &lt;SCO link&gt;
&lt;HV2 packets&gt; &lt;HV3 packets&gt; &lt;u-law log&gt; &lt;A-law log&gt; &lt;CVSD&gt;
&lt;Paging scheme&gt; &lt;Power control&gt; &lt;Transparent SCO data&gt;
Max. ACL packet size: 192 bytes
Number of ACL packets: 8
Max. SCO packet size: 64 bytes
Number of SCO packets: 8</screen>
</sect2>
<sect2>
<title>Das Host Controller Interface (HCI)</title>
<indexterm><primary>HCI</primary></indexterm>
<para>Das <foreignphrase>Host Controller Interface</foreignphrase>
(HCI) bietet eine Befehlsschnittstelle zum Basisbandcontroller
und Linkmanager, sowie Zugriff auf den Hardwarestatus und die
Kontrollregister. Dadurch wird ein einheitlicher Zugriff auf
die Fähigkeiten des Bluetooth-Basisbands möglich. Die
HCI-Layer des Rechners tauschen Daten und Befehle mit der
HCI-Firmware der Bluetooth-Geräte aus. Über den
Host Controller Transport Layer-Treiber (also den physikalischen
Bus) können beide HCI-Layer miteinander
kommunizieren.</para>
<para>Eine einzelne Netgraph-Gerätedatei vom Typ
<emphasis>hci</emphasis> wird für ein einzelnes
Bluetooth-Gerät erzeugt. Die HCI-Gerätedatei ist
normalerweise mit der Bluetooth-Gerätetreiberdatei
(downstream) sowie der L2CAP-Gerätedatei (upstream)
verbunden. Alle HCI-Operationen müssen über die
HCI-Gerätedatei und nicht über die Treiberdatei
erfolgen. Der Standardname für die HCI-Gerätedatei
(die in &man.ng.hci.4; beschrieben wird) lautet
<quote>devicehci</quote>.</para>
<para>Eine der wichtigsten Aufgaben ist das Auffinden von sich
in Reichweite befindenden Bluetooth-Geräten. Diese
Funktion wird als <emphasis>inquiry</emphasis> bezeichnet.
Inquiry sowie andere mit HCI in Verbindung stehende Funktionen
werden von &man.hccontrol.8; zur Verfügung gestellt. Das
folgende Beispiel zeigt, wie man herausfindet, welche
Bluetooth-Geräte sich in Reichweite befinden. Eine solche
Abfrage dauert nur wenige Sekunden. Beachten Sie, dass ein
Gerät nur dann antwortet, wenn es sich im Modus
<emphasis>discoverable</emphasis> befindet.</para>
<screen>&prompt.user; <userinput>hccontrol -n ubt0hci inquiry</userinput>
Inquiry result, num_responses=1
Inquiry result #0
BD_ADDR: 00:80:37:29:19:a4
Page Scan Rep. Mode: 0x1
Page Scan Period Mode: 00
Page Scan Mode: 00
Class: 52:02:04
Clock offset: 0x78ef
Inquiry complete. Status: No error [00]</screen>
<para><literal>BD_ADDR</literal> stellt, ähnlich der
MAC-Adresse einer Netzwerkkarte, die eindeutige Adresse eines
Bluetooth-Gerätes dar. Diese Adresse ist für die
Kommunikation mit dem Gerät nötig. Es ist aber auch
möglich, BD_ADDR einen Klartextnamen zuzuweisen. Die
Datei <filename>/etc/bluetooth/hosts</filename> enthält
Informationen über die bekannten Bluetooth-Rechner. Das
folgende Beispiel zeigt, wie man den Klartextnamen eines
entfernten Geräts in Erfahrung bringen kann:</para>
<screen>&prompt.user; <userinput>hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4</userinput>
BD_ADDR: 00:80:37:29:19:a4
Name: Pav's T39</screen>
<para>Wenn Sie ein entferntes Bluetooth-Gerät abfragen, wird
dieses Ihren Rechner unter dem Namen
<quote>your.host.name (ubt0)</quote> finden. Dieser Name kann
aber jederzeit geändert werden.</para>
<para>Bluetooth ermöglicht Punkt-zu-Punkt-Verbindungen (an
denen nur zwei Bluetooth-Geräte beteiligt sind), aber auch
Punkt-zu-Multipunkt-Verbindungen, bei denen eine Verbindung von
mehreren Bluetooth-Geräten gemeinsam genutzt wird. Das
folgende Beispiel zeigt, wie man die aktiven
Basisbandverbindungen des lokalen Gerätes anzeigen kann:</para>
<screen>&prompt.user; <userinput>hccontrol -n ubt0hci read_connection_list</userinput>
Remote BD_ADDR Handle Type Mode Role Encrypt Pending Queue State
00:80:37:29:19:a4 41 ACL 0 MAST NONE 0 0 OPEN</screen>
<para>Ein <emphasis>connection handle</emphasis> ist für die
Beendigung einer Basisbandverbindung nützlich. Im
Normalfall werden inaktive Verbindungen aber automatisch vom
Bluetooth-Stack getrennt.</para>
<screen>&prompt.root; <userinput>hccontrol -n ubt0hci disconnect 41</userinput>
Connection handle: 41
Reason: Connection terminated by local host [0x16]</screen>
<para>Rufen Sie <command>hccontrol help</command> auf, wenn Sie
eine komplette Liste aller verfügbaren HCI-Befehle
benötigen. Die meisten dieser Befehle müssen nicht
als <username>root</username> ausgeführt werden.</para>
</sect2>
<sect2>
<title>Das Logical Link Control and Adaptation Protocol (L2CAP)</title>
<indexterm><primary>L2CAP</primary></indexterm>
<para>Das <foreignphrase>Logical Link Control and Adaptation
Protocol</foreignphrase> (L2CAP) bietet
höherwertigen Protokollen verbindungsorientierte und
verbindungslose Datendienste an. Dazu gehören auch
Protokollmultiplexing, Segmentierung und Reassemblierung.
L2CAP erlaubt höherwertigen Protokollen und Programmen den
Versand und Empfang von L2CAP-Datenpaketen mit einer Länge
von bis zu 64 Kilobytes.</para>
<para>L2CAP arbeitet <emphasis>kanal</emphasis>basiert. Ein
Kanal ist eine logische Verbindung innerhalb einer
Basisbandverbindung. Jeder Kanal ist dabei an ein einziges
Protokoll gebunden. Mehrere Geräte können an das
gleiche Protokoll gebunden sein, es ist aber nicht möglich,
einen Kanal an mehrere Protokolle zu binden. Jedes über
einen Kanal ankommende L2CAP-Paket wird an das entsprechende
höherwertige Protokoll weitergeleitet. Mehrere Kanäle
können sich die gleiche Basisbandverbindung teilen.</para>
<para>Eine einzelne Netgraph-Gerätedatei vom Typ
<emphasis>l2cap</emphasis> wird für ein einzelnes
Bluetooth-Gerät erzeugt. Die L2CAP-Gerätedatei ist
normalerweise mit der Bluetooth-HCI-Gerätedatei
(downstream) sowie der Bluetooth-Socket-Gerätedatei
(upstream) verbunden. Der Standardname für die
L2CAP-Gerätedatei, die in &man.ng.l2cap.4; beschrieben
wird, lautet <quote>devicel2cap</quote>.</para>
<para>Ein nützlicher Befehl zum Anpingen von anderen
Geräten ist &man.l2ping.8;. Einige Bluetooth-Geräte
senden allerdings nicht alle erhaltenen Daten zurück. Die
Ausgabe <literal>0 bytes</literal> ist also kein Fehler:</para>
<screen>&prompt.root; <userinput>l2ping -a 00:80:37:29:19:a4</userinput>
0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0</screen>
<para>Das Programm &man.l2control.8; liefert Informationen
über L2CAP-Dateien. Das folgende Beispiel zeigt, wie man
die Liste der logischen Verbindungen (Kanäle) sowie die
Liste der Basisbandverbindungen abfragen kann:</para>
<screen>&prompt.user; <userinput>l2control -a 00:02:72:00:d4:1a read_channel_list</userinput>
L2CAP channels:
Remote BD_ADDR SCID/ DCID PSM IMTU/ OMTU State
00:07:e0:00:0b:ca 66/ 64 3 132/ 672 OPEN
&prompt.user; <userinput>l2control -a 00:02:72:00:d4:1a read_connection_list</userinput>
L2CAP connections:
Remote BD_ADDR Handle Flags Pending State
00:07:e0:00:0b:ca 41 O 0 OPEN</screen>
<para>&man.btsockstat.1; ist ein weiteres Diagnoseprogramm. Es
funktioniert analog zu &man.netstat.1;, arbeitet aber mit
Bluetooth-Datenstrukturen. Das folgende Beispiel zeigt die
gleiche Liste der logischen Verbindungen wie &man.l2control.8;
im vorherigen Beispiel.</para>
<screen>&prompt.user; <userinput>btsockstat</userinput>
Active L2CAP sockets
PCB Recv-Q Send-Q Local address/PSM Foreign address CID State
c2afe900 0 0 00:02:72:00:d4:1a/3 00:07:e0:00:0b:ca 66 OPEN
Active RFCOMM sessions
L2PCB PCB Flag MTU Out-Q DLCs State
c2afe900 c2b53380 1 127 0 Yes OPEN
Active RFCOMM sockets
PCB Recv-Q Send-Q Local address Foreign address Chan DLCI State
c2e8bc80 0 250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3 6 OPEN</screen>
</sect2>
<sect2>
<title>Das RFCOMM-Protokoll</title>
<indexterm><primary>RFCOMM</primary></indexterm>
<para>Das RFCOMM-Protokoll emuliert serielle Verbindungen
über das L2CAP-Protokoll. Es basiert auf dem ETSI-Standard
TS 07.10. Bei RFCOMM handelt es sich um ein einfaches
Transportprotokoll, das um Funktionen zur Emulation der
9poligen Schaltkreise von mit RS-232 (EIATIA-232-E) kompatiblen
seriellen Ports ergänzt wurde. RFCOMM erlaubt bis zu 60
simultane Verbindungen (RFCOMM-Kanäe) zwischen zwei
Bluetooth-Geräten.</para>
<para>Eine RFCOMM-Kommunikation besteht aus zwei Anwendungen (den
Kommunikationsendpunkten), die über das
Kommunikationssegment miteinander verbunden sind. RFCOMM
unterstützt Anwendungen, die auf serielle Ports angewiesen
sind. Das Kommunikationssegment entspricht der (direkten)
Bluetooth-Verbindung zwischen den beiden Geräten.</para>
<para>RFCOMM kümmert sich um die direkte Verbindung von zwei
Geräten, oder um die Verbindung zwischen einem Gerät
und einem Modem (Netzwerkverbindung). RFCOMM unterstützt
auch andere Konfigurationen. Ein Beispiel dafür sind
Module, die drahtlose Bluetooth-Geräte mit einer
verkabelten Schnittstelle verbinden können.</para>
<para>Unter &os; wurde das RFCOMM-Protokoll im Bluetooth Socket-Layer
implementiert.</para>
</sect2>
<sect2>
<title>Erstmaliger Verbindungsaufbau zwischen zwei
Bluetooth-Geräten (<foreignphrase>Pairing</foreignphrase>)
</title>
<indexterm><primary>Pairing</primary></indexterm>
<para>In der Voreinstellung nutzt Bluetooth keine
Authentifizierung, daher kann sich jedes Bluetoothgerät mit
jedem anderen Gerät verbinden. Ein Bluetoothgerät
(beispielsweise ein Mobiltelefon) kann jedoch für einen
bestimmten Dienst (etwa eine Einwählverbindung) eine
Authentifizierung anfordern. Bluetooth verwendet zu diesem
Zweck <emphasis>PIN-Codes</emphasis>. Ein PIN-Code ist ein
maximal 16 Zeichen langer ASCII-String. Damit eine Verbindung
zustande kommt, muss auf beiden Geräten der gleiche
PIN-Code verwendet werden. Nachdem der Code eingegeben wurde,
erzeugen beide Geräte einen <emphasis>link key</emphasis>,
der auf den Geräten gespeichert wird. Beim nächsten
Verbindungsaufbau wird der zuvor erzeugte Link Key verwendet.
Diesen Vorgang bezeichnet man als
<foreignphrase>Pairing</foreignphrase>. Geht der Link Key auf
einem Gerät verloren, muss das Pairing wiederholt
werden.</para>
<para>Der &man.hcsecd.8;-Daemon verarbeitet alle
Bluetooth-Authentifzierungsanforderungen und wird über die
Datei <filename>/etc/bluetooth/hcsecd.conf</filename>
konfiguriert. Der folgende Ausschnitt dieser Datei zeigt die
Konfiguration für ein Mobiltelefon, das den PIN-Code
<quote>1234</quote> verwendet:</para>
<programlisting>device {
bdaddr 00:80:37:29:19:a4;
name "Pav's T39";
key nokey;
pin "1234";
}</programlisting>
<para>Von der Länge abgesehen, unterliegen PIN-Codes keinen
Einschränkungen. Einige Geräte, beispielsweise
Bluetooth-Headsets, haben einen festen PIN-Code eingebaut. Die
Option <option>-d</option> sorgt dafür, dass der
&man.hcsecd.8;-Daemon im Vordergrund läuft. Dadurch kann
der Ablauf einfach verfolgt werden. Stellen Sie das entfernte
Gerät auf <foreignphrase>receive pairing</foreignphrase>
und initiieren Sie die Bluetoothverbindung auf dem entfernten
Gerät. Sie erhalten die Meldung, dass Pairing akzeptiert
wurde und der PIN-Code benötigt wird. Geben Sie den
gleichen PIN-Code ein, den Sie in
<filename>hcsecd.conf</filename> festgelegt haben. Ihr Computer
und das entfernte Gerät sind nun miteinander verbunden.
Alternativ können Sie das Pairing auch auf dem entfernten
Gerät initiieren.</para>
<para><application>hcsecd</application> kann durch das Einfügen
der folgenden Zeile in <filename>/etc/rc.conf</filename>
beim Systemstart automatisch aktiviert werden:</para>
<programlisting>hcsecd_enable="YES"</programlisting>
<para>Es folgt nun eine beispielhafte Ausgabe
des <application>hcsecd</application>-Daemons:</para>
<programlisting>hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist
hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists
hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4</programlisting>
</sect2>
<sect2>
<title>Das Service Discovery Protocol (SDP)</title>
<indexterm><primary>SDP</primary></indexterm>
<para>Das <foreignphrase>Service Discovery Protocol</foreignphrase>
(SDP) erlaubt es Clientanwendungen, von Serveranwendungen
angebotene Dienste sowie deren Eigenschaften abzufragen. Zu
diesen Eigenschaften gehören die Art oder die Klasse der
angebotenen Dienste sowie der Mechanismus oder das Protokoll,
die zur Nutzung des Dienstes notwendig sind.</para>
<para>SDP ermöglicht Verbindungen zwischen einem SDP-Server
und einem SDP-Client. Der Server enthält eine Liste mit
den Eigenschaften der vom Server angebotenen Dienste. Jeder
Eintrag beschreibt jeweils einen einzigen Serverdienst. Ein
Client kann diese Informationen durch eine SDP-Anforderung
vom SDP-Server beziehen. Wenn der Client oder eine Anwendung
des Clients einen Dienst nutzen will, muss eine seperate
Verbindung mit dem Dienstanbieter aufgebaut werden. SDP bietet
einen Mechanismus zum Auffinden von Diensten und deren
Eigenschaften an, es bietet aber keine Mechanismen zur Verwendung
dieser Dienste.</para>
<para>Normalerweise sucht ein SDP-Client nur nach Diensten, die
bestimmte geforderte Eigenschaften erfüllen. Es ist aber
auch möglich, anhand der Dienstbeschreibungen eine
allgemeine Suche nach den von einem Server angebotenen Diensten
durchzuführen. Diesen Vorgang bezeichnet man als
<foreignphrase>Browsing</foreignphrase>.</para>
<para>Der Bluetooth-SDP-Server &man.sdpd.8; und der
Kommandozeilenclient &man.sdpcontrol.8; sind bereits in der
Standardinstallation von &os; enthalten. Das folgende Beispiel
zeigt, wie eine SDP-Abfrage durchgeführt wird:</para>
<screen>&prompt.user; <userinput>sdpcontrol -a 00:01:03:fc:6e:ec browse</userinput>
Record Handle: 00000000
Service Class ID List:
Service Discovery Server (0x1000)
Protocol Descriptor List:
L2CAP (0x0100)
Protocol specific parameter #1: u/int/uuid16 1
Protocol specific parameter #2: u/int/uuid16 1
Record Handle: 0x00000001
Service Class ID List:
Browse Group Descriptor (0x1001)
Record Handle: 0x00000002
Service Class ID List:
LAN Access Using PPP (0x1102)
Protocol Descriptor List:
L2CAP (0x0100)
RFCOMM (0x0003)
Protocol specific parameter #1: u/int8/bool 1
Bluetooth Profile Descriptor List:
LAN Access Using PPP (0x1102) ver. 1.0
</screen>
<para>... und so weiter. Beachten Sie, dass jeder Dienst eine
Liste seiner Eigenschaften (etwa den RFCOMM-Kanal)
zurückgibt. Je nach dem, welche Dienste Sie
benötigen, sollten Sie sich einige dieser Eigenschaften
notieren. Einige Bluetooth-Implementationen unterstützen
kein <foreignphrase>Service Browsing</foreignphrase> und geben
daher eine leere Liste zurück. Ist dies der Fall, ist es
dennoch möglich, nach einem bestimmten Dienst zu suchen.
Das folgende Beispiel demonstriert die Suche nach dem
OBEX Object Push (OPUSH) Dienst:</para>
<screen>&prompt.user; <userinput>sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH</userinput></screen>
<para>Unter &os; ist es die Aufgabe des &man.sdpd.8;-Servers,
Bluetooth-Clients verschiedene Dienste anzubieten. Sie
können diesen Server durch das Einfügen der folgenden
Zeile in die Datei <filename>/etc/rc.conf</filename>
aktivieren:</para>
<programlisting>sdpd_enable="YES"</programlisting>
<para>Nun kann der <application>sdpd</application>-Daemon durch
folgene Eingabe gestartet werden:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/sdpd start</userinput></screen>
<para>Der lokale Server, der den entfernten Clients
Bluetooth-Dienste anbieten soll, bindet diese Dienste an den
lokalen SDP-Daemon. Ein Beispiel für eine solche
Anwendung ist &man.rfcomm.pppd.8;. Einmal gestartet, wird der
Bluetooth-LAN-Dienst an den lokalen SDP-Daemon gebunden.</para>
<para>Die Liste der vorhandenen Dienste, die am lokalen SDP-Server
registriert sind, lässt sich durch eine SDP-Abfrage
über einen lokalen Kontrollkanal abfragen:</para>
<screen>&prompt.root; <userinput>sdpcontrol -l browse</userinput></screen>
</sect2>
<sect2>
<title>Einwahlverbindungen (Dial-Up Networking (DUN)) oder
Netzwerkverbindungen mit PPP (LAN)-Profilen einrichten</title>
<para>Das
<foreignphrase>Dial-Up Networking (DUN)</foreignphrase>-Profil
wird vor allem für Modems und Mobiltelefone verwendet.
Dieses Profil ermöglicht folgende Szenarien:</para>
<itemizedlist>
<listitem><para>Die Verwendung eines Mobiltelefons oder eines
Modems durch einen Computer als drahtloses Modem, um sich
über einen Einwahlprovider mit dem Internet zu verbinden
oder andere Einwahldienste zu benutzen.</para>
</listitem>
<listitem><para>Die Verwendung eines Mobiltelefons oder eines
Modems durch einen Computers, um auf Datenabfragen zu
reagieren.</para>
</listitem>
</itemizedlist>
<para>Der Zugriff auf ein Netzwerk über das PPP (LAN)-Profil
kann in folgenden Situationen verwendet werden:</para>
<itemizedlist>
<listitem><para>Den LAN-Zugriff für ein einzelnes
Bluetooth-Gerät</para>
</listitem>
<listitem><para>Den LAN-Zugriff für mehrere
Bluetooth-Geräte</para>
</listitem>
<listitem><para>Eine PC-zu-PC-Verbindung (unter Verwendung
einer PPP-Verbindung über eine emulierte serielle
Verbindung)</para>
</listitem>
</itemizedlist>
<para>Beide Profile werden unter &os; durch &man.ppp.8; sowie
&man.rfcomm.pppd.8; implementiert - einem Wrapper, der
RFCOMM Bluetooth-Verbindungen unter PPP nutzbar macht. Bevor
ein Profil verwendet werden kann, muss ein neuer PPP-Abschnitt
in <filename>/etc/ppp/ppp.conf</filename> erzeugt werden.
Beispielkonfigurationen zu diesem Thema finden Sie in
&man.rfcomm.pppd.8;.</para>
<para>Im folgenden Beispiel verwenden wir &man.rfcomm.pppd.8;, um
eine RFCOMM-Verbindung zu einem entfernten Gerät mit der
<literal>BD_ADDR 00:80:37:29:19:a4</literal> auf dem
RFCOMM-Kanal <literal>DUN</literal> aufzubauen. Die aktuelle
RFCOMM-Kanalnummer erhalten Sie vom entfernten Gerät
über SDP. Es ist auch möglich, manuell einen
RFCOMM-Kanal festzulegen. In diesem Fall führt
&man.rfcomm.pppd.8; keine SDP-Abfrage durch. Verwenden Sie
&man.sdpcontrol.8;, um die RFCOMM-Kanäle des entfernten
Geräts herauszufinden.</para>
<screen>&prompt.root; <userinput>rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup</userinput></screen>
<para>Der &man.sdpd.8;-Server muss laufen, damit ein Netzzugriff
mit dem PPP (LAN)-Profil möglich ist. Außerdem muss
für den LAN-Client ein neuer Eintrag in
<filename>/etc/ppp/ppp.conf</filename> erzeugt werden.
Beispielkonfigurationen zu diesem Thema finden Sie in
&man.rfcomm.pppd.8;. Danach starten Sie den RFCOMM PPP-Server
über eine gültige RFCOMM-Kanalnummer. Der
RFCOMM PPP-Server bindet dadurch den Bluetooth-LAN-Dienst an den
lokalen SDP-Daemon. Das folgende Beispiel zeigt Ihnen, wie man
den RFCOMM PPP-Server startet.</para>
<screen>&prompt.root; <userinput>rfcomm_pppd -s -C 7 -l rfcomm-server</userinput></screen>
</sect2>
<sect2>
<title>Das Profil OBEX-Push (OPUSH)</title>
<indexterm><primary>OBEX</primary></indexterm>
<para>OBEX ist ein häufig verwendetes Protokoll für den
Dateitransfer zwischen Mobilgeräten. Sein Hauptzweck ist
die Kommunikation über die Infrarotschnittstelle. Es dient
daher zum Datentransfer zwischen Notebooks oder PDAs sowie zum
Austausch von Visitenkarten oder Kalendereinträgen zwischen
Mobiltelefonen und anderen Geräten mit PIM-Funktionen.</para>
<para>Server und Client von OBEX werden durch das Softwarepaket
<application>obexapp</application> bereitgestellt, das als Port
<filename role="package">comms/obexapp</filename> verfügbar
ist.</para>
<para>Mit dem OBEX-Client werden Objekte zum OBEX-Server geschickt
oder angefordert. Ein Objekt kann etwa eine Visitenkarte oder
ein Termin sein. Der OBEX-Client fordert über SDP die
Nummer des RFCOMM-Kanals vom entfernten Gerät an. Dies
kann auch durch die Verwendung des Servicenamens anstelle der
RFCOMM-Kanalnummer erfolgen. Folgende Dienste werden
unterstützt: IrMC, FTRN und OPUSH. Es ist möglich,
den RFCOMM-Kanal als Nummer anzugeben. Es folgt nun ein
Beispiel für eine OBEX-Sitzung, bei der ein
Informationsobjekt vom Mobiltelefon angefordert und ein neues
Objekt (hier eine Visitenkarte) an das Telefonbuch des
Mobiltelefons geschickt wird:</para>
<screen>&prompt.user; <userinput>obexapp -a 00:80:37:29:19:a4 -C IrMC</userinput>
obex&gt; get telecom/devinfo.txt
Success, response: OK, Success (0x20)
obex&gt; put new.vcf
Success, response: OK, Success (0x20)
obex&gt; di
Success, response: OK, Success (0x20)</screen>
<para>Um OBEX-Push-Dienste anbieten zu können, muss der
<application>sdpd</application>-Server gestartet sein. Ein
Wurzelverzeichnis, in dem alle ankommenden Objekt gespeichert
werden, muss zusätzlich angelegt werden. In der
Voreinstellung ist dies <filename>/var/spool/obex</filename>.
Starten Sie den OBEX-Server mit einer gültigen Kanalnummer.
Der OBEX-Server registriert nun den OBEX-Push-Dienst mit dem
lokalen SDP-Daemon. Um den OBEX-Server zu starten, geben Sie
Folgendes ein:</para>
<screen>&prompt.root; <userinput>obexapp -s -C 10</userinput></screen>
</sect2>
<sect2>
<title>Das Profil Serial-Port (SPP)</title>
<para>Durch dieses Profil können Bluetooth-Geräte RS232-
(oder damit kompatible) serielle Kabelverbindungen emulieren.
Anwendungen sind dadurch in der Lage, über eine virtuelle
serielle Verbindung Bluetooth als Ersatz für eine
Kabelverbindung zu nutzen.</para>
<para>Das Profil Serial-Port wird durch &man.rfcomm.sppd.1;
verwirklicht. Pseudo-tty wird hier als virtuelle serielle
Verbindung verwendet. Das folgende Beispiel zeigt, wie man sich
mit einem entfernten Serial-Port-Dienst verbindet. Beachten
Sie, dass Sie den RFCOMM-Kanal nicht angeben müssen, da
&man.rfcomm.sppd.1; diesen über SDP vom entfernten
Gerät abfragen kann. Wenn Sie dies nicht wollen,
können Sie einen RFCOMM-Kanal auch manuell festlegen.</para>
<screen>&prompt.root; <userinput>rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6</userinput>
rfcomm_sppd[94692]: Starting on /dev/ttyp6...</screen>
<para>Sobald die Verbindung hergestellt ist, kann pseudo-tty als
serieller Port verwenden werden.</para>
<screen>&prompt.root; <userinput>cu -l ttyp6</userinput></screen>
</sect2>
<sect2>
<title>Problembehandlung</title>
<sect3>
<title>Ein entferntes Gerät kann keine Verbindung
aufbauen</title>
<para>Einige ältere Bluetooth-Geräte unterstützen
keinen Rollentausch. Wenn &os; eine neue Verbindung
akzeptiert, wird versucht, die Rolle zu tauschen, um zum
Master zu werden. Geräte, die dies nicht
unterstützen, können keine Verbindung aufbauen.
Beachten Sie, dass der Rollentausch ausgeführt wird,
sobald eine neue Verbindung aufgebaut wird, daher ist es
nicht möglich, das entfernte Gerät zu fragen, ob es
den Rollentausch unterstützt. Dieses Verhalten von &os;
kann aber durch eine HCI-Option geändert werden:</para>
<screen>&prompt.root; <userinput>hccontrol -n ubt0hci write_node_role_switch 0</userinput></screen>
</sect3>
<sect3>
<title>Wo finde ich genaue Informationen darüber, was
schiefgelaufen ist?</title>
<para>Verwenden Sie <application>hcidump</application>,
das Sie über den Port <filename
role="package">comms/hcidump</filename> installieren
können. <application>hcidump</application> hat
Ähnlichkeiten mit &man.tcpdump.1;. Es dient zur Anzeige
der Bluetooth-Pakete in einem Terminal oder zur Speicherung
der Pakete in einer Datei (Dump).</para>
</sect3>
</sect2>
</sect1>
<sect1 id="network-bridging">
<sect1info>
<authorgroup>
<author>
<firstname>Andrew</firstname>
<surname>Thompson</surname>
<contrib>Geschrieben von </contrib>
</author>
</authorgroup>
</sect1info>
<title>LAN-Kopplung mit einer Bridge</title>
<sect2>
<title>Einführung</title>
<indexterm><primary>Subnetz</primary></indexterm>
<indexterm><primary>Bridge</primary></indexterm>
<para>Manchmal ist es nützlich, ein physikalisches Netzwerk
(wie ein Ethernetsegment) in zwei separate Netzwerke
aufzuteilen, ohne gleich IP-Subnetze zu erzeugen, die über
einen Router miteinander verbunden sind. Ein Gerät, das
zwei Netze auf diese Weise verbindet, wird als
<emphasis>Bridge</emphasis> bezeichnet. Jedes FreeBSD-System
mit zwei Netzwerkkarten kann als Bridge fungieren.</para>
<para>Die Bridge arbeitet, indem sie die MAC Layeradressen
(Ethernet Adressen) der Geräte in ihren
Netzwerksegmenten lernt. Der Verkehr wird nur dann zwischen
zwei Segmenten weitergeleitet, wenn sich Sender und
Empfänger in verschiedenen Netzwerksegmenten
befinden.</para>
<para>In vielerlei Hinsicht entspricht eine Bridge daher einem
Ethernet-Switch mit sehr wenigen Ports.</para>
</sect2>
<sect2>
<title>Situationen, in denen <emphasis>Bridging</emphasis>
angebracht ist</title>
<para>Es gibt zahlreiche Situationen, in denen der Einsatz
einer Bridge sinnvoll ist:</para>
<sect3>
<title>Verbinden von Netzwerken</title>
<para>Die Hauptaufgabe einer Bridge ist die Verbindung von zwei
oder mehreren Netzwerksegmenten zu einem gemeinsamen Netzwerk.
Es ist oft sinnvoller, eine hostbasierte Bridge anstelle
normaler Netzwerkkomponenten (wie Kabelverbindungen),
Firewalls oder Pseudonetzwerken über die
Schnittstelle einer virtuellen Maschine einzusetzen.
Eine Bridge kann außerdem ein drahtloses Gerät mit
einem Kabelnetzwerk verbinden. Diese Fähigkeit der
Bridge wird als <foreignphrase>HostAP-Modus</foreignphrase>
bezeichnet. Die Bridge agiert in diesem Fall als
Access Point für das drahtlose Gerät.</para>
</sect3>
<sect3>
<title>Filtering/Traffic Shaping Firewall</title>
<indexterm><primary>Firewall</primary></indexterm>
<indexterm><primary>NAT</primary></indexterm>
<para>Häufig kommt es vor, dass Firewallfunktionen
benötigt werden, ohne dass Routing oder
<foreignphrase>Network Adress Translation</foreignphrase>
(NAT) verwendet werden soll.</para>
<para>Ein Beispiel dafür wäre ein kleines Unternehmen,
das über DSL oder ISDN an seinen ISP angebunden ist. Es
verfügt über 13 weltweit erreichbare IP-Adressen,
sein Netzwerk besteht aus 10 Rechnern. In dieser Situation
ist der Einsatz von Subnetzen sowie einer routerbasierten
Firewall schwierig.</para>
<indexterm><primary>Router</primary></indexterm>
<indexterm><primary>DSL</primary></indexterm>
<indexterm><primary>ISDN</primary></indexterm>
<para>Eine brigdebasierte Firewall kann konfiguriert und in den
ISDN/DSL-Downstreampfad ihres Routers eingebunden werden, ohne
dass Sie sich um IP-Adressen kümmern müssen.</para>
</sect3>
<sect3>
<title>Netzwerküberwachung</title>
<para>Eine Bridge kann zwei Netzwerksegmente miteinander
verbinden und danach alle Ethernet-Rahmen überprüfen,
die zwischen den beiden Netzwerksegmenten ausgetauscht werden.
Dazu verwendet man entweder &man.bpf.4;/&man.tcpdump.1; auf
dem Netzgerät der Bridge oder schickt Kopien aller
Rahmen an ein zusätzliches Netzgerät (den sogenannten
<foreignphrase>Span Port</foreignphrase>).</para>
</sect3>
<sect3>
<title>Layer&nbsp;2-VPN</title>
<para>Zwei Ethernetnetzwerke können über einen IP-Link
miteinander verbunden werden, indem Sie die beiden Netzwerke
über einen EtherIP-Tunnel koppeln oder eine
&man.tap.4;-basierte Lösung wie OpenVPN einsetzen.</para>
</sect3>
<sect3>
<title>Layer&nbsp;2-Redundanz</title>
<para>Die Systeme eines Netzwerks können redundant
miteinander verbunden sein. In diesem Fall verwenden Sie das
<foreignphrase>Spanning Tree Protocol</foreignphrase>, um
redundante Pfade zu blockieren. Damit ein Ethernetnetzwerk
korrekt arbeitet, darf immer nur ein aktiver Pfad zwischen
zwei Geräten des Netzwerks existieren. Aufgabe des
Spanning Tree Protocols ist es daher, Schleifen zu entdecken
und redundante Links in den Status
<emphasis>blockiert</emphasis> zu versetzen. Fällt ein
aktiver Link aus, so berechnet das Protokoll einen neuen
Pfad. Dazu wird ein blockierter Pfad in den Status
<emphasis>aktiv</emphasis> versetzt, damit alle Systeme des
Netzwerks wieder miteinander kommunizieren können.</para>
</sect3>
</sect2>
<sect2>
<title>Kernelkonfiguration</title>
<para>Dieser Abschnitt beschreibt nur die
&man.if.bridge.4;-Bridge-Implementierung. Ein
Netgraph-Bridge-Treiber ist ebenfalls verfügbar, wird
hier aber nicht behandelt. Lesen Sie die Manualpage
&man.ng.bridge.4;, wenn Sie diesen Treiber einsetzen
wollen.</para>
<para>Bei diesem Treiber handelt es sich um ein
Kernelmodul, das von &man.ifconfig.8; automatisch geladen
wird, wenn ein Bridge-Interface erzeugt wird. Alternativ ist
es aber auch möglich, die Unterstützung für
den Treiber in Ihren Kernel zu kompilieren. Dazu fügen
Sie die Zeile <literal>device if_bridge</literal> in Ihre
Kernelkonfigurationsdatei ein und bauen danach den Kernel
neu.</para>
<para>Paketfilter können mit allen Firewallpaketen verwendet
werden, die das &man.pfil.9;-Framework benutzen. Die Firewall
kann dabei entweder als Kernelmodul geladen oder in den Kernel
kompiliert werden.</para>
<para>Eine Bridge kann auch als <foreignphrase>Traffic
Shaper</foreignphrase> verwendet werden, wenn Sie
&man.altq.4; oder &man.dummynet.4; einsetzen.</para>
</sect2>
<sect2>
<title>Die LAN-Kopplung aktivieren</title>
<para>Eine Bridge wird durch das Klonen von Schnittstellen
erzeugt. Um eine Bridge zu erzeugen, verwenden Sie den Befehl
&man.ifconfig.8;. Ist der Bridge-Treiber nicht in Ihren Kernel
kompiliert, wird er automatisch geladen.</para>
<screen>&prompt.root; <userinput>ifconfig bridge create</userinput>
bridge0
&prompt.root; <userinput>ifconfig bridge0</userinput>
bridge0: flags=8802&lt;BROADCAST,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
ether 96:3d:4b:f1:79:7a
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0</screen>
<para>Im obigen Beispiel wird die Bridge erzeugt und erhält
automatisch eine zufällig generierte Ethernet-Adresse
zugewiesen. Die Parameter <literal>maxaddr</literal> sowie
<literal>timeout</literal> legen fest, wie viele MAC-Adressen
die Bridge in ihrer Forward-Tabelle halten kann beziehungsweise
wie viele Sekunden jeder Eintrag erhalten bleiben soll, nachdem
er zuletzt verwendet wurde. Die restlichen Parameter sind
für die Konfiguration von Spanning&nbsp;Tree notwendig.</para>
<para>Im nächsten Schritt werden die Schnittstellen, die
die Bridge verbinden soll, zugewiesen. Damit die Bridge
Datenpakete weiterleiten kann, müssen sowohl die Bridge
als auch die Schnittstellen (der zu verbindenden
Netzwerksegmente) aktiviert sein:</para>
<screen>&prompt.root; <userinput>ifconfig bridge0 addm fxp0 addm fxp1 up</userinput>
&prompt.root; <userinput>ifconfig fxp0 up</userinput>
&prompt.root; <userinput>ifconfig fxp1 up</userinput></screen>
<para>Danach ist die Bridge in der Lage, Ethernet-Rahmen zwischen
den Schnittstellen <devicename>fxp0</devicename> und
<devicename>fxp1</devicename> weiterzuleiten. Um diese
Konfiguration beim Systemstart automatisch zu aktivieren,
müssen Sie folgende Einträge in die Datei
<filename>/etc/rc.conf</filename> aufnehmen:</para>
<programlisting>cloned_interfaces="bridge0"
ifconfig_bridge0="addm fxp0 addm fxp1 up"
ifconfig_fxp0="up"
ifconfig_fxp1="up"</programlisting>
<para>Benötigen Sie für die Bridge eine IP-Adresse,
müssen Sie diese der Schnittstelle der Bridge zuweisen
(und nicht einer der Schnittstellen der gekoppelten
Netzwerksegmente). Dabei können Sie die IP-Adresse
sowohl statisch als auch dynamisch über DHCP
zuweisen:</para>
<screen>&prompt.root; <userinput>ifconfig bridge0 inet 192.168.0.1/24</userinput></screen>
<para>Sie können der Bridge-Schnittstelle auch eine
IPv6-Adresse zuweisen.</para>
</sect2>
<sect2>
<title>Firewalls</title>
<indexterm><primary>firewall</primary></indexterm>
<para>Nachdem ein Paketfilter aktiviert wurde, können
Datenpakete, die von den Schnittstellen der gekoppelten
Netzwerksegmente gesendet und empfangen werden, über
die Bridge weitergeleitet oder nach bestimmten Regeln
gefiltert oder auch komplett geblockt werden. Ist die
Richtung des Paketflusses wichtig, ist es am besten, eine
Firewall auf den Schnittstellen der einzelnen
Netzwerksegmente einzurichten und nicht auf der Bridge
selbst.</para>
<para>Eine Bridge verfügt über verschiedene Optionen,
über die Sie die Weiterleitung von Nicht-IP- und
ARP-Paketen sowie den Einsatz von Layer&nbsp;2-Firewalls
(mit IPFW) steuern können. Lesen Sie die Manualpage
&man.if.bridge.4;, wenn Sie diese Funktionen
benötigen.</para>
</sect2>
<sect2>
<title>Spanning&nbsp;Tree</title>
<para>Der Bridge-Treiber implementiert das <foreignphrase>Rapid
Spanning Tree Protocol</foreignphrase> (RSTP oder 802.1w), das
abwärtskompatibel zum veralteten <foreignphrase>Spanning
Tree Protocol</foreignphrase> (STP) ist. Spanning&nbsp;Tree
dient dazu, Schleifen in einer Netzwerktopologie zu entdecken
und zu entfernen. RSTP arbeitet dabei schneller als das
veraltete STP. RSTP tauscht Informationen mit
benachbarten Switchen aus, um Pakete korrekt weiterzuleiten
und eine Schleifenbildung zu verhindern.</para>
<para>&os; unterstützt die Betriebsmode RSTP sowie STP,
von denen RSTP als Standardmodus voreingestellt ist.</para>
<para>Spanning&nbsp;Tree kann auf den Schnittstellen der
durch die Bridge verbundenen Netzwerksegmente über die
Option <literal>stp</literal> aktiviert werden. Für eine
Bridge, die die Schnittstellen <devicename>fxp0</devicename> und
<devicename>fxp1</devicename> verbindet, aktivieren Sie STP wie
folgt:</para>
<screen>&prompt.root; <userinput>ifconfig bridge0 stp fxp0 stp fxp1</userinput>
bridge0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
ether d6:cf:d5:a0:94:6d
id 00:01:02:4b:d4:50 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
root id 00:01:02:4b:d4:50 priority 32768 ifcost 0 port 0
member: fxp0 flags=1c7&lt;LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP&gt;
port 3 priority 128 path cost 200000 proto rstp
role designated state forwarding
member: fxp1 flags=1c7&lt;LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP&gt;
port 4 priority 128 path cost 200000 proto rstp
role designated state forwarding</screen>
<para>Diese Bridge hat die Spanning-Tree-ID
<literal>00:01:02:4b:d4:50</literal> und die Priorität
<literal>32768</literal>. Da diese ID mit der
<literal>Root-ID</literal> identisch ist, handelt es sich um die
Root-Bridge dieses Netzwerks.</para>
<para>Auf einer anderen Bridge des Netzwerks ist Spanning&nbsp;Tree
ebenfalls aktiviert:</para>
<screen>bridge0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
ether 96:3d:4b:f1:79:7a
id 00:13:d4:9a:06:7a priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4
member: fxp0 flags=1c7&lt;LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP&gt;
port 4 priority 128 path cost 200000 proto rstp
role root state forwarding
member: fxp1 flags=1c7&lt;LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP&gt;
port 5 priority 128 path cost 200000 proto rstp
role designated state forwarding</screen>
<para>Die Zeile <literal>root id 00:01:02:4b:d4:50 priority 32768
ifcost 400000 port 4</literal> zeigt an, dass die Root-Bridge wie
im obigen Beispiel die ID <literal>00:01:02:4b:d4:50</literal>
hat. Die Pfadkosten hin zur Root-Bridge betragen
<literal>400000</literal>, wobei der Pfad zur Root-Bridge
über <literal>Port&nbsp;4</literal> geht (der wiederum
der Schnittstelle <devicename>fxp0</devicename>
entspricht).</para>
</sect2>
<sect2>
<title>Fortgeschrittene Funktionen</title>
<sect3>
<title>Den Datenfluss rekonstruieren</title>
<para>Die Bridge unterstützt den Monitormodus. Dabei
werden alle Pakete verworfen, nachdem sie von &man.bpf.4;
verarbeitet wurden. In diesem Modus erfolgt keine weitere
Bearbeitung und auch keine Weiterleitung von Datenpaketen.
Es ist daher möglich, die Eingabe von zwei oder mehr
Netzwerkschnittstellen in einen einzigen gemeinsamen
&man.bpf.4;-Stream zu vereinen. Ein solcher Datenstrom
ist beispielsweise nützlich, um den Datenverkehr für
""network taps"" zu rekonstruieren, die ihre RX/TX-Signale
über verschiedene Schnittstellen senden.</para>
<para>Um die Eingabe von vier Netzwerkschnittstellen in einzigen
gemeinsamen Datenstrom zu vereinen, geben Sie Folgendes
ein:</para>
<screen>&prompt.root; <userinput>ifconfig bridge0 addm fxp0 addm fxp1 addm fxp2 addm fxp3 monitor up</userinput>
&prompt.root; <userinput>tcpdump -i bridge0</userinput></screen>
</sect3>
<sect3>
<title>Span Ports</title>
<para>Eine Kopie jedes Ethernet-Rahmens, der an der Bridge
ankommt, wird über einen festgelegten
<foreignphrase>Span&nbsp;Port</foreignphrase> verschickt.
Auf einer Bridge können
beliebig viele Span&nbsp;Ports festgelegt werden. Wird
eine Schnittstelle als Span&nbsp;Port konfiguriert, kann
sie nicht mehr als normaler Bridge-Port verwendet werden.
Eine derartige Konfiguration ist beispielsweise sinnvoll,
um den Datenverkehr, der in einem Netzwerk über die
Bridge läuft, auf einen Rechner zu übertragen,
der mit einem Span&nbsp;Port der Bridge verbunden
ist.</para>
<para>Um eine Kopie aller Ethernet-Rahmen über die
Schnittstelle <devicename>fxp4</devicename> zu verschicken,
geben Sie Folgendes ein:</para>
<screen>&prompt.root; <userinput>ifconfig bridge0 span fxp4</userinput></screen>
</sect3>
<sect3>
<title>Private Schnittstellen</title>
<para>Eine private Schnittstelle leitet keine Daten an einen
Port weiter, bei dem es sich ebenfalls um eine private
Schnittstelle handelt. Der Datenverkehr wird dabei komplett
blockiert, auch Ethernet-Rahmen und ARP-Pakete werden nicht
weitergeleitet. Wollen Sie hingegen nur spezifische
Datenpakete blockieren, sollten Sie eine Firewall
einsetzen.</para>
</sect3>
<sect3>
<title>Schnittstellen als <foreignphrase>sticky</foreignphrase>
kennzeichnen</title>
<para>Wenn die Schnittstelle eines über eine Bridge
verbundenen Netzwerksegments als
<foreignphrase>sticky</foreignphrase> gekennzeichnet wird,
werden alle dynamisch gelernten Adressen als statische Adressen
behandelt, sobald sie in den Forward-Cache der Bridge
aufgenommen wurden. Sticky-Einträge werden niemals aus
dem Cache entfernt oder ersetzt. Selbst dann nicht, wenn die
Adresse von einer anderen Schnittstelle verwendet wird. Sie
können dadurch die Vorteile statischer Adresseinträge
nutzen, ohne die Forward-Tabelle vor dem Einsatz der Bridge
mit statischen Einträgen füllen zu müssen.
Clients, die sich in einem bestimmten von der Bridge
verwalteten Segmente befinden, können dabei nicht in ein
anderes Segment wechseln.</para>
<para>Ein weiteres Beispiel für den Einsatz von
Sticky-Adressen wäre die Kombination einer Bridge mit
mehreren VLANs, um einen Router zu konfigurieren, der in
in der Lage ist, einzelne Kundennetzwerke voneinander zu
trennen, ohne IP-Adressbereiche zu verschwenden. Für das
folgende Beispiel nehmen wir an, dass sich der Client
<hostid role="hostname">CustomerA</hostid> im VLAN
<literal>vlan100</literal> und der Client
<hostid role="hostname">CustomerB</hostid> im VLAN
<literal>vlan101</literal> befinden. Die Bridge hat die
IP-Adresse <hostid role="ipaddr">192.168.0.1</hostid> und ist
als Internet-Router konfiguriert.</para>
<screen>&prompt.root; <userinput>ifconfig bridge0 addm vlan100 sticky vlan100 addm vlan101 sticky vlan101</userinput>
&prompt.root; <userinput>ifconfig bridge0 inet 192.168.0.1/24</userinput></screen>
<para>Beide Clients sehen <hostid
role="ipaddr">192.168.0.1</hostid> als Ihr Default-Gateway.
Da der Brücken-Cache <emphasis>sticky</emphasis> ist,
sind Sie nicht dazu in der Lage, die MAC-Adresse des
anderen Kunden zu spoofen und dessen Datenverkehr
abzufangen.</para>
<para>Sie können die Kommunikation zwischen den VLANs
vollständig unterbinden, wenn Sie private Schnittstellen
(oder eine Firewall) einsetzen:</para>
<screen>&prompt.root; <userinput>ifconfig bridge0 private vlan100 private vlan101</userinput></screen>
<para>Die Kunden sind nun komplett voneinander isoliert und
der komplette <hostid role="netmask">/24</hostid>-Adressbereich
kann zugewiesen werden, ohne dass Sie Subnetze einsetzen
müssen.</para>
</sect3>
<sect3>
<title>Adressen-Limitierung</title>
<para>Die maximale mögliche Anzahl an eindeutigen
MAC-Adressen hinter einer Schnittstelle kann festgelegt werden.
Sobald das Limit erreicht ist, werden Pakete mit einer
unbekannten Quell-Adresse solange verworfen, bis ein
exisitierender Eintrag gelöscht wird oder
abläuft.</para>
<para>Das folgende Beispiel setzt die maximale Anzahl von
Netzgeräten für
<hostid role="hostname">CustomerA</hostid> für
das VLAN <literal>vlan100</literal> auf 10.</para>
<screen>&prompt.root; <userinput>ifconfig bridge0 ifmaxaddr vlan100 10</userinput></screen>
</sect3>
<sect3>
<title>SNMP-Monitoring</title>
<para>Die Schnittstelle der Bridge sowie die STP-Parameter
können durch den bereits im Basissystem enthaltenen
SNMP-Daemon überwacht werden. Die exportierten
Bridge-MIBs entsprechen den IETF-Standards, daher können
Sie einen beliebigen SNMP-Client oder ein beliebiges
Monitoring-Werkzeug einsetzen, um die benötigten Daten
zu erhalten.</para>
<para>Auf dem Rechner, auf dem die Bridge konfiguriert ist,
aktivieren Sie die Zeile
<literal>begemotSnmpdModulePath."bridge" = "/usr/lib/snmp_bridge.so"</literal>
in der Datei <filename>/etc/snmp.config</filename> und starten
danach den <application>bsnmpd</application>-Daemon.
Eventuell benötigen Sie noch weitere
Konfigurationsparameter wie Community-Namen und
Zugriffslisten. Die Konfiguration dieser Parameter wird
in den Manualpages &man.bsnmpd.1; sowie &man.snmp.bridge.3;
beschrieben.</para>
<para>Die folgenden Beispiele verwenden das Softwarepaket
<application>Net-SNMP</application> (<filename
role="package">net-mgmt/net-snmp</filename>), um die Bridge
abzufragen. Alternativ können Sie dafür auch den
Port <filename role="package">net-mgmt/bsnmptools</filename>
einsetzen. Auf dem SNMP-Client fügen Sie danach die
folgenden Zeilen in die Datei
<filename>$HOME/.snmp/snmp.conf</filename> ein, um die
MIB-Definitionen der Bridge in
<application>Net-SNMP</application> zu importieren:</para>
<programlisting>mibdirs +/usr/share/snmp/mibs
mibs +BRIDGE-MIB:RSTP-MIB:BEGEMOT-MIB:BEGEMOT-BRIDGE-MIB</programlisting>
<para>Um eine einzelne Bridge über den IETF BRIDGE-MIB
(RFC4188) zu überwachen, geben Sie Folgendes ein:</para>
<screen>&prompt.user; <userinput>snmpwalk -v 2c -c public bridge1.example.com mib-2.dot1dBridge</userinput>
BRIDGE-MIB::dot1dBaseBridgeAddress.0 = STRING: 66:fb:9b:6e:5c:44
BRIDGE-MIB::dot1dBaseNumPorts.0 = INTEGER: 1 ports
BRIDGE-MIB::dot1dStpTimeSinceTopologyChange.0 = Timeticks: (189959) 0:31:39.59 centi-seconds
BRIDGE-MIB::dot1dStpTopChanges.0 = Counter32: 2
BRIDGE-MIB::dot1dStpDesignatedRoot.0 = Hex-STRING: 80 00 00 01 02 4B D4 50
...
BRIDGE-MIB::dot1dStpPortState.3 = INTEGER: forwarding(5)
BRIDGE-MIB::dot1dStpPortEnable.3 = INTEGER: enabled(1)
BRIDGE-MIB::dot1dStpPortPathCost.3 = INTEGER: 200000
BRIDGE-MIB::dot1dStpPortDesignatedRoot.3 = Hex-STRING: 80 00 00 01 02 4B D4 50
BRIDGE-MIB::dot1dStpPortDesignatedCost.3 = INTEGER: 0
BRIDGE-MIB::dot1dStpPortDesignatedBridge.3 = Hex-STRING: 80 00 00 01 02 4B D4 50
BRIDGE-MIB::dot1dStpPortDesignatedPort.3 = Hex-STRING: 03 80
BRIDGE-MIB::dot1dStpPortForwardTransitions.3 = Counter32: 1
RSTP-MIB::dot1dStpVersion.0 = INTEGER: rstp(2)</screen>
<para>Der Wert der Variable
<literal>dot1dStpTopChanges.0</literal> ist hier 2, die
STP-Topologie der Bridge wurde also bereits zweimal
geändert. Unter einer Änderung versteht man dabei
die Anpassung eines oder mehrerer Links und die Kalkulation
eines neuen Baums. Der Wert der Variable
<literal>dot1dStpTimeSinceTopologyChange.0</literal> gibt an,
wann dies zuletzt geschah.</para>
<para>Um mehrere Bridge-Schnittstellen zu überwachen,
können Sie den privaten BEGEMOT-BRIDGE-MIB
einsetzen:</para>
<screen>&prompt.user; <userinput>snmpwalk -v 2c -c public bridge1.example.com</userinput>
enterprises.fokus.begemot.begemotBridge
BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName."bridge0" = STRING: bridge0
BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName."bridge2" = STRING: bridge2
BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress."bridge0" = STRING: e:ce:3b:5a:9e:13
BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress."bridge2" = STRING: 12:5e:4d:74:d:fc
BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts."bridge0" = INTEGER: 1
BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts."bridge2" = INTEGER: 1
...
BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange."bridge0" = Timeticks: (116927) 0:19:29.27 centi-seconds
BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange."bridge2" = Timeticks: (82773) 0:13:47.73 centi-seconds
BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges."bridge0" = Counter32: 1
BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges."bridge2" = Counter32: 1
BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot."bridge0" = Hex-STRING: 80 00 00 40 95 30 5E 31
BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot."bridge2" = Hex-STRING: 80 00 00 50 8B B8 C6 A9</screen>
<para>Um die über den
<literal>mib-2.dot1dBridge</literal>-Subtree überwachte
Bridge-Schnittstelle zu ändern, geben Sie Folgendes
ein:</para>
<screen>&prompt.user; <userinput>snmpset -v 2c -c private bridge1.example.com</userinput>
BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2</screen>
</sect3>
</sect2>
</sect1>
<sect1 id="network-aggregation">
<sect1info>
<authorgroup>
<author>
<firstname>Andrew</firstname>
<surname>Thompson</surname>
<contrib>Geschrieben von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Benedict</firstname>
<surname>Reuschling</surname>
<contrib>Übersetzt von </contrib>
</author>
<author>
<firstname>Sharon</firstname>
<surname>Bahagi</surname>
</author>
</authorgroup>
</sect1info>
<title>Link-Aggregation und Failover</title>
<indexterm><primary>lagg</primary></indexterm>
<indexterm><primary>failover</primary></indexterm>
<indexterm><primary>fec</primary></indexterm>
<indexterm><primary>lacp</primary></indexterm>
<indexterm><primary>loadbalance</primary></indexterm>
<indexterm><primary>roundrobin</primary></indexterm>
<sect2>
<title>Einleitung</title>
<para>Die &man.lagg.4;-Schnittstelle erlaubt die Aggregation von
mehreren Netzwerkadaptern als eine virtuelle Schnittstelle mit dem
Ziel, Ausfallsicherheit (Failover) und Hochgeschwindigkeitsverbindungen
bereitzustellen.</para>
</sect2>
<sect2>
<title>Anwendungsoptionen</title>
<variablelist>
<varlistentry><term>Ausfallsicherheit (Failover)</term>
<listitem>
<para>Sendet und empfängt Netzwerkverkehr nur auf dem
Masterport. Sollte der Masterport nicht zur Verfügung stehen,
wird der nächste aktive Port verwendet. Der zuerst
hinzugefügte Adapter wird zum Masterport, jeder weitere Adapter
dient als Gerät zur Ausfallsicherheit.</para>
</listitem>
</varlistentry>
<varlistentry><term>&cisco; Fast &etherchannel;</term>
<listitem>
<para>&cisco; Fast &etherchannel; (FEC), ist eine statische
Konfiguration und handelt weder Aggregation mit der Gegenstelle aus,
noch werden Frames zur Überwachung der Verbindung ausgetauscht.
Wenn der Switch LACP unterstützt, sollte diese Option auch
verwendet werden.</para>
<para><acronym>FEC</acronym> balanciert den ausgehenden Verkehr
über die aktiven Ports, basierend auf gehashten
Protokollheaderinformationen und akzeptiert eingehenden Verkehr auf
jedem aktiven Port. Der Hash enthält die Ethernet-Quell- und
Zieladresse, und, falls verfügbar, den VLAN-Tag, sowie die
IPv4/IPv6 Quell- und Zieladresse.</para>
</listitem>
</varlistentry>
<varlistentry><term>LACP</term>
<listitem>
<para>Das &ieee; 802.3ad Link-Aggregation Control Protokoll
(LACP) und das Marker Protocol. LACP wird eine Menge von
aggregierbaren Verbindungen mit der Gegenstelle in einer oder
mehreren Link Aggregated Groups (LAG) aushandeln. Jede LAG besteht
aus Ports der gleichen Geschwindigkeit, eingestellt auf
Voll-Duplex-Betrieb. Der Verkehr wird über die Ports
in der LAG mit der größten Gesamtgeschwindigkeit
balanciert, in den meisten Fällen wird es nur eine LAG geben,
die alle Ports enthält. Im Falle von Änderungen in der
physischen Anbindung wird die Link-Aggregation schnell zu einer
neuen Konfiguration konvergieren.</para>
<para><acronym>LACP</acronym> balanciert ausgehenden Verkehr
über die aktiven Ports basierend auf der gehashten
Protokollheaderinformation und akzeptiert eingehenden Verkehr auf
jedem aktiven Port. Der Hash beinhaltet die Ethernet-Quell- und
Zieladresse, und, soweit verfügbar, den VLAN-Tag, sowie die
IPv4/IPv6 Quell- und Zieladresse.</para>
</listitem>
</varlistentry>
<varlistentry><term>Lastverteilung (Loadbalance)</term>
<listitem>
<para>Dabei handelt es sich um einen Alias des
<emphasis>FEC</emphasis>-Modus.</para>
</listitem>
</varlistentry>
<varlistentry><term>Round-Robin</term>
<listitem>
<para>Verteilt ausgehenden Verkehr mittels einer Round-Robin-Zuteilung
über alle aktiven Ports und akzeptiert eingehenden Verkehr auf
jedem aktiven Port. Dieser Modus verletzt die Reihenfolge von
Ethernet-Frames und sollte mit Vorsicht eingesetzt werden.</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>Beispiele</title>
<example id="networking-lacp-aggregation-cisco">
<title>LACP Aggregation mit einem Switch von &cisco;</title>
<para>Dieses Beispiel verbindet zwei Adapter auf einer &os;-Maschine
mit dem Switch als eine einzelne, lastverteilte und ausfallsichere
Verbindung. Weitere Adapter können hinzugefügt werden, um
den Durchsatz zu erhöhen und die Ausfallsicherheit zu steigern.
Da die Reihenfolge der Frames bei Ethernet zwingend eingehalten
werden muss, fließt auch jeglicher Verkehr zwischen zwei
Stationen über den gleichen physischen Kanal, was die maximale
Geschwindigkeit der Verbindung auf die eines einzelnen Adapters
beschränkt. Der Übertragungsalgorithmus versucht, so viele
Informationen wie möglich zu verwenden, um die verschiedenen
Verkehrsflüsse zu unterscheiden und balanciert diese über
die verfügbaren Adapter.</para>
<para>Fügen Sie auf dem &cisco;-Switch die Adapter
<replaceable>FastEthernet0/1</replaceable> und
<replaceable>FastEthernet0/2</replaceable> zu der
channel-group <replaceable>1</replaceable> hinzu:</para>
<screen><userinput>interface <replaceable>FastEthernet0/1</replaceable>
channel-group <replaceable>1</replaceable> mode active
channel-protocol lacp</userinput>
!
<userinput>interface <replaceable>FastEthernet0/2</replaceable>
channel-group <replaceable>1</replaceable> mode active
channel-protocol lacp</userinput></screen>
<para>Auf der Maschine mit &os; erstellen Sie die
&man.lagg.4;-Schnittstelle unter Verwendung von
<replaceable>fxp0</replaceable> und
<replaceable>fxp1</replaceable>:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> create </userinput>
&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> up laggproto lacp laggport <replaceable>fxp0</replaceable> laggport <replaceable>fxp1</replaceable></userinput></screen>
<para>Überprüfen Sie den Status der Schnittstelle, indem
Sie folgendes eingeben:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable></userinput></screen>
<para>Ports, die als <emphasis>ACTIVE</emphasis> markiert sind, sind
Teil der aktiven Aggregations-Gruppe, die mit dem Switch
ausgehandelt wurde und der Verkehr wird über diese
übertragen und empfangen. Benutzen Sie die ausführliche
Ausgabe von &man.ifconfig.8;, um sich die LAG-Identifikatoren
anzeigen zu lassen.</para>
<screen>lagg0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
options=8&lt;VLAN_MTU&gt;
ether 00:05:5d:71:8d:b8
media: Ethernet autoselect
status: active
laggproto lacp
laggport: fxp1 flags=1c&lt;ACTIVE,COLLECTING,DISTRIBUTING&gt;
laggport: fxp0 flags=1c&lt;ACTIVE,COLLECTING,DISTRIBUTING&gt;</screen>
<para>Um den Status der Ports auf dem Switch anzuzeigen, geben Sie
<userinput>show lacp neighbor</userinput> ein:</para>
<screen>switch# show lacp neighbor
Flags: S - Device is requesting Slow LACPDUs
F - Device is requesting Fast LACPDUs
A - Device is in Active mode P - Device is in Passive mode
Channel group 1 neighbors
Partner's information:
LACP port Oper Port Port
Port Flags Priority Dev ID Age Key Number State
Fa0/1 SA 32768 0005.5d71.8db8 29s 0x146 0x3 0x3D
Fa0/2 SA 32768 0005.5d71.8db8 29s 0x146 0x4 0x3D</screen>
<para>Benutzen Sie das Kommando <userinput>show lacp neighbor
detail</userinput>, um weitere Informationen zu erhalten.</para>
</example>
<example id="networking-lagg-failover">
<title>Ausfallsicherer Modus</title>
<para>Der ausfallsichere Modus kann verwendet werden, um zu einer
zweiten Schnittstelle zu wechseln, sollte die Verbindung mit der
Master-Schnittstelle ausfallen. Erstellen und konfigurieren Sie die
<replaceable>lagg0</replaceable>-Schnittstelle mit
<replaceable>fxp0</replaceable> als Master und
<replaceable>fxp1</replaceable> als die sekundäre
Schnittstelle:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> create</userinput>
&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> up laggproto failover laggport <replaceable>fxp0</replaceable> laggport <replaceable>fxp1</replaceable></userinput></screen>
<para>Die Schnittstelle wird so ähnlich wie im folgenden
aussehen, mit dem großen Unterschied, dass die
<acronym>MAC</acronym>-Adresse und die Gerätenamen
unterschiedlich sein werden:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable></userinput>
lagg0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
options=8&lt;VLAN_MTU&gt;
ether 00:05:5d:71:8d:b8
media: Ethernet autoselect
status: active
laggproto failover
laggport: fxp1 flags=0&lt;&gt;
laggport: fxp0 flags=5&lt;MASTER,ACTIVE&gt;</screen>
<para>Der Verkehr wird auf <replaceable>fxp0</replaceable>
übertragen und empfangen. Wenn die Verbindung auf
<replaceable>fxp0</replaceable> abbricht, so wird
<replaceable>fxp1</replaceable> die Verbindung übernehmen.
Sobald die Verbindung auf der Master-Schnittstelle wiederhergestellt
ist, wird diese auch wieder als aktive Schnittstelle genutzt.</para>
</example>
<example id="networking-lagg-wired-and-wireless">
<title>Failover Modus zwischen drahtgebundenen und drahtlosen
Schnittstellen</title>
<para>Für Laptop-Benutzer ist es normalerweise
wünschenswert, wireless als sekundäre Schnittstelle
einzurichten, die verwendet wird, wenn die Verbindung via Kabel
nicht verfügbar ist. Mit &man.lagg.4; ist es möglich,
eine IP-Adresse für die Kabelverbindung zu verwenden.
Sie ist leistungsfähig und sicher. Gleichzeitig haben Sie
die Möglichkeit Daten über die drahtlose Verbindung
zu übertragen.</para>
<para>In dieser Konfiguration, müssen wir die zugrunde
liegenden <acronym>MAC</acronym>-Adresse der WLAN-Schnittstelle
überschreiben, damit sie zur Adresse von &man.lagg.4; passt,
welche von der drahtgebundenen Masterschnittstelle vererbt
wurde.</para>
<para>In dieser Konfiguration behandeln wir die drahtgebundene
Schnittstelle <replaceable>bge0</replaceable> als die Master und
die drahtlose Schnittstelle <replaceable>wlan0</replaceable> als
die Failover-Schnittstelle. Die <replaceable>wlan0</replaceable>
wurde von der <replaceable>iwn0</replaceable> mit der
<acronym>MAC</acronym>-Adresse der kabelgebundenen eingerichtet.
Im ersten Schritt erhalten wir die <acronym>MAC</acronym>-Adresse
der kabelgebundenen Schnittstelle:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>bge0</replaceable></userinput>
bge0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
options=19b&lt;RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4&gt;
ether 00:21:70:da:ae:37
inet6 fe80::221:70ff:feda:ae37%bge0 prefixlen 64 scopeid 0x2
nd6 options=29&lt;PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL&gt;
media: Ethernet autoselect (1000baseT &lt;full-duplex&gt;)
status: active</screen>
<para>Sie können <replaceable>bge0</replaceable> in
ihre tatsächliche ändern und werden eine andere
<literal>ether</literal>-Zeile mit der
<acronym>MAC</acronym>-Adresse ihrer kabelgebundenen
Schnittstelle erhalten. Nun ändern wir die zugrunde liegende
drahtlose Schnittstelle <replaceable>iwn0</replaceable>:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>iwn0</replaceable> ether <replaceable>00:21:70:da:ae:37</replaceable></userinput></screen>
<para>Starten Sie den Wireless-Schnittstelle, aber ohne
IP-Adresse:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> create wlandev <replaceable>iwn0</replaceable> ssid <replaceable>my_router</replaceable> up</userinput></screen>
<para>Erstellen Sie die &man.lagg.4; Schnittstelle mit
<replaceable>bge0</replaceable> als Master und
<replaceable>wlan0</replaceable> als Failover falls
notwendig:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> create</userinput>
&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> up laggproto failover laggport <replaceable>bge0</replaceable> laggport <replaceable>wlan0</replaceable></userinput></screen>
<para>Die Schnittstelle sieht änhlich aus, die Hauptunterschiede
werden die <acronym>MAC</acronym>-Adresse und die Gerätenamen
sein:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable></userinput>
lagg0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
options=8&lt;VLAN_MTU&gt;
ether 00:21:70:da:ae:37
media: Ethernet autoselect
status: active
laggproto failover
laggport: wlan0 flags=0&lt;&gt;
laggport: bge0 flags=5&lt;MASTER,ACTIVE&gt;</screen>
<para>Um zu vermeiden, dass Sie dies nach jedem Neustart machen müssen, können Sie
etwas in der Art in ihre <filename>/etc/rc.conf</filename>
Datei schreiben:</para>
<programlisting>ifconfig_bge0="up"
ifconfig_iwn0="ether 00:21:70:da:ae:37"
wlans_iwn0="wlan0"
ifconfig_wlan0="WPA"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport bge0 laggport wlan0 DHCP"
</programlisting>
</example>
</sect2>
</sect1>
<sect1 id="network-diskless">
<sect1info>
<authorgroup>
<author>
<firstname>Jean-Fran&ccedil;ois</firstname>
<surname>Dock&egrave;s</surname>
<contrib>Aktualisiert von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Alex</firstname>
<surname>Dupre</surname>
<contrib>Reorganisiert und erweitert von </contrib>
</author>
</authorgroup>
</sect1info>
<title>Start und Betrieb von FreeBSD über ein Netzwerk</title>
<indexterm>
<primary>plattenloser Arbeitsplatz</primary>
</indexterm>
<indexterm>
<primary>plattenloser Betrieb</primary>
</indexterm>
<para>FreeBSD kann über ein Netzwerk starten und arbeiten, ohne
eine lokale Festplatte zu verwenden, indem es Dateisysteme eines
<acronym>NFS</acronym>-Servers in den eigenen Verzeichnisbaum
einhängt. Dazu sind, von den Standardkonfigurationsdateien
abgesehen, keine Systemänderungen nötig. Ein solches
System kann leicht installiert werden, da alle notwendigen
Elemente bereits vorhanden sind:</para>
<itemizedlist>
<listitem>
<para>Es gibt mindestens zwei Möglichkeiten, den Kernel
über das Netzwerk zu laden:</para>
<itemizedlist>
<listitem>
<para><acronym>PXE</acronym>: Das
<quote>Preboot eXecution Environment System</quote> von
&intel; ist eine Art intelligentes Boot-ROM, das in
einigen Netzwerkkarten oder Hauptplatinen verwendet wird.
Weitere Informationen finden Sie in &man.pxeboot.8;.
</para>
</listitem>
<listitem>
<para>Der Port
<application>Etherboot</application>
(<filename role="package">net/etherboot</filename>)
erzeugt ROM-fähigen Code, um einen Kernel über
das Netzwerk zu laden. Dieser Code kann entweder auf ein
Boot-PROM einer Netzwerkkarte gebrannt werden, was von vielen
Netzwerkkarten unterstützt wird. Oder er kann von einer
lokalen Diskette, Festplatte oder von einem laufenden
&ms-dos;-System geladen werden.</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Das Beispielskript
<filename>/usr/share/examples/diskless/clone_root</filename>
erleichtert die Erzeugung und die Wartung des
root-Dateisystems auf dem Server. Das Skript muss
wahrscheinlich angepasst werden, dennoch werden Sie schnell zu
einem Ergebnis kommen.</para>
</listitem>
<listitem>
<para>Die Startdateien, die einen plattenlosen Systemstart
erkennen und unterstützen, sind nach der Installation
in <filename>/etc</filename> vorhanden.</para>
</listitem>
<listitem>
<para>Dateiauslagerungen können sowohl via
<acronym>NFS</acronym> als auch auf die lokale Platte
erfolgen.</para>
</listitem>
</itemizedlist>
<para>Es gibt verschiedene Wege, einen plattenlosen Rechner
einzurichten. Viele Elemente sind daran beteiligt, die fast
immer an den persönlichen Geschmack angepasst werden
können. Im folgenden Abschnitt wird die Installation
eines kompletten Systems beschrieben, wobei der
Schwerpunkt auf Einfachheit und Kompatibilität zu den
Standardstartskripten von FreeBSD liegt. Das beschriebene
System hat folgende Eigenschaften:</para>
<itemizedlist>
<listitem>
<para>Die plattenlosen Rechner haben ein gemeinsames
<filename>/</filename>- sowie ein gemeinsames
<filename>/usr</filename>-Dateisystem, die jeweils
schreibgeschützt sind.</para>
<para>Das root-Dateisystem ist eine Kopie
eines Standardwurzelverzeichnisses von FreeBSD
(üblicherweise das des Servers), bei dem einige
Konfigurationsdateien durch für den plattenlosen
Betrieb geeignete Versionen ersetzt wurden.</para>
<para>Für die Bereiche des root-Dateisystems, die
beschreibbar sein müssen, werden mit &man.md.4;
virtuelle Dateisysteme erzeugt. Dies bedeutet aber auch, dass
alle Veränderungen verloren gehen, wenn das System neu
gestartet wird.</para>
</listitem>
<listitem>
<para>Der Kernel wird, in Abhängigkeit von der jeweiligen
Situation, entweder von <application>Etherboot</application>
oder von <acronym>PXE</acronym> transferiert und geladen.
</para>
</listitem>
</itemizedlist>
<caution><para>Das hier beschriebene System ist nicht sicher. Es
sollte nur in einem gesicherten Bereich eines Netzwerks verwendet
werden und für andere Rechner nicht erreichbar sein.</para>
</caution>
<para>Alle Informationen in diesem Abschnitt wurden unter
&os;&nbsp;5.2.1-RELEASE getestet.</para>
<sect2>
<title>Hintergrundinformationen</title>
<para>Die Einrichtung von plattenlosen Rechnern ist einfach, aber
auch fehleranfällig. Der Grund dafür sind auftretende
Fehler, die sich oft nur schwer zuordnen lassen. Unter anderem
sind dafür folgende Umstände verantwortlich:</para>
<itemizedlist>
<listitem>
<para>Kompilierte Optionen haben zur Laufzeit unterschiedliche
Auswirkungen.</para>
</listitem>
<listitem>
<para>Fehlermeldungen sind oft kryptisch oder fehlen
vollständig.</para>
</listitem>
</itemizedlist>
<para>Daher ist es nützlich, über die im Hintergrund
ablaufenden Mechanismen Bescheid zu wissen. Dadurch wird es
einfacher, eventuell auftretende Fehler zu beheben.</para>
<para>Verschiedene Operationen müssen ausgeführt werden,
um ein System erfolgreich zu starten:</para>
<itemizedlist>
<listitem>
<para>Der Rechner benötigt einige Startparameter, wie
seine IP-Adresse, die Namen ausführbarer Dateien, den
Servernamen sowie den root-Pfad. Für die
Übermittlung dieser Informationen wird entweder das
<acronym>DHCP</acronym>- oder das BOOTP-Protokoll verwendet.
Bei <acronym>DHCP</acronym> handelt es sich um eine
abwärtskompatible Erweiterung von BOOTP, die die
gleichen Portnummern und das gleiche Paketformat verwendet.
</para>
<para>Es ist möglich, das System so zu konfigurieren,
dass es nur BOOTP verwendet. Das Serverprogramm
&man.bootpd.8; ist bereits im &os;-Basissystem enthalten.
</para>
<para><acronym>DHCP</acronym> hat im Vergleich zu BOOTP
allerdings mehrere Vorteile (bessere Konfigurationsdateien,
die Möglichkeit zur Verwendung von
<acronym>PXE</acronym>, sowie viele andere, die nicht in
direktem Zusammenhang mit dem plattenlosen Betrieb stehen).
Dieser Abschnitt beschreibt die Konfiguration mittels
<acronym>DHCP</acronym>. Wenn möglich, werden aber
entsprechende Beispiele für &man.bootpd.8;
angeführt. Die Beispielkonfiguration nutzt das
Softwarepaket <application>ISC DHCP</application>.</para>
</listitem>
<listitem>
<para>Der Rechner muss ein oder mehrere Programme in den
lokalen Speicher laden. Dazu wird entweder
<acronym>TFTP</acronym> oder <acronym>NFS</acronym>
verwendet. Die Auswahl zwischen <acronym>TFTP</acronym> und
<acronym>NFS</acronym> erfolgt über das Setzen von
verschiedenen Kompilieroptionen. Ein häufig gemachter
Fehler ist es, Dateinamen für das falsche Protokoll
anzugeben: <acronym>TFTP</acronym> transferiert
normalerweise alle Dateien aus einem einzigen Verzeichnis
des Servers, und erwartet einen Pfad relativ zu diesem
Verzeichnis. <acronym>NFS</acronym> verlangt hingegen
absolute Dateipfade.</para>
</listitem>
<listitem>
<para>Die möglichen Bootstrap-Programme und der Kernel
müssen initialisiert und ausgeführt werden. Dabei
gibt es zwei Möglichkeiten:</para>
<itemizedlist>
<listitem>
<para><acronym>PXE</acronym> lädt &man.pxeboot.8;.
Dabei handelt es sich um eine modifizierte Version des
&os;-Laders der Boot-Phase drei. Der &man.loader.8;
beschafft alle für den Systemstart notwendigen
Parameter, und hinterlegt diese in der Kernelumgebung,
bevor er die Kontrolle übergibt. Es ist hier
möglich, den <filename>GENERIC</filename>-Kernel
zu verwenden.</para>
</listitem>
<listitem>
<para><application>Etherboot</application> lädt den
Kernel hingegen direkt. Dafür müssen Sie
allerdings einen Kernel mit spezifischen Optionen
erzeugen.</para>
</listitem>
</itemizedlist>
<para><acronym>PXE</acronym> und
<application>Etherboot</application> sind zwar im
Großen und Ganzen gleichwertig, da der Kernel
aber viele Aufgaben an &man.loader.8; übergibt, sollte
bevorzugt <acronym>PXE</acronym> eingesetzt werden.</para>
<para>Wenn Ihr <acronym>BIOS</acronym> und Ihre Netzwerkkarten
<acronym>PXE</acronym> unterstützen, sollten Sie es
auch verwenden.</para>
</listitem>
<listitem>
<para>Zuletzt muss der Rechner auf seine Dateisysteme
zugreifen können. Dafür wird stets
<acronym>NFS</acronym> verwendet.</para>
</listitem>
</itemizedlist>
<para>Weitere Informationen finden Sie in &man.diskless.8;.</para>
</sect2>
<sect2>
<title>Installationsanweisungen</title>
<sect3>
<title>Konfiguration unter Verwendung von
<application>ISC DHCP</application></title>
<indexterm>
<primary>DHCP</primary>
<secondary>plattenloser Betrieb</secondary>
</indexterm>
<para>Der <application>ISC DHCP</application>-Server kann
Anfragen sowohl von BOOTP als auch von DHCP beantworten.
</para>
<para><application>isc-dhcp 3.1</application> ist nicht Teil
des Basissystems. Sie müssen es daher zuerst
installieren. Verwenden Sie dazu den Port
<filename role="package">net/isc-dhcp31-server</filename>
oder das entsprechende Paket.</para>
<para>Nachdem <application>ISC DHCP</application> installiert
ist, muss das Programm konfiguriert werden (normalerweise in
<filename>/usr/local/etc/dhcpd.conf</filename>). Im
folgenden Beispiel verwendet Rechner <hostid>margaux</hostid>
<application>Etherboot</application>, während Rechner
<hostid>corbieres</hostid> <acronym>PXE</acronym> verwendet:
</para>
<programlisting> default-lease-time 600;
max-lease-time 7200;
authoritative;
option domain-name "example.com";
option domain-name-servers 192.168.4.1;
option routers 192.168.4.1;
subnet 192.168.4.0 netmask 255.255.255.0 {
use-host-decl-names on; <co id="co-dhcp-host-name"/>
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.4.255;
host margaux {
hardware ethernet 01:23:45:67:89:ab;
fixed-address margaux.example.com;
next-server 192.168.4.4;<co id="co-dhcp-next-server"/>
filename "/tftpboot/kernel.diskless";<co id="co-dhcp-filename"/>
option root-path "192.168.4.4:/data/misc/diskless";<co id="co-dhcp-root-path"/>
}
host corbieres {
hardware ethernet 00:02:b3:27:62:df;
fixed-address corbieres.example.com;
next-server 192.168.4.4;
filename "pxeboot";
option root-path "192.168.4.4:/data/misc/diskless";
}
}
</programlisting>
<calloutlist>
<callout arearefs="co-dhcp-host-name"><para>Diese Option
weist <application>dhcpd</application> an, den Wert der
<literal>host</literal>-Deklaration als Rechnernamen des
plattenlosen Rechners zu senden. Alternativ kann man der
<literal>host</literal>-Deklaration Folgendes
hinzufügen: <literal>option host-name
<replaceable>margaux</replaceable></literal></para>
</callout>
<callout arearefs="co-dhcp-next-server"><para>Die Anweisung
<literal>next-server</literal> bestimmt den
<acronym>TFTP</acronym>- oder
<acronym>NFS</acronym>-Server, von dem der Loader oder
der Kernel geladen werden (in der Voreinstellung ist das
der <acronym>DHCP</acronym>-Server selbst).</para>
</callout>
<callout arearefs="co-dhcp-filename"><para>Die Anweisung
<literal>filename</literal> bestimmt die Datei, die
<application>Etherboot</application> als nächstes
lädt. Das genaue Format hängt von der
gewählten Transfermethode ab.
<application>Etherboot</application> kann sowohl mit
<acronym>NFS</acronym> als auch mit
<acronym>TFTP</acronym> kompiliert werden. In der
Voreinstellung wird der &os;-Port mit
<acronym>NFS</acronym>-Unterstützung kompiliert.
<acronym>PXE</acronym> verwendet <acronym>TFTP</acronym>,
daher wird im Beispiel ein relativer Dateipfad verwendet.
Dies kann aber, je nach Konfiguration des
<acronym>TFTP</acronym>-Servers, auch anders sein.
Beachten Sie, dass <acronym>PXE</acronym>
<filename>pxeboot</filename> lädt, und nicht den
Kernel. Es ist auch möglich, das Verzeichnis
<filename class="directory">/boot</filename> einer
&os;-CD-ROM von <filename>pxeboot</filename> laden zu
lassen. &man.pxeboot.8; kann einen
<filename>GENERIC</filename>-Kernel laden, dadurch ist es
möglich, <acronym>PXE</acronym> von einer entfernten
CD-ROM zu starten.</para>
</callout>
<callout arearefs="co-dhcp-root-path"><para>Die Option
<literal>root-path</literal> bestimmt den Pfad des
root-Dateisystems in normaler NFS-Schreibweise. Wird
<acronym>PXE</acronym> verwendet, ist es möglich,
die IP-Adresse des Rechners wegzulassen, solange nicht
die Kerneloption BOOTP aktiviert wird. Der
<acronym>NFS</acronym>-Server entspricht in diesem Fall
dem <acronym>TFTP</acronym>-Server.</para>
</callout>
</calloutlist>
</sect3>
<sect3>
<title>Konfiguration bei Verwendung von BOOTP</title>
<indexterm>
<primary>BOOTP</primary>
<secondary>plattenloser Betrieb</secondary>
</indexterm>
<para>Es folgt nun eine der Konfiguration von DHCP
entsprechende Konfiguration (für einen Client) für
<application>bootpd</application>. Zu finden ist die
Konfigurationsdatei unter <filename>/etc/bootptab</filename>.
</para>
<para>Beachten Sie bitte, dass
<application>Etherboot</application> mit der Option
<literal>NO_DHCP_SUPPORT</literal> kompiliert werden muss,
damit BOOTP verwendet werden kann. <acronym>PXE</acronym>
hingegen <emphasis>benötigt</emphasis>
<acronym>DHCP</acronym>. Der einzige offensichtliche
Vorteil von <application>bootpd</application> ist, dass es
bereits im Basissystem vorhanden ist.</para>
<programlisting>.def100:\
:hn:ht=1:sa=192.168.4.4:vm=rfc1048:\
:sm=255.255.255.0:\
:ds=192.168.4.1:\
:gw=192.168.4.1:\
:hd="/tftpboot":\
:bf="/kernel.diskless":\
:rp="192.168.4.4:/data/misc/diskless":
margaux:ha=0123456789ab:tc=.def100</programlisting>
</sect3>
<sect3>
<title>Ein Startprogramm unter Verwendung von
<application>Etherboot</application> erstellen</title>
<indexterm>
<primary>Etherboot</primary>
</indexterm>
<para>Die <ulink url="http://etherboot.sourceforge.net">
Internetseite von Etherboot</ulink> enthält
<ulink url="http://etherboot.sourceforge.net/doc/html/userman/t1.html">
ausführliche Informationen</ulink>, die zwar vor allem
für Linux gedacht sind, aber dennoch nützliche
Informationen enthalten. Im Folgenden wird daher nur grob
beschrieben, wie Sie <application>Etherboot</application> auf
einem FreeBSD-System einsetzen können.</para>
<para>Als Erstes müssen Sie
<filename role="package">net/etherboot</filename> als Paket
oder als Port installieren.</para>
<para>Sie können <application>Etherboot</application> so
konfigurieren, dass <acronym>TFTP</acronym> anstelle von
<acronym>NFS</acronym> verwendet wird, indem Sie die Datei
<filename>Config</filename> im Quellverzeichnis von
<application>Etherboot</application> bearbeiten.</para>
<para>Für unsere Installation verwenden wir eine
Startdiskette. Für Informationen zu anderen Methoden
(PROM oder &ms-dos;-Programme) lesen Sie bitte die
Dokumentation zu <application>Etherboot</application>.</para>
<para>Um eine Startdiskette zu erzeugen, legen Sie eine Diskette
in das Laufwerk des Rechners ein, auf dem Sie
<application>Etherboot</application> installiert haben. Danach
wechseln Sie in das Verzeichnis <filename>src</filename> des
<application>Etherboot</application>-Verzeichnisbaums und geben
Folgendes ein:</para>
<screen>&prompt.root; <userinput>gmake bin32/<replaceable>devicetype</replaceable>.fd0</userinput></screen>
<para><replaceable>devicetype</replaceable> hängt vom Typ
der Ethernetkarte ab, über die der plattenlose Rechner
verfügt. Lesen Sie dazu <filename>NIC</filename> im
gleichen Verzeichnis, um den richtigen Wert für
<replaceable>devicetype</replaceable> zu bestimmen.</para>
</sect3>
<sect3>
<title>Das System mit <acronym>PXE</acronym> starten</title>
<para>In der Voreinstellung lädt der
&man.pxeboot.8;-Loader den Kernel über
<acronym>NFS</acronym>. Soll stattdessen
<acronym>TFTP</acronym> verwendet werden, muss beim
Kompilieren die Option
<literal>LOADER_TFTP_SUPPORT</literal> in der Datei
<filename>/etc/make.conf</filename> eingetragen sein. Sehen
Sie sich die Datei
<filename>/usr/share/examples/etc/make.conf</filename>
für weitere Anweisungen an.</para>
<para>Es gibt zwei Optionen für
<filename>make.conf</filename>, die nützlich sein
können, wenn Sie eine plattenlose serielle Konsole
einrichten wollen:
<literal>BOOT_PXELDR_PROBE_KEYBOARD</literal>, und
<literal>BOOT_PXELDR_ALWAYS_SERIAL</literal>.</para>
<para>Um <acronym>PXE</acronym> beim Systemstart zu verwenden,
müssen Sie im <acronym>BIOS</acronym> des Rechner die
Option <literal>Über das Netzwerk starten</literal>
aktivieren. Alternativ können Sie während der
PC-Initialisierung auch eine Funktionstaste drücken.
</para>
</sect3>
<sect3>
<title>Serverkonfiguration - <acronym>TFTP</acronym> und
<acronym>NFS</acronym></title>
<indexterm>
<primary>TFTP</primary>
<secondary>plattenloser Betrieb</secondary>
</indexterm>
<indexterm>
<primary>NFS</primary>
<secondary>plattenloser Betrieb</secondary>
</indexterm>
<para>Wenn Sie <acronym>PXE</acronym> oder
<application>Etherboot</application> so konfiguriert haben,
dass diese <acronym>TFTP</acronym> verwenden, müssen
Sie auf dem Dateiserver <application>tftpd</application>
aktivieren:</para>
<procedure>
<step>
<para>Erzeugen Sie ein Verzeichnis, in dem
<application>tftpd</application> seine Dateien ablegt,
beispielsweise <filename>/tftpboot</filename>.</para>
</step>
<step>
<para>Fügen Sie folgende Zeile in
<filename>/etc/inetd.conf</filename> ein:</para>
<programlisting>tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot</programlisting>
<note><para>Anscheinend benötigen zumindest einige
<acronym>PXE</acronym>-Versionen die
<acronym>TCP</acronym>-Version von
<acronym>TFTP</acronym>. Sollte dies bei Ihnen der
Fall sein, fügen Sie eine zweite Zeile ein, in der
Sie <literal>dgram udp</literal> durch
<literal>stream tcp</literal> ersetzen.</para>
</note>
</step>
<step>
<para>Weisen Sie <application>inetd</application> an, seine
Konfiguration erneut einzulesen (Damit der folgende
Befehl funktioniert, muss die Option
<option>inetd_enable="YES"</option> in der Datei
<filename>/etc/rc.conf</filename> vorhanden sein.):</para>
<screen>&prompt.root; <userinput>/etc/rc.d/inetd restart</userinput></screen>
</step>
</procedure>
<para>Sie können das Verzeichnis
<filename>/tftpboot</filename> an einem beliebigen Ort auf dem
Server ablegen. Stellen Sie aber sicher, dass Sie diesen Ort
sowohl in <filename>inetd.conf</filename> als auch in
<filename>dhcpd.conf</filename> eingetragen haben.</para>
<para>Außerdem müssen Sie NFS aktivieren und die
entsprechenden Verzeichnisse exportieren.</para>
<procedure>
<step>
<para>Fügen Sie folgende Zeile in
<filename>/etc/rc.conf</filename> ein:</para>
<programlisting>nfs_server_enable="YES"</programlisting>
</step>
<step>
<para>Exportieren Sie das Verzeichnis, in dem sich das
Wurzelverzeichnis für den plattenlosen Betrieb
befindet, indem Sie folgende Zeile in
<filename>/etc/exports</filename> einfügen (passen
Sie dabei den <foreignphrase>mountpoint</foreignphrase>
an und ersetzen Sie
<replaceable>margaux corbieres</replaceable> durch den
Namen Ihres plattenlosen Rechners):</para>
<programlisting><replaceable>/data/misc</replaceable> -alldirs -ro <replaceable>margaux</replaceable></programlisting>
</step>
<step>
<para>Weisen sie nun <application>mountd</application> an,
seine Konfigurationsdatei erneut einzulesen. Wenn Sie
<acronym>NFS</acronym> erst in der Datei
<filename>/etc/rc.conf</filename> aktivieren mussten,
sollten Sie stattdessen den Rechner neu starten. Dadurch
wird die Konfigurationsdatei ebenfalls neu eingelesen.
</para>
<screen>&prompt.root; <userinput>/etc/rc.d/mountd restart</userinput></screen>
</step>
</procedure>
</sect3>
<sect3>
<title>Einen plattenlosen Kernel erzeugen</title>
<indexterm>
<primary>plattenloser Betrieb</primary>
<secondary>Kernelkonfiguration</secondary>
</indexterm>
<para>Wenn Sie <application>Etherboot</application> verwenden,
müssen Sie in die Kernelkonfigurationsdatei Ihres
plattenlosen Clients zusätzlich folgende Optionen
einfügen:</para>
<programlisting>options BOOTP # Use BOOTP to obtain IP address/hostname
options BOOTP_NFSROOT # NFS mount root file system using BOOTP info</programlisting>
<para>Außerdem können Sie die Optionen
<literal>BOOTP_NFSV3</literal>,
<literal>BOOT_COMPAT</literal> sowie
<literal>BOOTP_WIRED_TO</literal> verwenden (sehen Sie sich
dazu auch die Datei <filename>NOTES</filename> an).</para>
<para>Die Namen dieser Optionen sind historisch bedingt.
Sie ermöglichen eine unterschiedliche Verwendung von
<acronym>DHCP</acronym> und BOOTP innerhalb des Kernels.
Es ist auch möglich, eine strikte Verwendung von BOOTP
oder <acronym>DHCP</acronym> zu erzwingen.</para>
<para>Erzeugen Sie den neuen Kernel (lesen Sie dazu auch
<xref linkend="kernelconfig"/>) und kopieren Sie ihn an den
in <filename>dhcpd.conf</filename> festgelegten Ort.</para>
<note><para>Wenn Sie <acronym>PXE</acronym> verwenden, ist die
Erzeugung eines Kernels zwar nicht unbedingt nötig, sie
wird allerdings dennoch empfohlen. Die Aktivierung dieser
Optionen bewirkt, dass die Anzahl der möglichen
<acronym>DHCP</acronym>-Anforderungen während des
Kernelstarts erhöht wird. Ein kleiner Nachteil sind
eventuell auftretende Inkonsistenzen zwischen den neuen
Werten und den von &man.pxeboot.8; erhaltenen Werten. Der
große Vorteil dieser Variante ist es, dass dabei der
Rechnername gesetzt wird, den Sie ansonsten durch eine
andere Methode, beispielsweise in einer clientspezifischen
<filename>rc.conf</filename>-Datei festlegen müssten.
</para>
</note>
<note><para>Damit der Kernel von
<application>Etherboot</application> geladen werden kann,
müssen <foreignphrase>device hints</foreignphrase> im
Kernel einkompiliert sein. Dazu setzen Sie normalerweise
folgende Option in die Kernelkonfigurationsdatei (sehen Sie
sich dazu auch die kommentierte Datei
<filename>NOTES</filename> an):</para>
<programlisting>hints "GENERIC.hints"</programlisting>
</note>
</sect3>
<sect3>
<title>Das root-Dateisystem erzeugen</title>
<indexterm>
<primary>Root-Dateisystem</primary>
<secondary>plattenloser Betrieb</secondary>
</indexterm>
<para>Sie müssen für den plattenlosen Rechner ein
root-Dateisystem erzeugen, und zwar an dem in
<filename>dhcpd.conf</filename> als
<literal>root-path</literal> festgelegten Ort.</para>
<sect4>
<title><command>make world</command> zum Füllen des
Dateisystems einsetzen</title>
<para>Diese schnelle Methode installiert ein komplettes
<quote>jungfräuliches</quote> System (und nicht nur ein
root-Dateisystem) nach <envar>DESTDIR</envar>. Dazu
müssen Sie lediglich das folgende Skript
ausführen:</para>
<programlisting>#!/bin/sh
export DESTDIR=/data/misc/diskless
mkdir -p ${DESTDIR}
cd /usr/src; make buildworld &amp;&amp; make buildkernel
make installworld &amp;&amp; make installkernel
cd /usr/src/etc; make distribution</programlisting>
<para>Danach müssen Sie noch die dadurch in
<envar>DESTDIR</envar> erzeugten Dateien
<filename>/etc/rc.conf</filename> sowie
<filename>/etc/fstab</filename> Ihren Wünschen
anpassen.</para>
</sect4>
</sect3>
<sect3>
<title>Den Auslagerungsbereich konfigurieren</title>
<para>Falls nötig, kann eine auf dem
<acronym>NFS</acronym>-Server liegende Datei als
Auslagerungsdatei eingerichtet werden.</para>
<sect4>
<title>Eine <acronym>NFS</acronym>-Auslagerungsdatei
einrichten</title>
<para>Der Kernel unterstützt beim Systemstart keine
<acronym>NFS</acronym>-Auslagerungsdatei. Diese muss daher
in den Startskripten aktiviert werden, indem ein
beschreibbares Dateisystem eingehängt wird, um dort
die Auslagerungsdatei zu erzeugen und zu aktivieren. Um
eine Auslagerungsdatei zu erzeugen, gehen Sie wie folgt
vor:</para>
<screen>&prompt.root; <userinput>dd if=/dev/zero of=<replaceable>/path/to/swapfile</replaceable> bs=1k count=1 oseek=<replaceable>100000</replaceable></userinput></screen>
<para>Um die Auslagerungsdatei zu aktivieren, fügen Sie
folgende Zeile in <filename>rc.conf</filename> ein:</para>
<programlisting>swapfile=<replaceable>/path/to/swapfile</replaceable></programlisting>
</sect4>
</sect3>
<sect3>
<title>Verschiedenes</title>
<sect4>
<title>Schreibgeschütztes Dateisystem
<filename>/usr</filename></title>
<indexterm>
<primary>plattenloser Betrieb</primary>
<secondary>/usr schreibgeschützt</secondary>
</indexterm>
<para>Wenn am plattenlosen Rechner X läuft, müssen
Sie die Konfigurationsdatei von
<application>XDM</application> anpassen, da Fehlermeldungen
in der Voreinstellung auf <filename>/usr</filename>
geschrieben werden.</para>
</sect4>
<sect4>
<title>Der Server läuft nicht unter FreeBSD</title>
<para>Wenn das root-Dateisystem nicht auf einem
FreeBSD-Rechner liegt, muss das Dateisystem zuerst unter
FreeBSD erzeugt werden. Anschließend wird es
beispielsweise mit <command>tar</command> oder
<command>cpio</command> an den gewünschten Ort
kopiert.</para>
<para>Dabei kann es Probleme mit den Gerätedateien
in <filename>/dev</filename> geben, die durch eine
unterschiedliche Darstellung der Major- und Minor-Number
von Geräten auf beiden Systemen hervorgerufen werden.
Eine Problemlösung besteht darin, das root-Verzeichnis
auf einem FreeBSD-Rechner einzuhängen und die
Gerätedateien dort mit &man.devfs.5; zu erzeugen.</para>
</sect4>
</sect3>
</sect2>
</sect1>
<sect1 id="network-isdn">
<title>ISDN &ndash; diensteintegrierendes digitales Netzwerk</title>
<indexterm>
<primary>ISDN</primary>
</indexterm>
<para>Eine gute Quelle für Informationen zu ISDN ist die
<ulink url="http://www.alumni.caltech.edu/~dank/isdn/">
ISDN-Seite</ulink> von Dan Kegel.</para>
<para>Welche Informationen finden Sie in diesem Abschnitt?</para>
<itemizedlist>
<listitem>
<para>Wenn Sie in Europa leben, könnte der Abschnitt
über ISDN-Karten für Sie interessant sein.</para>
</listitem>
<listitem>
<para>Wenn Sie ISDN hauptsächlich dazu verwenden wollen, um
sich über einen Anbieter ins Internet einzuwählen,
sollten Sie den Abschnitt über Terminaladapter lesen.
Dies ist die flexibelste Methode, die auch die wenigsten
Probleme verursacht.</para>
</listitem>
<listitem>
<para>Wenn Sie zwei Netzwerke miteinander verbinden, oder sich
über eine ISDN-Standleitung mit dem Internet verbinden
wollen, finden Sie entsprechende Informationen im Abschnitt
über Router und Bridges.</para>
</listitem>
</itemizedlist>
<para>Bei der Wahl der gewünschten Lösung sind die
entstehenden Kosten ein entscheidender Faktor. Die folgenden
Beschreibungen reichen von der billigsten bis zur teuersten
Variante.</para>
<sect2 id="network-isdn-cards">
<sect2info>
<authorgroup>
<author>
<firstname>Hellmuth</firstname>
<surname>Michaelis</surname>
<contrib>Beigetragen von </contrib>
</author>
</authorgroup>
</sect2info>
<title>ISDN-Karten</title>
<indexterm>
<primary>ISDN</primary>
<secondary>Karten</secondary>
</indexterm>
<para>Das ISDN-Subsystem von FreeBSD unterstützt den
DSS1/Q.931- (oder Euro-ISDN)-Standard nur für passive
Karten. Zusätzlich werden aber auch einige
aktive Karten unterstützt, bei denen die Firmware auch
andere Signalprotokolle unterstützt; dies schließt
auch die erste ISDN-Karte mit
Primärmultiplex-Unterstützung mit ein.</para>
<para><application>isdn4bsd</application> ermöglicht es
Ihnen, sich unter Nutzung von
<emphasis>IP over raw HDLC</emphasis> oder
<emphasis>synchronem PPP</emphasis> mit anderen ISDN-Routern zu
verbinden. Dazu verwenden Sie entweder Kernel-&man.ppp.8;
(via <literal>isppp</literal>, einem modifizierten
sppp-Treiber), oder Sie benutzen User-&man.ppp.8;. Wenn Sie
User-&man.ppp.8; verwenden, können Sie zwei oder mehrere
ISDN-B-Kanäle bündeln. Im Paket enthalten ist auch
ein Programm mit Anrufbeantworterfunktion sowie verschiedene
Werkzeuge, wie ein Softwaremodem, das 300&nbsp;Baud
unterstützt.</para>
<para>FreeBSD unterstützt eine ständig wachsende Anzahl
von PC-ISDN-Karten, die weltweit erfolgreich eingesetzt werden.
</para>
<para>Von FreeBSD unterstützte passive ISDN-Karten enthalten
fast immer den ISAC/HSCX/IPAC ISDN-Chipsatz von Infineon
(ehemals Siemens). Unterstützt werden aber auch Karten mit
Cologne Chip (diese allerdings nur für den ISA-Bus),
PCI-Karten mit Winbond W6692 Chipsatz, einige Karten mit dem
Tiger 300/320/ISAC Chipsatz sowie einige Karten mit einem
herstellerspezifischen Chipsatz, wie beispielsweise die
Fritz!Card PCI V.1.0 und die Fritz!Card PnP von AVM.</para>
<para>An aktiven ISDN-Karten werden derzeit die AVM B1 BRI-Karten
(ISA und PCI-Version) sowie die AVM T1 PRI-Karten (PCI-Version)
unterstützt.</para>
<para>Informationen zu <application>isdn4bsd</application> finden
Sie auf der
<ulink url="http://www.freebsd-support.de/i4b/">Internetseite</ulink>
von <application>isdn4bsd</application>. Dort finden Sie auch
Verweise zu Tipps, Korrekturen, sowie weiteren Informationen,
wie dem
<ulink url="http://people.FreeBSD.org/~hm/">isdn4bsd-Handbuch</ulink>.
</para>
<para>Falls Sie an der Unterstützung eines zusätzlichen
ISDN-Protokolls, einer weiteren ISDN-Karte oder an einer anderen
Erweiterung von <application>isdn4bsd</application> interessiert
sind, wenden Sie sich bitte an &a.hm;.</para>
<para>Für Fragen zur Installation, Konfiguration und zu
sonstigen Problemen von <application>isdn4bsd</application> gibt
es die Mailingliste &a.isdn.name;.</para>
</sect2>
<sect2>
<title>ISDN-Terminaladapter</title>
<indexterm>
<primary>Terminaladapter</primary>
</indexterm>
<para>Terminaladapter (TA) sind für ISDN, was Modems für
analoge Telefonleitungen sind.</para>
<indexterm>
<primary>Modem</primary>
</indexterm>
<para>Die meisten Terminaladapter verwenden den
Standardbefehlssatz für Modems von Hayes (AT-Kommandos) und
können daher als Modemersatz verwendet werden.</para>
<para>Ein Terminaladapter funktioniert prinzipiell wie ein Modem,
allerdings erfolgt der Verbindungsaufbau um einiges schneller.
Die Konfiguration von <link linkend="ppp">PPP</link> entspricht
dabei exakt der eines Modems. Stellen Sie dabei allerdings
die serielle Geschwindigkeit so hoch wie möglich ein.
</para>
<indexterm>
<primary>PPP</primary>
</indexterm>
<para>Der Hauptvorteil bei der Verwendung eines Terminaladapters
zur Verbindung mit einem Internetanbieter ist die
Möglichkeit zur Nutzung von dynamischem PPP. Da
IP-Adressen immer knapper werden, vergeben die meisten Provider
keine statischen IP-Adressen mehr. Die meisten Router
unterstützen allerdings keine dynamische Zuweisung von
IP-Adressen.</para>
<para>Der PPP-Daemon bestimmt die Stabilität und
Eigenschaften der Verbindung, wenn Sie einen Terminaladapter
verwenden. Daher können Sie unter FreeBSD einfach von
einer Modemverbindung auf eine ISDN-Verbindung wechseln, wenn
Sie PPP bereits konfiguriert haben. Allerdings bedeutet
dies auch, das bereits bestehende Probleme mit PPP auch unter
ISDN auftreten werden.</para>
<para>Wenn Sie an maximaler Stabilität interessiert sind,
verwenden Sie Kernel-<link linkend="ppp">PPP</link>, und
nicht das <link linkend="userppp">User-PPP</link>.</para>
<para>Folgende Terminaladapter werden von FreeBSD
unterstützt:</para>
<itemizedlist>
<listitem>
<para>Motorola BitSurfer und Bitsurfer Pro</para>
</listitem>
<listitem>
<para>Adtran</para>
</listitem>
</itemizedlist>
<para>Die meisten anderen Terminaladapter werden wahrscheinlich
ebenfalls funktionieren, da die Hersteller von Terminaladaptern
darauf achten, dass ihre Produkte den Standardbefehlssatz
möglichst gut unterstützen.</para>
<para>Das wirkliche Problem mit einem externen Terminaladapter ist,
dass, ähnlich wie bei Modems, eine gute serielle Karte
eine Grundvoraussetzung ist.</para>
<para>Sie sollten sich die
<ulink url="&url.articles.serial-uart.en;/index.html">
Anleitung für die Nutzung serieller Geräte unter
FreeBSD</ulink> ansehen, wenn Sie detaillierte Informationen
über serielle Geräte und die Unterschiede zwischen
asynchronen und synchronen seriellen Ports benötigen.
</para>
<para>Ein Terminaladapter, der an einem (asynchronen)
seriellen Standardport angeschlossen ist, beschränkt
Sie auf 115,2&nbsp;Kbs. Dies
selbst dann, wenn Sie eine Verbindung mit 128&nbsp;Kbs haben.
Um die volle Leistungsfähigkeit von ISDN (128&nbsp;Kbs)
nutzen zu können, müssen Sie den Terminaladapter
daher an eine synchrone serielle Karte anschließen.</para>
<para>Kaufen Sie keinen internen Terminaladapter in der Hoffnung,
damit das synchron/asynchron-Problem vermeiden zu können.
Interne Terminaladapter haben einen (asynchronen) seriellen
Standardportchip eingebaut. Der einzige Vorteil interner
Terminaladapter ist es, dass Sie ein serielles sowie ein
Stromkabel weniger benötigen.</para>
<para>Eine synchrone Karte mit einem Terminaladapter ist
mindestens so schnell wie ein autonomer ISDN-Router,
und, in Kombination mit einem einfachen 386-FreeBSD-System,
wahrscheinlich flexibler.</para>
<para>Die Entscheidung zwischen synchroner Karte/Terminaladapter
und einem autonomen ISDN-Router ist beinahe eine religiöse
Angelegenheit. Zu diesem Thema gibt es viele Diskussionen
in den Mailinglisten. Suchen Sie in den
<ulink url="&url.base;/search/index.html"> Archiven</ulink>
danach, wenn Sie an der kompletten Diskussion interessiert
sind.</para>
</sect2>
<sect2>
<title>ISDN-Bridges und Router</title>
<indexterm>
<primary>ISDN</primary>
<secondary>Autonome Bridge/Router</secondary>
</indexterm>
<para>ISDN-Bridges und Router sind keine Eigenheit von
FreeBSD oder eines anderen Betriebssystems. Für eine
vollständigere Beschreibung von Routing und
Netzwerkkopplungen mit einer Bridge informieren Sie sich
bitte durch weiterführende Literatur.</para>
<para>In diesem Abschnitt werden die Begriffe Router und
Bridge synonym verwendet.</para>
<para>ISDN-Router und Bridges werden immer günstiger und
damit auch immer beliebter. Ein ISDN-Router ist eine kleine
Box, die direkt an Ihr lokales Ethernet-Netzwerk angeschlossen
wird und sich mit einem Router oder einer Bridge verbindet.
Die eingebaute Software ermöglicht die Kommunikation
über PPP oder andere beliebte Protokolle.</para>
<para>Ein Router ermöglicht einen deutlich höheren
Datendurchsatz als ein herkömmlicher Terminaladapter,
da er eine vollsynchrone ISDN-Verbindung nutzt.</para>
<para>Das Hauptproblem mit ISDN-Routern und Bridges ist,
dass die Zusammenarbeit zwischen Geräten verschiedener
Hersteller nach wie vor ein Problem ist. Wenn Sie sich auf
diese Weise mit einem Internetanbieter verbinden wollen,
klären Sie daher vorher ab, welche Anforderungen Ihre
Geräte erfüllen müssen.</para>
<para>Eine ISDN-Bridge ist eine einfache und wartungsarme
Lösung, zwei Netze, beispielsweise Ihr privates Netz
und Ihr Firmennetz, miteinander zu verbinden. Da Sie die
technische Ausstattung für beide Seiten kaufen müssen,
ist sichergestellt, dass die Verbindung funktionieren
wird.</para>
<para>Um beispielsweise einen privaten Computer oder eine
Zweigstelle mit dem Hauptnetzwerk zu verbinden, könnte
folgende Konfiguration verwendet werden:</para>
<example>
<title>Kleines Netzwerk (Privatnetz)</title>
<indexterm>
<primary>10 base 2</primary>
</indexterm>
<para>Das Netzwerk basiert auf der Bustopologie mit 10base2
Ethernet (<quote>Thinnet</quote>). Falls nötig, stellen
Sie die Verbindung zwischen Router und Netzwerkkabel mit einem
AUI/10BT-Transceiver her.</para>
<mediaobject>
<imageobject>
<imagedata fileref="advanced-networking/isdn-bus"/>
</imageobject>
<textobject>
<literallayout class="monospaced">
---Sun Workstation
|
---FreeBSD Rechner
|
---Windows 95
|
Autonomer Router
|
ISDN BRI Verbindung
</literallayout>
</textobject>
<textobject>
<phrase>10Base2 - Ethernet</phrase>
</textobject>
</mediaobject>
<para>Wenn Sie nur einen einzelnen Rechner verbinden wollen,
können Sie auch ein Twisted-Pair-Kabel (Cross-Over)
verwenden, das direkt an den Router angeschlossen wird.</para>
</example>
<example>
<title>Großes Netzwerk (Firmennetz)</title>
<indexterm>
<primary>10 base T</primary>
</indexterm>
<para>Dieses Netzwerk basiert auf der Sterntopologie und 10baseT
Ethernet (<quote>Twisted Pair</quote>).</para>
<mediaobject>
<imageobject>
<imagedata fileref="advanced-networking/isdn-twisted-pair"/>
</imageobject>
<textobject>
<literallayout class="monospaced">
-------Novell Server
| H |
| ---Sun
| |
| U ---FreeBSD
| |
| ---Windows 95
| B |
|___---Autonomer Router
|
ISDN BRI Verbindung
</literallayout>
</textobject>
<textobject>
<phrase>ISDN Netzwerkdiagramm</phrase>
</textobject>
</mediaobject>
</example>
<para>Ein großer Vorteil der meisten Router und Bridges
ist es, dass man <emphasis>gleichzeitig</emphasis> zwei
<emphasis>unabhängige</emphasis> PPP-Verbindungen
zu zwei verschiedenen Zielen aufbauen kann. Diese
Funktion bieten die meisten Terminaladapter nicht. Die
Ausnahme sind spezielle (meist teure) Modelle, die über
zwei getrennte serielle Ports verfügen. Verwechseln Sie
dies aber nicht mit Kanalbündelung oder MPP.</para>
<para>Dies kann sehr nützlich sein, wenn Sie eine
ISDN-Standleitung in Ihrem Büro haben, die sie
aufteilen wollen, ohne eine zusätzliche ISDN-Leitung
zu installieren. Ein ISDN-Router kann über einen B-Kanal
(64&nbsp;Kbps) eine dedizierte Verbindung ins Internet aufbauen,
und gleichzeitig den anderen B-Kanal für eine separate
Datenverbindung nutzen. Der zweite B-Kanal kann beispielsweise
für ein- oder ausgehende Verbindungen verwendet werden.
Sie können ihn aber auch dynamisch mit dem ersten B-Kanal
bündeln, um Ihre Bandbreite zu erhöhen.</para>
<indexterm>
<primary>IPX/SPX</primary>
</indexterm>
<para>Eine Ethernet-Bridge kann Daten nicht nur im IP-Protokoll,
sondern auch in beliebigen anderen Protokollen versenden.</para>
</sect2>
</sect1>
<sect1 id="network-natd">
<sect1info>
<authorgroup>
<author>
<firstname>Chern</firstname>
<surname>Lee</surname>
<contrib>Beigetragen von </contrib>
</author>
</authorgroup>
</sect1info>
<title>NAT - Network Address Translation</title>
<sect2 id="network-natoverview">
<title>Überblick</title>
<indexterm>
<primary><application>natd</application></primary>
</indexterm>
<para>&man.natd.8;, der Network-Address-Translation-Daemon von
FreeBSD, akzeptiert ankommende Raw-IP-Pakete, ändert den
Sender der Daten in den eigenen Rechner und leitet diese Pakete
in den ausgehenden IP-Paketstrom um, indem IP-Adresse und Port
des Senders so geändert werden, dass bei einer Antwort der
ursprüngliche Sender wieder bestimmt und die Daten an
ihn weitergeleitet werden können.</para>
<indexterm><primary>Internet connection sharing</primary></indexterm>
<indexterm><primary>NAT</primary></indexterm>
<para>Der häufigste Grund für die Verwendung von NAT ist
die gemeinsame Nutzung einer Internetverbindung.</para>
</sect2>
<sect2 id="network-natsetup">
<title>Einrichtung</title>
<para>Wegen der begrenzten Verfügbarkeit von IPv4-Adressen
und der gestiegenen Anzahl von Breitbandverbindungen über
Kabelmodem oder DSL, wird die gemeinsame Nutzung von
Internetverbindungen immer wichtiger. Der &man.natd.8;-Daemon
ermöglicht die Anbindung von mehreren Rechnern an das
Internet unter Nutzung einer gemeinsamen Verbindung und einer
IP-Adresse.</para>
<para>Häufig soll ein über Kabelmodem oder DSL und eine
IP-Adresse an das Internet angebundener Rechner mehreren
Rechnern eines lokalen Netzwerks Internetdienste anbieten.</para>
<para>Um dies zu ermöglichen, muss der FreeBSD-Rechner als
Gateway fungieren. Dazu sind zwei Netzwerkkarten notwendig. Eine
für die Verbindung zum Internet, die zweite für die
Verbindung mit dem lokalen Netzwerk. Sämtliche Rechner
des lokalen Netzwerks sind über einen Hub oder einen Switch
miteinander verbunden.</para>
<note>
<para>Es gibt verschiedene Möglichkeiten, ein LAN über
ein &os;-Gateway an das Internet anzubinden. Das folgende
Beispiel beschreibt ein Gateway, das zumindest zwei
Netzwerkkarten enthält.</para>
</note>
<mediaobject>
<imageobject>
<imagedata fileref="advanced-networking/natd"/>
</imageobject>
<textobject>
<literallayout class="monospaced"> _______ __________ ________
| | | | | |
| Hub |-----| Client B |-----| Router |----- Internet
|_______| |__________| |________|
|
____|_____
| |
| Client A |
|__________|</literallayout>
</textobject>
<textobject>
<phrase>Network Layout</phrase>
</textobject>
</mediaobject>
<para>Eine derartige Netzwerkkonfiguration wird vor allem zur
gemeinsamen Nutzung einer Internetverbindung verwendet. Ein
Rechner des lokalen Netzwerks (<acronym>LAN</acronym>) ist mit
dem Internet verbunden. Alle anderen Rechner des lokalen
Netzwerks haben nur über diesen
<quote>Gateway</quote>-Rechner Zugriff auf das Internet.</para>
</sect2>
<sect2 id="network-natdloaderconfiguration">
<title>Boot Loader Konfiguration</title>
<indexterm>
<primary>boot loader</primary>
<secondary>configuration</secondary>
</indexterm>
<para>Die Kerneleigenschaften für Network Address Translation mit
&man.natd.8; sind im <filename>GENERIC</filename>-Kernel nicht
aktiviert, können aber bereits zur Bootzeit geladen werden, indem
ein paar Zeilen in die Datei <filename>/boot/loader.conf</filename>
hinzugefügt werden:</para>
<programlisting>ipfw_load="YES"
ipdivert_load="YES"</programlisting>
<para>Zusätzlich kann die Option
<literal>net.inet.ip.fw.default_to_accept</literal> auf
<literal>1</literal> gesetzt werden:</para>
<programlisting>net.inet.ip.fw.default_to_accept="1"</programlisting>
<note>
<para>Es ist eine gute Idee, diese Option während den ersten
Versuchen, eine Firewall und ein NAT-Gateway aufzusetzen, zu
aktivieren. Damit ist die Standardvorgehensweise von &man.ipfw.8;
diejenige, <literal>allow ip from any to any</literal>, anstatt der
weniger freizügigen <literal>deny ip from any to any</literal>.
Es wird dadurch etwas schwieriger, sich aus Versehen nach einem
Neustart aus dem System auszusperren.</para>
</note>
</sect2>
<sect2 id="network-natdkernconfiguration">
<title>Kernelkonfiguration</title>
<indexterm>
<primary>Kernel</primary>
<secondary>Konfiguration</secondary>
</indexterm>
<para>Wenn Module nicht in Frage kommen oder Sie bevorzugen, alle
notwendigen Eigenschaften in den laufenden Kernel einzubauen,
müssen die folgenden Optionen in die Kernelkonfigurationsdatei
eingetragen werden:</para>
<programlisting>options IPFIREWALL
options IPDIVERT</programlisting>
<para>Die folgende Optionen können ebenfalls eingetragen
werden:</para>
<programlisting>options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE</programlisting>
</sect2>
<sect2 id="network-natdsystemconfiguration">
<title>System Bootkonfiguration</title>
<para>Um Firewall- und NAT-Unterstützung zur Bootzeit zu aktivieren,
tragen Sie Folgendes in <filename>/etc/rc.conf</filename> ein:</para>
<programlisting>gateway_enable="YES" <co id="co-natd-gateway-enable"/>
firewall_enable="YES" <co id="co-natd-firewall-enable"/>
firewall_type="OPEN" <co id="co-natd-firewall-type"/>
natd_enable="YES"
natd_interface="<replaceable>fxp0</replaceable>" <co id="co-natd-natd-interface"/>
natd_flags="" <co id="co-natd-natd-flags"/></programlisting>
<calloutlist>
<callout arearefs="co-natd-gateway-enable">
<para>Richtet den Rechner als Gateway ein. Die
Ausführung von
<command>sysctl net.inet.ip.forwarding=1</command>
hätte den gleichen Effekt.</para>
</callout>
<callout arearefs="co-natd-firewall-enable">
<para>Aktiviert die Firewallregeln in
<filename>/etc/rc.firewall</filename> beim
Systemstart.</para>
</callout>
<callout arearefs="co-natd-firewall-type">
<para>Ein vordefinierter Satz von Firewallregeln, der alle
Pakete durchlässt. Sehen Sie sich
<filename>/etc/rc.firewall</filename> an, wenn Sie diese
Option verwenden wollen.</para>
</callout>
<callout arearefs="co-natd-natd-interface">
<para>Die Netzwerkkarte, die Pakete weiterleitet (und mit dem
Internet verbunden ist).</para>
</callout>
<callout arearefs="co-natd-natd-flags">
<para>Zusätzliche Konfigurationsoptionen, die beim
Systemstart an &man.natd.8; übergeben werden.</para>
</callout>
</calloutlist>
<para>Durch die Definition dieser Optionen in
<filename>/etc/rc.conf</filename> wird die Anweisung
<command>natd -interface fxp0</command> beim Systemstart
ausgeführt. Dies kann aber auch manuell erfolgen.</para>
<note>
<para>Falls Sie viele Optionen an &man.natd.8; übergeben
müssen, können Sie auch eine Konfigurationsdatei
verwenden. Dazu fügen Sie folgende Zeile in
<filename>/etc/rc.conf</filename> ein:</para>
<programlisting>natd_flags="-f /etc/natd.conf"</programlisting>
<para>Die Datei <filename>/etc/natd.conf</filename> enthält
verschiedene Konfigurationsoptionen, wobei jede Option in einer
Zeile steht. Das Beispiel im nächsten Abschnitt würde
folgende Konfigurationsdatei verwenden:</para>
<programlisting>redirect_port tcp 192.168.0.2:6667 6667
redirect_port tcp 192.168.0.3:80 80</programlisting>
<para>Wenn Sie eine Konfigurationsdatei verwenden wollen, sollten
Sie sich die Handbuchseite zu &man.natd.8; durchlesen,
insbesondere den Abschnitt über die Nutzung der Option
<option>-f</option>.</para>
</note>
<para>Jedem Rechner und jeder Schnittstelle des lokalen Netzwerks
sollte eine IP-Adresse des im <ulink
url="ftp://ftp.isi.edu/in-notes/rfc1918.txt">RFC 1918</ulink>
definierten privaten Adressraums zugewiesen werden. Der
Standardgateway entspricht der internen IP-Adresse des
<application>natd</application>-Rechners.</para>
<para>Im Beispiel werden den LAN-Clients <hostid>A</hostid> und
<hostid>B</hostid> die IP-Adressen
<hostid role="ipaddr">192.168.0.2</hostid> und
<hostid role="ipaddr">192.168.0.3</hostid> zugewiesen,
während die LAN-Netzwerkkarte des
<application>natd</application>-Rechners die IP-Adresse
<hostid role="ipaddr">192.168.0.1</hostid> erhält. Der
<application>natd</application>-Rechner mit der IP-Adresse
<hostid role="ipaddr">192.168.0.1</hostid> wird als
Standardgateway für die Clients <hostid>A</hostid> und
<hostid>B</hostid> gesetzt. Die externe Netzwerkkarte des
<application>natd</application>-Rechners muss für die
korrekte Funktion von &man.natd.8; nicht konfiguriert
werden.</para>
</sect2>
<sect2 id="network-natdport-redirection">
<title>Ports umleiten</title>
<para>Wenn Sie &man.natd.8; verwenden, sind Ihre LAN-Clients von
aussen nicht erreichbar. LAN-Clients können zwar
Verbindungen nach aussen aufbauen, sind aber für
ankommende Verbindungen nicht erreichbar. Wenn Sie
Internetdienste auf einem LAN-Client anbieten wollen, haben Sie
daher ein Problem. Eine einfache Lösung ist die Umleitung
von bestimmten Internetports des
<application>natd</application>-Rechners auf einen LAN-Client.</para>
<para>Beispielsweise könnte ein IRC-Server auf Client
<hostid>A</hostid> und ein Webserver auf Client
<hostid>B</hostid> laufen. Damit diese Konfiguration
funktioniert, müssen Verbindungen, die auf den Ports 6667
(IRC) und 80 (Web) ankommen, auf die entsprechenden Clients
umgeleitet werden.</para>
<para>Dazu wird die Option <option>-redirect_port</option> unter
Nutzung folgender Syntax an &man.natd.8; übergeben:</para>
<programlisting> -redirect_port proto targetIP:targetPORT[-targetPORT]
[aliasIP:]aliasPORT[-aliasPORT]
[remoteIP[:remotePORT[-remotePORT]]]</programlisting>
<para>Für unser Beispiel heißt das:</para>
<programlisting> -redirect_port tcp 192.168.0.2:6667 6667
-redirect_port tcp 192.168.0.3:80 80</programlisting>
<para>Dadurch werden die entsprechenden
<emphasis>tcp</emphasis>-Ports auf die jeweiligen LAN-Clients
umgeleitet.</para>
<para>Mit <option>-redirect_port</option> können auch ganze
Portbereiche statt einzelner Ports umgeleitet werden. So werden
mit <replaceable>tcp 192.168.0.2:2000-3000
2000-3000</replaceable> alle Verbindungen, die auf den Ports
2000 bis 3000 ankommen, auf die entsprechenden Ports des Clients
<hostid>A</hostid> umgeleitet.</para>
<para>Diese Optionen können während des Betriebs von
&man.natd.8; oder über die Option
<literal>natd_flags=""</literal> in
<filename>/etc/rc.conf</filename> gesetzt werden.</para>
<para>Eine ausführliche Konfigurationsanleitung finden Sie
in &man.natd.8;.</para>
</sect2>
<sect2 id="network-natdaddress-redirection">
<title>Adressen umleiten</title>
<indexterm><primary>address redirection</primary></indexterm>
<para>Die Umleitung von Adressen ist nützlich, wenn mehrere
IP-Adressen verfügbar sind, die aber alle auf einem Rechner
verbleiben sollen. In diesem Fall kann &man.natd.8; jedem
LAN-Client eine eigene externe IP-Adresse zuweisen. Ausgehende
Pakete eines LAN-Clients werden so der entsprechenden
externen IP-Adresse des Clients zugeordnet. Ankommender Verkehr
für diese IP-Adresse wird automatisch an den entsprechenden
LAN-Client weitergeleitet. Diesen Vorgang bezeichnet man
auch als statisches NAT. Dem
<application>natd</application>-Gatewayrechner könnten
beispielsweise die IP-Adressen
<hostid role="ipaddr">128.1.1.1</hostid>,
<hostid role="ipaddr">128.1.1.2</hostid> sowie
<hostid role="ipaddr">128.1.1.3</hostid> zugewiesen werden.
<hostid role="ipaddr">128.1.1.1</hostid> wird als die externe
IP-Adresse des <application>natd</application>-Gatewayrechners
verwendet, während <hostid role="ipaddr">128.1.1.2</hostid>
und <hostid role="ipaddr">128.1.1.3</hostid> an die LAN-Clients
<hostid>A</hostid> und <hostid>B</hostid> weitergegeben werden.
</para>
<para><option>-redirect_address</option> benutzt folgende
Syntax:</para>
<programlisting>-redirect_address localIP publicIP</programlisting>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<tbody>
<row>
<entry>localIP</entry>
<entry>Die interne IP-Adresse des LAN-Clients</entry>
</row>
<row>
<entry>publicIP</entry>
<entry>Die externe IP-Adresse des LAN-Clients</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Für unser Beispiel hieße dies:</para>
<programlisting>-redirect_address 192.168.0.2 128.1.1.2
-redirect_address 192.168.0.3 128.1.1.3</programlisting>
<para>Analog zur Option <option>-redirect_port</option>
können Sie diese Argumente auch in der Option
<literal>natd_flags=""</literal> in
<filename>/etc/rc.conf</filename> angeben. Bei der Nutzung
der Adressumleitung ist die Portumleitung überflüssig,
weil alle für eine bestimmte IP-Adresse ankommenden Daten
umgeleitet werden.</para>
<para>Die externe IP-Adresse des
<application>natd</application>-Rechners muss aktiv sein und
der externen Netzwerkkarte zugewiesen sein. Weitere Informationen
zu diesem Thema finden Sie in &man.rc.conf.5;.</para>
</sect2>
</sect1>
<sect1 id="network-plip">
<title>PLIP &ndash; Parallel Line IP</title>
<indexterm>
<primary>PLIP</primary>
</indexterm>
<indexterm>
<primary>Parallel Line IP</primary>
<see>PLIP</see>
</indexterm>
<para>PLIP ermöglicht TCP/IP-Verbindungen zwischen zwei
Rechnern, die über ihre parallelen Schnittstellen
verbunden sind. Eine solche Verbindung ist nützlich,
wenn zwei Rechner nicht mit Netzwerkkarten ausgestattet sind,
oder wenn eine Installation auf einem Laptop erfolgen soll.
Dieser Abschnitt behandelt folgende Themen:</para>
<itemizedlist>
<listitem>
<para>Die Herstellung eines parallelen (Laplink-) Kabels</para>
</listitem>
<listitem>
<para>Die Verbindung von zwei Computern über PLIP</para>
</listitem>
</itemizedlist>
<sect2 id="network-create-parallel-cable">
<title>Ein paralleles Kabel herstellen</title>
<para>Ein paralleles (Laplink-)Kabel können Sie in fast jedem
Computergeschäft kaufen. Falls dies nicht möglich
sein sollte, oder Sie einfach wissen wollen, wie ein solches
Kabel aufgebaut ist, sollten Sie sich die folgende Tabelle
ansehen. Sie beschreibt die Herstellung eines parallelen
Netzwerkkabels aus einem gewöhnlichen parallelen
Druckerkabel.</para>
<table frame="none">
<title>Die Netzwerk-Verdrahtung eines parallelen Kabels</title>
<tgroup cols="5">
<thead>
<row>
<entry>A-Name</entry>
<entry>A-Ende</entry>
<entry>B-Ende</entry>
<entry>Beschreibung</entry>
<entry>Post/Bit</entry>
</row>
</thead>
<tbody>
<row>
<entry><literallayout>DATA0
-ERROR</literallayout></entry>
<entry><literallayout>2
15</literallayout></entry>
<entry><literallayout>15
2</literallayout></entry>
<entry>Data</entry>
<entry><literallayout>0/0x01
1/0x08</literallayout></entry>
</row>
<row>
<entry><literallayout>DATA1
+SLCT</literallayout></entry>
<entry><literallayout>3
13</literallayout></entry>
<entry><literallayout>13
3</literallayout></entry>
<entry>Data</entry>
<entry><literallayout>0/0x02
1/0x10</literallayout></entry>
</row>
<row>
<entry><literallayout>DATA2
+PE</literallayout></entry>
<entry><literallayout>4
12</literallayout></entry>
<entry><literallayout>12
4</literallayout></entry>
<entry>Data</entry>
<entry><literallayout>0/0x04
1/0x20</literallayout></entry>
</row>
<row>
<entry><literallayout>DATA3
-ACK</literallayout></entry>
<entry><literallayout>5
10</literallayout></entry>
<entry><literallayout>10
5</literallayout></entry>
<entry>Strobe</entry>
<entry><literallayout>0/0x08
1/0x40</literallayout></entry>
</row>
<row>
<entry><literallayout>DATA4
BUSY</literallayout></entry>
<entry><literallayout>6
11</literallayout></entry>
<entry><literallayout>11
6</literallayout></entry>
<entry>Data</entry>
<entry><literallayout>0/0x10
1/0x80</literallayout></entry>
</row>
<row>
<entry>GND</entry>
<entry>18-25</entry>
<entry>18-25</entry>
<entry>GND</entry>
<entry>-</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2 id="network-plip-setup">
<title>PLIP einrichten</title>
<para>Als Erstes benötigen Sie ein Laplink-Kabel. Danach
müssen Sie sicherstellen, dass beide Computerkernel den
&man.lpt.4;-Treiber unterstützen:</para>
<screen>&prompt.root; <userinput>grep lp /var/run/dmesg.boot</userinput>
lpt0: &lt;Printer&gt; on ppbus0
lpt0: Interrupt-driven port</screen>
<para>Der Parallelport muss Interrupt-gesteuert sein, daher
sollte die Datei <filename>/boot/device.hints</filename>
zwei Zeilen ähnlich den folgenden enthalten:</para>
<programlisting>hint.ppc.0.at="isa"
hint.ppc.0.irq="7"</programlisting>
<para>Danach überprüfen Sie, ob die
Kernelkonfigurationsdatei die Zeile
<literal>device plip</literal> enthält, oder ob das
Kernelmodul <filename>plip.ko</filename> geladen wurde. In
beiden Fällen sollte die parallele Schnittstelle
von &man.ifconfig.8; angezeigt werden:</para>
<screen>&prompt.root; <userinput>ifconfig plip0</userinput>
plip0: flags=8810&lt;POINTOPOINT,SIMPLEX,MULTICAST&gt; mtu 1500</screen>
<para>Verbinden Sie die parallelen Schnittstellen der beiden
Computer über das (Laplink-)Kabel.</para>
<para>Konfigurieren Sie die Netzwerkparameter auf beiden Rechnern
als <username>root</username>. Wenn Sie beispielsweise den Rechner
<hostid>host1</hostid> mit dem Rechner <hostid>host2</hostid>
verbinden wollen, gehen Sie folgendermaßen vor:</para>
<programlisting> host1 &lt;-----&gt; host2
IP Address 10.0.0.1 10.0.0.2</programlisting>
<para>Richten Sie die parallele Schnittstelle von
<hostid>host1</hostid> ein, indem Sie Folgendes eingeben:</para>
<screen>&prompt.root; <userinput>ifconfig plip0 10.0.0.1 10.0.0.2</userinput></screen>
<para>Danach richten Sie die parallele Schnittstelle von
<hostid>host2</hostid> ein:</para>
<screen>&prompt.root; <userinput>ifconfig plip0 10.0.0.2 10.0.0.1</userinput></screen>
<para>Sie sollten nun über eine funktionierende Verbindung
verfügen. Bei Problemen lesen Sie bitte die Hilfeseiten
&man.lp.4; sowie &man.lpt.4;.</para>
<para>Zusätzlich sollten beide Rechner in
<filename>/etc/hosts</filename> eingetragen werden:</para>
<programlisting>127.0.0.1 localhost.my.domain localhost
10.0.0.1 host1.my.domain host1
10.0.0.2 host2.my.domain host2</programlisting>
<para>Um die Verbindung zu überprüfen, pingen Sie jeden
Rechner vom anderen Rechner aus an. Auf <hostid>host1</hostid>
gehen Sie dazu folgendermaßen vor:</para>
<screen>&prompt.root; <userinput>ifconfig plip0</userinput>
plip0: flags=8851&lt;UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
inet 10.0.0.1 --&gt; 10.0.0.2 netmask 0xff000000
&prompt.root; <userinput>netstat -r</userinput>
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
host2 host1 UH 0 0 plip0
&prompt.root; <userinput>ping -c 4 host2</userinput>
PING host2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: icmp_seq=0 ttl=255 time=2.774 ms
64 bytes from 10.0.0.2: icmp_seq=1 ttl=255 time=2.530 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=255 time=2.556 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=255 time=2.714 ms
--- host2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 ms</screen>
</sect2>
</sect1>
<sect1 id="network-ipv6">
<sect1info>
<authorgroup>
<author>
<firstname>Aaron</firstname>
<surname>Kaplan</surname>
<contrib>Beigetragen von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
<contrib>Überarbeitet und erweitert von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Brad</firstname>
<surname>Davis</surname>
<contrib>Erweitert von </contrib>
</author>
</authorgroup>
</sect1info>
<title>IPv6 &ndash; Internet Protocol Version 6</title>
<para>Bei IPv6 (auch als IPng oder
<foreignphrase>IP next generation</foreignphrase>
bekannt) handelt es sich um die neueste Version des bekannten
IP-Protokolls (das auch als <acronym>IPv4</acronym> bezeichnet
wird). FreeBSD enthält, genauso wie die anderen frei
erhältlichen BSD-Systeme, die IPv6-Referenzimplementation
von KAME. FreeBSD erfüllt damit bereits
alle für die Nutzung von IPv6 nötigen Voraussetzungen.
Dieser Abschnitt konzentriert sich daher auf die Konfiguration
und den Betrieb von IPv6.</para>
<para>Anfang der 90er Jahre wurde man auf den stark steigenden
Verbrauch von IPv4-Adressen aufmerksam. Im Hinblick auf das
Wachstums des Internets gab es zwei Hauptsorgen:</para>
<itemizedlist>
<listitem>
<para>Die drohende Knappheit von IPv4-Adressen. Dieses Problem
konnte durch die Einführung von privaten
Adressräumen gemäß RFC1918 (mit Adressen wie
<hostid role="ipaddr">10.0.0.0/8</hostid>,
<hostid role="ipaddr">172.16.0.0/12</hostid>, oder
<hostid role="ipaddr">192.168.0.0/16</hostid>) sowie der
Entwicklung von <foreignphrase>Network Address
Translation</foreignphrase> (<acronym>NAT</acronym>)
weitestgehend entschärft werden.</para>
</listitem>
<listitem>
<para>Die immer größer werdenden Einträge in
Router-Tabellen. Dieses Problem ist auch heute noch
aktuell.</para>
</listitem>
</itemizedlist>
<para>IPv6 ist in der Lage, diese, aber auch viele andere Probleme
zu lösen:</para>
<itemizedlist>
<listitem>
<para>IPv6 hat einen 128&nbsp;Bit großen Adressraum. Es sind
also theoretisch
340.282.366.920.938.463.463.374.607.431.768.211.456 Adressen
verfügbar. In anderen Worten: Für jeden
Quadratmeter der Erdoberfläche sind etwa
6,67&nbsp;*&nbsp;10^27 IPv6-Adressen verfügbar.</para>
</listitem>
<listitem>
<para>Router speichern nur noch Netzwerk-Aggregationsadressen in
Ihren Routingtabellen. Dadurch reduziert sich die
durchschnittliche Größe einer Routingtabelle auf
8192&nbsp;Einträge.</para>
</listitem>
</itemizedlist>
<para>Weitere nützliche Eigenschaften von IPv6 sind:</para>
<itemizedlist>
<listitem>
<para>Die automatische Konfiguration von Adressen, die im
<ulink url="http://www.ietf.org/rfc/rfc2462.txt">RFC2462</ulink>
beschrieben wird.</para>
</listitem>
<listitem>
<para>Anycast-Adressen (<quote>eine-von-vielen</quote>)</para>
</listitem>
<listitem>
<para>Verpflichtende Multicast-Adressen</para>
</listitem>
<listitem>
<para>Die Unterstützung von IPsec (IP-Security)</para>
</listitem>
<listitem>
<para>Eine vereinfachte Headerstruktur</para>
</listitem>
<listitem>
<para>Mobile <acronym>IP</acronym>-Adressen</para>
</listitem>
<listitem>
<para>Die Umwandlung von IPv4- in IPv6-Adressen</para>
</listitem>
</itemizedlist>
<para>Weitere Informationsquellen:</para>
<itemizedlist>
<listitem>
<para>Beschreibung von IPv6 auf
<ulink url="http://playground.sun.com/pub/ipng/html/ipng-main.html">playground.sun.com</ulink>
</para>
</listitem>
<listitem>
<para><ulink url="http://www.kame.net">KAME.net</ulink></para>
</listitem>
</itemizedlist>
<sect2>
<title>Hintergrundinformationen zu IPv6-Adressen</title>
<para>Es gibt verschiedene Arten von IPv6-Adressen: Unicast-,
Anycast- und Multicast-Adressen.</para>
<para>Unicast-Adressen sind die herkömlichen Adressen. Ein
Paket, das an eine Unicast-Adresse gesendet wird, kommt nur an
der Schnittstelle an, die dieser Adresse zugeordnet ist.</para>
<para>Anycast-Adressen unterscheiden sich in ihrer Syntax nicht
von Unicast-Adressen, sie wählen allerdings aus
mehreren Schnittstellen eine Schnittstelle aus.
Ein für eine Anycast-Adresse
bestimmtes Paket kommt an der nächstgelegenen
(entsprechend der Router-Metrik) Schnittstelle
an. Anycast-Adressen werden nur von Routern verwendet.</para>
<para>Multicast-Adressen bestimmen Gruppen, denen mehrere
Schnittstellen angehören. Ein
Paket, das an eine Multicast-Adresse geschickt wird, kommt an
allen Schnittstellen an, die zur Multicast-Gruppe gehören.</para>
<note><para>Die von IPv4 bekannte Broadcast-Adresse
(normalerweise
<hostid role="ipaddr">xxx.xxx.xxx.255</hostid>) wird bei IPv6
durch Multicast-Adressen verwirklicht.</para></note>
<table frame="none">
<title>Reservierte IPv6-Adressen</title>
<tgroup cols="4">
<thead>
<row>
<entry>IPv6-Adresse</entry>
<entry>Präfixlänge</entry>
<entry>Beschreibung</entry>
<entry>Anmerkungen</entry>
</row>
</thead>
<tbody>
<row>
<entry><hostid role="ip6addr">::</hostid></entry>
<entry>128 Bit</entry>
<entry>nicht festgelegt</entry>
<entry>entspricht <hostid role="ipaddr">0.0.0.0</hostid>
bei IPv4</entry>
</row>
<row>
<entry><hostid role="ip6addr">::1</hostid></entry>
<entry>128 Bit</entry>
<entry>Loopback-Adresse</entry>
<entry>entspricht <hostid role="ipaddr">127.0.0.1</hostid>
bei IPv4</entry>
</row>
<row>
<entry><hostid
role="ip6addr">::00:xx:xx:xx:xx</hostid></entry>
<entry>96 Bit</entry>
<entry>Eingebettete IPv4-Adresse</entry>
<entry>Die niedrigen 32&nbsp;Bit entsprechen der IPv4-Adresse.
Wird auch als <quote>IPv4-kompatible IPv6-Adresse
bezeichnet</quote>.</entry>
</row>
<row>
<entry><hostid
role="ip6addr">::ff:xx:xx:xx:xx</hostid></entry>
<entry>96 Bit</entry>
<entry>Eine auf IPv6 abgebildete IPv4-Adresse</entry>
<entry>Die niedrigen 32&nbsp;Bit entsprechen der IPv4-Adresse.
Notwendig für Rechner, die IPv6 nicht
unterstützen.</entry>
</row>
<row>
<entry><hostid role="ip6addr">fe80::</hostid> - <hostid
role="ip6addr">feb::</hostid></entry>
<entry>10 Bit</entry>
<entry><foreignphrase>link-local</foreignphrase></entry>
<entry>Entspricht der Loopback-Adresse bei IPv4</entry>
</row>
<row>
<entry><hostid role="ip6addr">fec0::</hostid> - <hostid
role="ip6addr">fef::</hostid></entry>
<entry>10 Bit</entry>
<entry><foreignphrase>site-local</foreignphrase></entry>
<entry>&nbsp;</entry>
</row>
<row>
<entry><hostid role="ip6addr">ff::</hostid></entry>
<entry>8 Bit</entry>
<entry>Multicast</entry>
<entry>&nbsp;</entry>
</row>
<row>
<entry><hostid role="ip6addr">001</hostid>
(im Dualsystem)</entry>
<entry>3 Bit</entry>
<entry>Globaler Unicast</entry>
<entry>Alle globalen Unicastadressen stammen aus diesem
Pool. Die ersten 3&nbsp;Bit lauten <quote>001</quote>.
</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2>
<title>IPv6-Adressen verstehen</title>
<para>Die kanonische Form von IPv6-Adressen lautet
<hostid role="ip6addr">x:x:x:x:x:x:x:x</hostid>, jedes
<quote>x</quote> steht dabei für einen
16-Bit-Hexadezimalwert. Ein Beispiel für eine IPv6-Adresse
wäre etwa
<hostid
role="ip6addr">FEBC:A574:382B:23C1:AA49:4592:4EFE:9982</hostid>.</para>
<para>Eine IPv6-Adresse enthält oft Teilzeichenfolgen aus lauter
Nullen. Eine solche Zeichenfolge kann zu <quote>::</quote>
verkürzt werden. Bis zu drei führende Nullen eines
Hexquads können ebenfalls weggelassen werden.
<hostid role="ip6addr">fe80::1</hostid> entspricht also der Adresse
<hostid role="ip6addr">fe80:0000:0000:0000:0000:0000:0000:0001</hostid>.
</para>
<para>Eine weitere Möglichkeit ist die Darstellung der
letzten 32&nbsp;Bit in der bekannten (dezimalen) IPv4-Darstellung,
bei der Punkte (<quote>.</quote>) zur Trennung verwendet werden.
<hostid role="ip6addr">2002::10.0.0.1</hostid> ist also nur eine
andere Schreibweise für die (hexadezimale) kanonische Form
<hostid role="ip6addr">2002:0000:0000:0000:0000:0000:0a00:0001</hostid>,
die wiederum der Adresse
<hostid role="ip6addr">2002::a00:1</hostid> entspricht.</para>
<para>Sie sollten nun in der Lage sein, die folgende Ausgabe zu
verstehen:</para>
<screen>&prompt.root; <userinput>ifconfig</userinput>
rl0: flags=8943&lt;UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST&gt; mtu 1500
inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1
ether 00:00:21:03:08:e1
media: Ethernet autoselect (100baseTX )
status: active</screen>
<para>Bei
<hostid role="ip6addr">fe80::200:21ff:fe03:8e1%rl0</hostid>
handelt es sich um eine automatisch konfigurierte
<foreignphrase>link-local</foreignphrase>-Adresse. Sie
wird im Rahmen der automatischen Konfiguration aus der
MAC-Adresse erzeugt.</para>
<para>Weitere Informationen zum Aufbau von IPv6-Adressen finden
Sie im <ulink url="http://www.ietf.org/rfc/rfc3513.txt">
RFC3513</ulink>.</para>
</sect2>
<sect2>
<title>Eine IPv6-Verbindung herstellen</title>
<para>Es gibt derzeit vier Möglichkeiten, sich mit anderen
IPv6-Rechnern oder Netzwerken zu verbinden:</para>
<itemizedlist>
<listitem>
<para>Fragen Sie Ihren Internetprovider, ob er IPv6
bereits unterstützt.</para>
</listitem>
<listitem>
<para><ulink url="http://www.sixxs.net">SixXS</ulink>
bietet weltweit IPv6-Tunnelverbindungen an.</para>
</listitem>
<listitem>
<para>Die Verwendung eines 6-nach-4-Tunnels
(<ulink
url="http://www.ietf.org/rfc/rfc3068.txt">RFC3068</ulink>).</para>
</listitem>
<listitem>
<para>Die Verwendung des Ports
<filename>/usr/ports/net/freenet6</filename> bei der Einwahl
ins Internet.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>DNS in der IPv6-Welt</title>
<para>Ursprünglich gab es zwei verschiedene DNS-Einträge
für IPv6. Da A6-Einträge von der IETF für
obsolet erklärt wurden, sind AAAA-Einträge nun
Standard.</para>
<para>Weisen Sie die erhaltene IPv6-Adresse Ihrem Rechnernamen zu,
indem Sie den Eintrag</para>
<programlisting>MYHOSTNAME AAAA MYIPv6ADDR</programlisting>
<para>in Ihre primäre DNS-Zonendatei einfügen. Falls
Sie nicht für Ihre <acronym>DNS</acronym>-Zone
verantwortlich sind, bitten Sie den dafür
Zuständigen, diese Änderung durchzuführen.
Die aktuellen Versionen von <application>bind</application>
(Version&nbsp;8.3 oder 9) sowie
<filename role="package">dns/djbdns</filename> (bei Verwendung
des IPv6-Patches) unterstützen AAAA-Einträge.</para>
</sect2>
<sect2>
<title><filename>/etc/rc.conf</filename> für die Nutzung von
IPv6 anpassen</title>
<sect3>
<title>Einen Client unter IPv6 einrichten</title>
<para>Dieser Abschnitt beschreibt die Konfiguration eines
Rechners, der in Ihrem LAN als Client, aber nicht als Router
verwendet wird. Um die Schnittstelle während des
Systemstarts mit &man.rtsol.8; automatisch einzurichten,
fügen Sie folgende Zeile in
<filename>/etc/rc.conf</filename> ein:</para>
<programlisting>ipv6_enable="YES"</programlisting>
<para>Durch die folgende Zeile weisen Sie Ihrer Schnittstelle
<devicename>fxp0</devicename> die statische IP-Adresse <hostid
role="ip6addr">2001:471:1f11:251:290:27ff:fee0:2093</hostid>
zu:</para>
<programlisting>ipv6_ifconfig_fxp0="2001:471:1f11:251:290:27ff:fee0:2093"</programlisting>
<para>Um <hostid role="ip6addr">2001:471:1f11:251::1</hostid>
als Standardrouter festzulegen, fügen Sie folgende Zeile
in <filename>/etc/rc.conf</filename> ein:</para>
<programlisting>ipv6_defaultrouter="2001:471:1f11:251::1"</programlisting>
</sect3>
<sect3>
<title>Gateways und Router unter IPv6 einrichten</title>
<para>Dieser Abschnitt beschreibt, wie Sie Ihren Rechner mit
Hilfe der von Ihrem Tunnel-Anbieter erhaltenen
Anweisungen dauerhaft für die Nutzung von IPv6
einrichten. Um den Tunnel beim Systemstart
wiederherzustellen, passen Sie
<filename>/etc/rc.conf</filename> wie folgt an:</para>
<para>Listen Sie die einzurichtenden Tunnelschnittstellen
(hier <devicename>gif0</devicename>) auf:</para>
<programlisting>gif_interfaces="gif0"</programlisting>
<para>Um den lokalen Endpunkt
<replaceable>MY_IPv4_ADDR</replaceable> über diese
Schnittstelle mit dem entfernten Endpunkt
<replaceable>REMOTE_IPv4_ADDR</replaceable> zu
verbinden, verwenden Sie folgende Zeile:</para>
<programlisting>gifconfig_gif0="<replaceable>MY_IPv4_ADDR REMOTE_IPv4_ADDR</replaceable>"</programlisting>
<para>Um die Ihnen zugewiesene IPv6-Adresse als Endpunkt Ihres
IPv6-Tunnels zu verwenden, fügen Sie folgende Zeile
ein:</para>
<programlisting>ipv6_ifconfig_gif0="<replaceable>MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR</replaceable>"</programlisting>
<para>Nun müssen Sie nur noch die IPv6-Standardroute
angeben. Diese legt das andere Ende des IPv6-Tunnels
fest.</para>
<programlisting>ipv6_defaultrouter="<replaceable>MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR</replaceable>"</programlisting>
</sect3>
<sect3>
<title>Einen IPv6-Tunnel einrichten</title>
<para>Wenn Ihr Server IPv6-Verkehr zwischen Ihrem Netzwerk und
der Außenwelt routen muss, benötigen Sie
zusätzlich die folgenden Zeilen in Ihrer
<filename>/etc/rc.conf</filename>:</para>
<programlisting>ipv6_gateway_enable="YES"</programlisting>
</sect3>
</sect2>
<sect2>
<title>Bekanntmachung von Routen und automatische
Rechnerkonfiguration</title>
<para>Dieser Abschnitt beschreibt die Einrichtung von
&man.rtadvd.8;, das Sie bei der Bekanntmachung der
IPv6-Standardroute unterstützt.</para>
<para>Um &man.rtadvd.8; zu aktivieren, fügen Sie folgende
Zeile in <filename>/etc/rc.conf</filename> ein:</para>
<programlisting>rtadvd_enable="YES"</programlisting>
<para>Es ist wichtig, die Schnittstelle anzugeben, über die
IPv6-Routen bekanntgemacht werden sollen. Soll &man.rtadvd.8;
<devicename>fxp0</devicename> verwenden, ist folgender Eintrag
nötig:</para>
<programlisting>rtadvd_interfaces="fxp0"</programlisting>
<para>Danach erzeugen Sie die Konfigurationsdatei
<filename>/etc/rtadvd.conf</filename>. Dazu ein Beispiel:</para>
<programlisting>fxp0:\
:addrs#1:addr="2001:471:1f11:246::":prefixlen#64:tc=ether:</programlisting>
<para>Ersetzen Sie dabei <devicename>fxp0</devicename> durch die
zu verwendende Schnittstelle.</para>
<para>Anschließend ersetzen Sie
<hostid role="ip6addr">2001:471:1f11:246::</hostid> durch das
Präfix der Ihnen zugewiesenen Verbindung.</para>
<para>Wenn Sie eine <hostid role="netmask">/64</hostid>-Netzmaske
verwenden, müssen Sie keine weiteren Anpassungen vornehmen.
Anderenfalls müssen Sie <literal>prefixlen#</literal>
auf den korrekten Wert setzen.</para>
</sect2>
</sect1>
<sect1 id="network-atm">
<sect1info>
<authorgroup>
<author>
<firstname>Harti</firstname>
<surname>Brandt</surname>
<contrib>Beigetragen von </contrib>
</author>
</authorgroup>
</sect1info>
<title>ATM - Asynchronous Transfer Mode</title>
<sect2>
<title><foreignphrase>Classical IP over ATM</foreignphrase>
als PVC-Verbindung einrichten</title>
<para><foreignphrase>Classical IP over ATM</foreignphrase>
(<acronym>CLIP</acronym>) ist die einfachste Möglichkeit,
um IP-Verkehr über ATM (<foreignphrase>Asynchronous
Transfer Mode</foreignphrase>-Verbindungen zu übertragen.
CLIP kann sowohl mit geschalteten Verbindungen (SVCs) als auch
mit permanenten Verbindungen (PVCs) verwendet werden. Dieser
Abschnitt beschreibt die Einrichtung eines PVC-basierten
Netzwerks.</para>
<sect3>
<title>Ein vollständig vermaschtes Netzwerk aufbauen</title>
<para>Bei einem vollständig vermaschten
(<foreignphrase>fully meshed</foreignphrase>) Netzwerk ist
jeder Rechner über eine dezidierte Verbindung mit jedem
anderen Rechner des Netzwerks verbunden. Die Konfiguration
ist - vor allem für kleinere Netzwerke - relativ einfach.
Unser Beispielnetzwerk besteht aus vier Rechnern, die jeweils
über eine
<acronym role="Asynchronous Transfer Mode">ATM</acronym>-Adapterkarte
mit dem
<acronym role="Asynchronous Transfer Mode">ATM</acronym>-Netzwerk
verbunden sind. Als ersten Konfigurationsschritt planen wir
die Vergabe von IP-Adressen sowie die anzulegenden
<acronym role="Asynchronous Transfer Mode">ATM</acronym>-Verbindungen:
</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<colspec colwidth="1*"/>
<colspec colwidth="1*"/>
<thead>
<row>
<entry>Rechner</entry>
<entry>IP-Adresse</entry>
</row>
</thead>
<tbody>
<row>
<entry><hostid>hostA</hostid></entry>
<entry><hostid role="ipaddr">192.168.173.1</hostid></entry>
</row>
<row>
<entry><hostid>hostB</hostid></entry>
<entry><hostid role="ipaddr">192.168.173.2</hostid></entry>
</row>
<row>
<entry><hostid>hostC</hostid></entry>
<entry><hostid role="ipaddr">192.168.173.3</hostid></entry>
</row>
<row>
<entry><hostid>hostD</hostid></entry>
<entry><hostid role="ipaddr">192.168.173.4</hostid></entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Um ein vollständiges Netz aufzubauen, benötigen
wir für jedes Rechnerpaar eine eigene ATM-Verbindung:</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<colspec colwidth="1*"/>
<colspec colwidth="1*"/>
<thead>
<row>
<entry>Rechnerpaar</entry>
<entry>VPI.VCI-Paar</entry>
</row>
</thead>
<tbody>
<row>
<entry><hostid>hostA</hostid> - <hostid>hostB</hostid></entry>
<entry>0.100</entry>
</row>
<row>
<entry><hostid>hostA</hostid> - <hostid>hostC</hostid></entry>
<entry>0.101</entry>
</row>
<row>
<entry><hostid>hostA</hostid> - <hostid>hostD</hostid></entry>
<entry>0.102</entry>
</row>
<row>
<entry><hostid>hostB</hostid> - <hostid>hostC</hostid></entry>
<entry>0.103</entry>
</row>
<row>
<entry><hostid>hostB</hostid> - <hostid>hostD</hostid></entry>
<entry>0.104</entry>
</row>
<row>
<entry><hostid>hostC</hostid> - <hostid>hostD</hostid></entry>
<entry>0.105</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Die Werte VPI und VCI an den Verbindungsenden können
natürlich unterschiedlich sein. Wir nehmen hier aber an,
dass sie gleich sind. Nun müssen wir die
ATM-Schnittstellen auf jedem Rechner einrichten:</para>
<screen>hostA&prompt.root; <userinput>ifconfig hatm0 192.168.173.1 up</userinput>
hostB&prompt.root; <userinput>ifconfig hatm0 192.168.173.2 up</userinput>
hostC&prompt.root; <userinput>ifconfig hatm0 192.168.173.3 up</userinput>
hostD&prompt.root; <userinput>ifconfig hatm0 192.168.173.4 up</userinput></screen>
<para>Dabei setzen wir voraus, dass
<devicename>hatm0</devicename> auf allen Rechnern die
ATM-Schnittstelle darstellt. Danach werden, beginnend mit
<hostid>hostA</hostid>, die PVCs auf den einzelnen Rechnern
eingerichtet (Wir nehmen an, dass die PVCs auf den
ATM-Switches bereits eingerichet sind. Lesen Sie die
entsprechenden Handbücher, wenn Sie einen Switch
einrichten müssen.):</para>
<screen>hostA&prompt.root; <userinput>atmconfig natm add 192.168.173.2 hatm0 0 100 llc/snap ubr</userinput>
hostA&prompt.root; <userinput>atmconfig natm add 192.168.173.3 hatm0 0 101 llc/snap ubr</userinput>
hostA&prompt.root; <userinput>atmconfig natm add 192.168.173.4 hatm0 0 102 llc/snap ubr</userinput>
hostB&prompt.root; <userinput>atmconfig natm add 192.168.173.1 hatm0 0 100 llc/snap ubr</userinput>
hostB&prompt.root; <userinput>atmconfig natm add 192.168.173.3 hatm0 0 103 llc/snap ubr</userinput>
hostB&prompt.root; <userinput>atmconfig natm add 192.168.173.4 hatm0 0 104 llc/snap ubr</userinput>
hostC&prompt.root; <userinput>atmconfig natm add 192.168.173.1 hatm0 0 101 llc/snap ubr</userinput>
hostC&prompt.root; <userinput>atmconfig natm add 192.168.173.2 hatm0 0 103 llc/snap ubr</userinput>
hostC&prompt.root; <userinput>atmconfig natm add 192.168.173.4 hatm0 0 105 llc/snap ubr</userinput>
hostD&prompt.root; <userinput>atmconfig natm add 192.168.173.1 hatm0 0 102 llc/snap ubr</userinput>
hostD&prompt.root; <userinput>atmconfig natm add 192.168.173.2 hatm0 0 104 llc/snap ubr</userinput>
hostD&prompt.root; <userinput>atmconfig natm add 192.168.173.3 hatm0 0 105 llc/snap ubr</userinput></screen>
<para>Statt UBR können auch andere
<foreignphrase>traffic contracts</foreignphrase> verwendet
werden. Voraussetzung ist allerdings, dass diese von Ihrem
ATM-Adapter unterstützt werden. Ist dies der Fall,
folgen auf den Namen des
<foreignphrase>traffic contracts</foreignphrase> die
entsprechenden Konfigurationsparameter. Weitere Informationen
zur Konfiguration von ATM-Adapterkarten erhalten Sie über
den Befehl</para>
<screen>&prompt.root; <userinput>atmconfig help natm add</userinput></screen>
<para>oder durch das Lesen von &man.atmconfig.8;.</para>
<para>Die Konfiguration von ATM-Adaptern kann auch über die
Datei <filename>/etc/rc.conf</filename> erfolgen. Für
<hostid>hostA</hostid> sähe die Konfiguration so
aus:</para>
<programlisting>network_interfaces="lo0 hatm0"
ifconfig_hatm0="inet 192.168.173.1 up"
natm_static_routes="hostB hostC hostD"
route_hostB="192.168.173.2 hatm0 0 100 llc/snap ubr"
route_hostC="192.168.173.3 hatm0 0 101 llc/snap ubr"
route_hostD="192.168.173.4 hatm0 0 102 llc/snap ubr"</programlisting>
<para>Mit dem folgenden Befehl lässt sich der derzeitige
Status aller <acronym>CLIP</acronym>-Routen anzeigen:</para>
<screen>hostA&prompt.root; <userinput>atmconfig natm show</userinput></screen>
</sect3>
</sect2>
</sect1>
<sect1 id="carp">
<sect1info>
<authorgroup>
<author>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
<contrib>Beigetragen von </contrib>
</author>
</authorgroup>
</sect1info>
<title>CARP - Common Address Redundancy Protocol</title>
<indexterm><primary>CARP</primary></indexterm>
<indexterm><primary>Common Address Redundancy Protocol (CARP)</primary></indexterm>
<para>Das <foreignphrase>Common Address Redundancy
Protocol</foreignphrase> (<acronym>CARP</acronym>) erlaubt es,
mehreren Rechnern die gleiche <acronym>IP</acronym>-Adresse
zuzuweisen. Durch ein solches Vorgehen läßt sich
beispielsweise die Verfügbarkeit bestimmter Dienste
verbessern oder die Last zwischen einzelnen Systemen besser
verteilen. Den auf diese Art und Weise konfigurierten Systemen
kann zusätzlich eine eigene (im Netzwerk eindeutige)
<acronym>IP</acronym>-Adresse zugewiesen werden (wie dies auch
im folgenden Beispiel erfolgt).</para>
<para>Um <acronym>CARP</acronym> zu aktivieren, müssen Sie die
&os;-Kernelkonfigurationsdatei um die folgende Option erweitern
und danach den &os;-Kernel (wie in <xref
linkend="kernelconfig"/> beschrieben) neu bauen:</para>
<programlisting>device carp</programlisting>
<para>Alternativ können Sie aber auch das Kernelmodul
<filename>if_carp.ko</filename> beim Systemstart
automatisch laden. Dazu nehmen Sie die folgende Zeile
in die Datei <filename>/boot/loader.conf</filename>
auf:</para>
<programlisting>if_carp_load="YES"</programlisting>
<para>Danach ist <acronym>CARP</acronym> auf Ihrem System
verfügbar und kann über verschiedene
<command>sysctl</command>-Optionen (<acronym>OID</acronym>s)
gesteuert werden.</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<thead>
<row>
<entry>OID</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry><varname>net.inet.carp.allow</varname></entry>
<entry>Akzeptiert ankommende <acronym>CARP</acronym>-Pakete.
In der Voreinstellung aktiviert.</entry>
</row>
<row>
<entry><varname>net.inet.carp.preempt</varname></entry>
<entry>Diese Option deaktiviert alle
<acronym>CARP</acronym>-Geräte, sobald eines von
ihnen ausfällt. In der Voreinstellung
deaktiviert.</entry>
</row>
<row>
<entry><varname>net.inet.carp.log</varname></entry>
<entry>Hat diese Variable den Wert <literal>0</literal>, wird
kein Protokoll generiert, während mit dem Wert
<literal>1</literal> nur inkorrekte
<acronym>CARP</acronym>-Pakete protokolliert werden. Hat
die Variable einen Wert größer
<literal>1</literal>, werden nur die Statuswechsel von
<acronym>CARP</acronym>-Geräten protokolliert. In der
Voreinstellung hat diese Variable den Wert
<literal>1</literal>.</entry>
</row>
<row>
<entry><varname>net.inet.carp.arpbalance</varname></entry>
<entry>Gleicht die Netzwerklast im lokalen Netzwerk durch
den Einsatz von <acronym>ARP</acronym> aus. In der
Voreinstellung deaktiviert.</entry>
</row>
<row>
<entry><varname>net.inet.carp.suppress_preempt</varname></entry>
<entry>Eine nur lesbare <acronym>OID</acronym>, die
den <foreignphrase>Preemption Suppression</foreignphrase>-Status
anzeigt. Preemption kann verhindert werden. Dies auch dann,
wenn ein Gerät ausfällt. Hat die Variable
den Wert <literal>0</literal>, bedeutet dies, dass Preemption
nicht verhindert wird. Tritt ein Problem auf, wird der Wert
dieser <acronym>OID</acronym> um <literal>1</literal>
erhöht.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Das <acronym>CARP</acronym>-Gerät selbst erzeugen Sie mit dem
<command>ifconfig</command>-Befehl:</para>
<screen>&prompt.root; <userinput>ifconfig carp0 create</userinput></screen>
<para>Damit Sie dieses Protokoll in Ihrem Netzwerk einsetzen
können, muss jede Netzwerkkarte eine eindeutige
Identifikationsnummer, die sogenannte <acronym>VHID</acronym>
(<foreignphrase>Virtual Host Identification</foreignphrase>),
besitzen, da sich ansonsten die Rechner Ihres Netzwerks nicht
voneinander unterscheiden lassen.</para>
<sect2>
<title>Die Serververfügbarkeit mit CARP
verbessern</title>
<para>Wie bereits weiter oben erwähnt wurde, können Sie
<acronym>CARP</acronym> dazu verwenden, die Verfübarkeit
Ihrer Server zu verbessern. Im folgenden Bespiel werden
insgesamt drei Server (mit jeweils eigener, eindeutiger
<acronym>IP</acronym>-Adresse), die alle den gleichen Inhalt
anbieten, in einer <foreignphrase>Round Robin</foreignphrase>
<acronym>DNS</acronym>-Konfiguration eingerichtet.
Der Backup-Server verfügt über zwei
<acronym>CARP</acronym>-Schnittstellen (für die beiden
<acronym>IP</acronym>-Adressen der Content-Server). Tritt bei
einem Content-Server ein Problem auf, übernimmt der
Backup-Server die <acronym>IP</acronym>-Adresse des
ausgefallenen Servers. Dadurch sollte die Auswahl eines Servers
vom Anwender nicht bemerkt werden. Der Backup-Server muss
identisch konfiguriert sein und die gleichen Daten und Dienste
anbieten wie das System, das er ersetzen soll.</para>
<para>Die beiden Content-Server werden (abgesehen von ihren
jeweiligen Hostnamen und <acronym>VHID</acronym>s) identisch
konfiguriert und heißen in unserem Beispiel
<hostid>hosta.example.org</hostid> beziehungsweise
<hostid>hostb.example.org</hostid>. Damit Sie
<acronym>CARP</acronym> einsetzen können, müssen
Sie als Erstes die Datei <filename>rc.conf</filename> auf
beiden Systemen anpassen. Für das System
<hostid>hosta.example.org</hostid> nehmen Sie dazu folgende
Zeilen in <filename>rc.conf</filename> auf:</para>
<programlisting>hostname="hosta.example.org"
ifconfig_fxp0="inet 192.168.1.3 netmask 255.255.255.0"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 pass testpass 192.168.1.50/24"</programlisting>
<para>Für das System <hostid>hostb.example.org</hostid>
benötigen Sie zusätzlich folgende Zeilen in
<filename>rc.conf</filename>:</para>
<programlisting>hostname="hostb.example.org"
ifconfig_fxp0="inet 192.168.1.4 netmask 255.255.255.0"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 2 pass testpass 192.168.1.51/24"</programlisting>
<note>
<para>Achten Sie unbedingt darauf, dass die durch die Option
<option>pass</option> an <command>ifconfig</command>
übergebenen Passwörter auf beiden Systemen
identisch sind, da
<devicename>carp</devicename>-Geräte nur mit Systemen
kommunizieren können, die über ein korrektes Passwort
verfügen. Beachten Sie weiters, dass sich die
<acronym>VHID</acronym>s der beiden Systeme unterscheiden
müssen.</para>
</note>
<para>Nun richten Sie noch das dritte System,
<hostid>provider.example.org</hostid>, ein, das aktiviert
wird, wenn eines der beiden zuvor konfigurierten Systeme
ausfällt. Dieses dritte System benötigt zwei
<devicename>carp</devicename>-Geräte, um bei Bedarf
eines der beiden anderen
Systeme ersetzen zu können. Dazu konfigurieren Sie
<filename>rc.conf</filename> analog zur folgenden
Beispielkonfiguration:</para>
<programlisting>hostname="provider.example.org"
ifconfig_fxp0="inet 192.168.1.5 netmask 255.255.255.0"
cloned_interfaces="carp0 carp1"
ifconfig_carp0="vhid 1 advskew 100 pass testpass 192.168.1.50/24"
ifconfig_carp1="vhid 2 advskew 100 pass testpass 192.168.1.51/24"</programlisting>
<para>Durch die beiden <devicename>carp</devicename>-Geräte
ist es <hostid>provider.example.org</hostid> möglich,
festzustellen, ob eines der beiden anderen Systeme nicht mehr
reagiert. In diesem Fall übernimmt
<hostid>provider.example.org</hostid> die
<acronym>IP</acronym>-Adresse des betroffenen Systems.</para>
<note>
<para>Ist im installierten &os;-Kernel die Option
"preemption" aktiviert, kann es sein, dass
<hostid>provider.example.org</hostid> die übernommene
<acronym>IP</acronym>-Adresse nicht mehr an den
Content-Server zurückgibt (wenn dieser wieder
funktioniert). In diesem Fall muss ein Administrator die
entsprechende Schnittstelle dazu zwingen, dies zu tun.
Dazu gibt er auf dem Rechner
<hostid>provider.example.org</hostid> den folgenden
Befehl ein:</para>
<screen>&prompt.root; <userinput>ifconfig carp0 down && ifconfig carp0 up</userinput></screen>
<para>Dieser Befehl muss auf das
<devicename>carp</devicename>-Gerät ausgeführt
werden, das dem betroffenen System zugeordnet ist.</para>
</note>
<para>Damit ist <acronym>CARP</acronym> vollständig
konfiguriert und der Testbetrieb kann beginnen. Zuvor
müssen Sie allerdings noch alle Systeme neu starten
(beziehungsweise die Netzwerkkonfiguration auf allen
Systemen neu einlesen), um die Einstelllungen zu
übernehmen.</para>
<para>Für weitere Informtionen lesen Sie bitte die Manualpage
&man.carp.4;.</para>
</sect2>
</sect1>
</chapter>