<?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; 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>=></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] <--ether--> [Local1] <--PPP--> [ISP-Serv] <--ether--> [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 v4, OSPF 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; 802.11. Sie bestehen aus Stationen, die in der Regel im 2,4 GHz- oder im 5 GHz-Band miteinander kommunizieren. Es ist aber auch möglich, dass regional andere Frequenzen, beispielsweise im 2,3 GHz- oder 4,9 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 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 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 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; 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; 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; 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; 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; 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: <Atheros 5212> 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; 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; 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; 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 Bit langes Sync-Feld (im Gegensatz zu einer langen Präambel, die ein 128 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; 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 GHz-Band (802.11g), aber nicht innerhalb des 5 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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>" >> /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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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 <adhoc> 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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 <adhoc> 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<STA,FF,TURBOP,IBSS,HOSTAP,AHDEMO,TXPMGT,SHSLOT,SHPREAMBLE,MONITOR,MBSS,WPA1,WPA2,BURST,WME,WDS,BGSCAN,TXFRAG> cryptocaps=1f<WEP,TKIP,AES,AES_CCM,TKIPMIC></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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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 <hostap> 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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 <hostap> 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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 <hostap> 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 => 0xc80000<assoc,auth,scan></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 <3-Slot> <5-Slot> <Encryption> <Slot offset> <Timing accuracy> <Switch> <Hold mode> <Sniff mode> <Park mode> <RSSI> <Channel quality> <SCO link> <HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD> <Paging scheme> <Power control> <Transparent SCO data> 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> get telecom/devinfo.txt Success, response: OK, Success (0x20) obex> put new.vcf Success, response: OK, Success (0x20) obex> 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 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 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<BROADCAST,SIMPLEX,MULTICAST> 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 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 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 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 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 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP> port 3 priority 128 path cost 200000 proto rstp role designated state forwarding member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP> 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 Tree ebenfalls aktiviert:</para> <screen>bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP> port 4 priority 128 path cost 200000 proto rstp role root state forwarding member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP> 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 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 Port</foreignphrase> verschickt. Auf einer Bridge können beliebig viele Span Ports festgelegt werden. Wird eine Schnittstelle als Span 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 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 ðerchannel;</term> <listitem> <para>&cisco; Fast ðerchannel; (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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> ether 00:05:5d:71:8d:b8 media: Ethernet autoselect status: active laggproto lacp laggport: fxp1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING> laggport: fxp0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING></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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> ether 00:05:5d:71:8d:b8 media: Ethernet autoselect status: active laggproto failover laggport: fxp1 flags=0<> laggport: fxp0 flags=5<MASTER,ACTIVE></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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4> ether 00:21:70:da:ae:37 inet6 fe80::221:70ff:feda:ae37%bge0 prefixlen 64 scopeid 0x2 nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> media: Ethernet autoselect (1000baseT <full-duplex>) 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> ether 00:21:70:da:ae:37 media: Ethernet autoselect status: active laggproto failover laggport: wlan0 flags=0<> laggport: bge0 flags=5<MASTER,ACTIVE></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çois</firstname> <surname>Dockè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; 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 && make buildkernel make installworld && 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 – 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 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 Kbs. Dies selbst dann, wenn Sie eine Verbindung mit 128 Kbs haben. Um die volle Leistungsfähigkeit von ISDN (128 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 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 – 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: <Printer> 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<POINTOPOINT,SIMPLEX,MULTICAST> 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 <-----> 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<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.1 --> 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 – 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 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 * 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 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 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 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> </entry> </row> <row> <entry><hostid role="ip6addr">ff::</hostid></entry> <entry>8 Bit</entry> <entry>Multicast</entry> <entry> </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 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 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<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> 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 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>