Bridging mini-HOWTO <author>Ralph Wetzel (<tt>Ralph.Wetzel@munich.netsurf.de</tt>) <date>v1.0-2, 22. Oktober 1996 <abstract> Dieses mini-HOWTO erklärt in einfachen Worten und ziemlich schnell, wie man einen Linux-Rechner als Bridge einrichtet. Es basiert (im Moment noch zu 100%) auf dem "Bridging mini-HOWTO v1.03" von <tt><htmlurl url="mailto:chris@polymer.uakron.edu" name="Chris Cole"></tt>. </abstract> <toc> <sect> Installation <p><enum> <item>Man besorge sich die <em>Bridge Config</em>-Tools: <tscreen> <htmlurl url="ftp://shadow.cabi.net/pub/Linux/BRCFG.tgz" name="shadow.cabi.net:/pub/Linux/BRCFG.tgz"> </tscreen> <item>Man besorge sich und <bf>lese</bf> das <em>Multiple ethernet mini-HOWTO</em>: <tscreen> <htmlurl url="ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini/Multiple-Ethernet" name="metalab.unc.edu:/pub/Linux/docs/HOWTO/mini/Multiple-Ethernet"> </tscreen> <item>Man bringe seinem Rechner bei, mehrere Ethernet-Karten zu verwalten, indem man die folgende Zeile in <tt>/etc/lilo.conf</tt> einfügt, und anschließend <tt>lilo</tt> startet: <tscreen><verb>append = "ether=0,0,eth1"</verb></tscreen> Ist der zukünftige Bridge-Rechner mit drei Ethernet-Karten bestückt, so sollte man diese Zeile verwenden: <tscreen><verb>append = "ether=0,0,eth1 ether=0,0,eth2"</verb></tscreen> Je mehr <tt>ether</tt>-Anweisungen man einfügt, desto mehr Karten kann Linux finden. Standardmäßig testet ein Linux Kernel nur die Anwesenheit einer einzigen Ethernet-Karte, und beendet die Suche, nachdem er sie gefunden hat. Die <tt>ether</tt>-Anweisungen fordern den Kernel auf, die Suche zusätzlich auf weitere Karten auszudehnen. <p> Als Alternative zur Veränderung der <tt>/etc/lilo.conf</tt> können die Anweisungen als Boot-Parameter übergeben werden: <tscreen><verb>linux ether=0,0,eth1</verb></tscreen> Oder, bei drei installierten Karten: <tscreen><verb>linux ether=0,0,eth1 ether=0,0,eth2</verb></tscreen> <item> <label id="Installation 4.">Man erstelle einen Kernel mit <em>bridging</em>-Fähigkeiten. Dazu sind, während der Kernel-Konfiguration, auf <tt>'y'</tt> zu setzen: <p> <itemize> <item> die einzige Option in <tt>Code maturity level options</tt>. <item><tt>Bridging (EXPERIMENTAL)</tt> in <tt>Networking options</tt>. </itemize> <item> Eine Bridge sollte keine IP Adresse haben. Sie <em>kann</em>, aber eine reine Bridge benötigt keine. Um die IP Adressen der Bridge zu entfernen, gehe man zu <tt>/etc/sysconfig/network-scripts/</tt> (für ein <bf>RedHat</bf> System) und kopiere <tt>ifcfg-lo0</tt> nach <tt>ifcfg-eth0</tt> & <tt>ifcfg-eth1</tt>. In diesen Files ändere man die Zeile <tt>'DEVICE=lo'</tt> in <tt>'DEVICE=eth0'</tt> bzw. <tt>'DEVICE=eth1'</tt>. Soll die Bridge mehr als zwei Ethernet-Karten beinhalten, sind die entsprechenden Files auch für die restlichen Karten einzurichten. <p> Für andere Distributionen, wie z.B. <bf>S.u.S.E.</bf>, muß man hier etwas anders vorgehen. Darauf werde ich in zukünftigen Versionen dieses HOWTO's näher eingehen. :)) <item> Man <em>reboote</em> den Rechner, so daß nun <p> <itemize> <item> der Kernel <em>bridging</em>-Fähigkeiten besitzt <item> die Ethernet-Karten eingerichtet und <item> möglichst an <bf>keine</bf> IP Adresse gebunden sind. </itemize> <item> Ist das System wieder zurück, sind die Ethernet-Karten in den <em>promiscous-mode</em> zu setzen, so daß sie jedes <em>packet</em> annehmen, welches sie erreicht. Dabei ist darauf zu achten, daß <bf>jede</bf> Karte, die an einen Netzwerk-Bereich angeschlossen ist, der über die Bridge angebunden werden soll, in diesen Modus zu schalten ist: <tscreen><verb> ifconfig promisc eth0 ; ifconfig promisc eth1 </verb></tscreen> <item> Man schalte die Bridge mittels des Programms <tt>brcfg</tt> <bf>EIN</bf>: <tscreen><verb>brcfg -ena</verb></tscreen> <item> Der Netzverkehr auf den einzelnen Karten sollte sich unterscheiden. Man überprüfe dies mittels: <tscreen><verb> tcpdump -i eth0 (in einem Fenster) tcpdump -i eth1 (in einem anderen Fenster) </verb></tscreen> <item> Startet man einen <em>sniffer</em> oder <tt>tcpdump</tt> auf einem anderen Rechner, kann man überprüfen, ob die Bridge die einzelnen Teile des Netzwerks richtig verwaltet. </enum> <sect> FAQ - Normale Probleme <p> <itemize> <item> Was bedeutet die Fehlermeldung "<tt>ioctl(SIOCGIFBR) failed: Package not installed</tt>"? <p> Der verwendete Kernel besitzt <bf>keine</bf> <em>bridging</em>-Fähigkeit. Man besorge sich den Source-Code für einen Kernel v2.x.x, und compiliere ihn entsprechend <ref id="Installation 4." name="Nr. 4)">. <item> Mein Rechner auf der einen Seite der Bridge kann den auf der anderen nicht an<em>ping</em>en! <p> <enum> <item>Ist die Bridge eingeschaltet (<tt>'brcfg -ena'</tt> erledigt das)? <tt>brcfg</tt> sollte dann mit '<tt>bridging is ENABLED</tt>' antworten. <item>Sind alle Karten im <em>promiscous-mode</em>? Falls unklar, bemühe man den Befehl <tt>ifconfig</tt>. Für jede Karte sollte das <tt>PROMISC</tt>-Flag gesetzt sein. <item> Verwendet man Ethernet-Karten, die an verschiedene Netzwerktypen angeschlossen werden können, stelle man sicher, daß der richtige Anschluß aktiviert ist. Im Erstfall hilft sicher das mit der Karte mitgelieferte Setup-/Konfigurations- Programm. </enum> <item> Ich kann von der Bridge aus mit <tt>telnet</tt>/<tt>ftp</tt> keinen anderen Rechner erreichen! <p> Ganz einfach: Die Netzwerkkarten der Bridge besitzen keine IP Adressen, da sie gemäß Standard ein transparenter Teil des Netzwerkes sind. <item> Was muß ich machen um den <em>routing</em>-Pfad festzulegen? <p> Gar nichts! Der <em>bridging code</em> im Kernel verwaltet alles Notwendige. Um die Ethernet-Adressen zu sehen, die die Bridge erkannt hat, kann man den Debug-Modus des <tt>brcfg</tt>-Programms verwenden: <tscreen><verb>brcfg -deb </verb></tscreen> <item> Die Bridge scheint zu funktionieren, aber warum zeigt <tt>traceroute</tt> sie nicht als Teil des Netzwerkes? <p> Auf Grund der ursprünglichen Definition einer Brigde sollte <tt>traceroute</tt> die Bridge <bf>nicht</bf> zeigen. Noch einmal: Die Bridge ist ein transparenter Baustein des Netzwerkes. <item> Muß <tt>IP_FORWARD</tt> in den Kernel compiliert werden? <p> Nein! Der <em>bridging code</em> des Kernels kümmert sich um den Transport der <em>packets</em>. <tt>IP_FORWARD</tt> wird nur für einen Gateway benötigt, dessen Netzwerkkarten an IP Adressen gebunden sind. <item> Warum sind die physikalischen Ethernet-Adressen für Port 1 und Port 2, laut <tt>brcfg</tt>-Programm, identisch? Sollten sie sich nicht unterscheiden? <p>Nein! Der <em>bridging code</em> weist jedem Port der Bridge dieselbe physikalische Ethernet-Adresse zu. </itemize> <sect> Ausblicke <p> Dies ist die erste und zugegebener Maßen ziemlich dünne Version des deutschen <em>Bridging mini-HOWTO</em>. Um das Ganze mit mehr Leben zu füllen, sind als Erweiterungen geplant: <enum> <item> Darstellung der Unterschiede der Installation der Bridge bei verschiedenen Distributionen. Von mir festgelegte Reihenfolge der Dringlichkeit dabei: <quote>S.u.S.E. - DLD - RedHat - andere</quote> <item> Begriffsbestimmungen. <item> Erklärung von Fehler-/ Debug-Meldungen. <item> hmmm.... mal sehen. </enum> Über <itemize> <item>Anregungen, <item>Kritik, <item>Mail von jedem, der schon vor einem Problem mit dieser Bridge stand, und es gelöst hat, <item>Mail von jedem, der vor einem Problem mit dieser Bridge steht und es noch nicht gelöst hat </itemize> würde <htmlurl url="mailto:Ralph.Wetzel@munich.netsurf.de" name="ich"> mich sehr freuen. </article> <!-- Das wars.... gar nicht so schlecht für's erste Mal.... hoffe ich!! --> <!-- Das Copyright für diesen Source-Code liegt bei Ralph Wetzel / Ralph.Wetzel@munich.netsurf.de und unterliegt dem GNU license agreement. Er darf frei publiziert werden, in jeder erdenklichen Form, solange alle Rechte des Autors gewahrt bleiben. -->