Bridging mini-Howto <author>Christopher Cole <tt><htmlurl url="mailto:cole@coledd.com" name="cole@coledd.com"></tt> <date>v1.21, 7 maart 2001 <abstract> In dit document wordt beschreven hoe een ethernet bridge op te zetten. Wat is een ethernet bridge? Een ethernet bridge is een device dat gegevenspakketjes beheert binnen een subnet in een poging de hoeveelheid verkeer te beperken. Een bridge wordt gewoonlijk tussen aparte groepen computers geplaatst die daarbinnen communiceren, maar niet zoveel als met de computers in de andere groep. Een goed voorbeeld hiervan is te zien als een cluster Macintoshes en een cluster unix computers. Beide groepen computers neigen nogal babbelziek onder elkaar te zijn, en het verkeer dat ze op het netwerk produceren veroorzaakt aanvaringen voor de andere computers die proberen met elkaar te communiceren. Een bridge zou tussen deze groepen computers worden geplaatst. De taak van de bridge bestaat dan hieruit de bestemming van de gegevenspakketjes één voor één te bestuderen en te beslissen wel of niet de pakketjes naar de andere kant van het ethernet segment door te geven. Het resultaat is een sneller, stiller netwerk met minder aanvaringen. </abstract> <!-- Inhoudsopgave --> <toc> <sect>Setup <p> <enum> <item>Haal ``Bridge Config'' op van: <tscreen> <url url="ftp://ftp.tux.org/people/alan-cox/BRCFG.tgz"> </tscreen> <verb> BRCFG is ook te vinden op: </verb> <tscreen> <url url="http://coledd.com/networking/bridge/"> </tscreen> <item>Activeer meerdere ethernet devices op je computer door het volgende toe te voegen aan <tt>/etc/lilo.conf</tt>, en door <tt>lilo</tt> daarna opnieuw op te starten: <tscreen> <verb> append = "ether=0,0,eth1" </verb> </tscreen> Als je drie interfaces op je bridge hebt, voeg je in plaats daarvan de volgende regel toe: <tscreen> <verb> append = "ether=0,0,eth1 ether=0,0,eth2" </verb> </tscreen> <!-- </p> --> <!-- <p> --> Er kunnen meerdere interfaces worden gevonden door meer ether statements toe te voegen. Standaard onderzoekt de Linux kernel het systeem op een enkele ethernetkaart, en zodra er één wordt gevonden houdt het onderzoeken ernaar op. Het append statement hierboven vertelt de kernel naar meer ethernet devices te blijven zoeken nadat de eerste werd gevonden. <!-- </p> --> <!-- <p> --> Als alternatief kan hiervoor in de plaats de bootparameter worden gebruikt: <tscreen> <verb> linux ether=0,0,eth1 </verb> </tscreen> Of in het geval van 3 interfaces gebruik je: <tscreen> <verb> linux ether=0,0,eth1 ether=0,0,eth2 </verb> </tscreen> <!-- </p> --> <item>Hercompileer de kernel met <tt>BRIDGING</tt> geactiveerd. <item>Aan een bridge hoeft geen IP-adres toegekend te worden. Het KAN wel, maar een plain bridge heeft dit niet nodig. Ga voor het verwijderen van het IP-adres dat aan je bridge is toegekend naar <tt>/etc/sysconfig/network-scripts/</tt> (voor een RedHat systeem) en kopieer <tt>ifcfg-lo0</tt> naar <tt>ifcfg-eth0</tt> & <tt>ifcfg-eth1</tt>. Vervang in deze 2 eth bestanden de regel ``<tt>DEVICE=lo</tt>'' door ``<tt>DEVICE=eth0</tt>'' en ``<tt>DEVICE=eth1</tt>''. Andere distributies kunnen hiervan afwijken, doe wat je moet doen! Als er meer dan 2 interfaces naar deze bridge zijn, maak dan bovendien de corresponderende configuraties. <item>Herstart het systeem, zodat je de nieuwe kernel met bridging activeert en ook om er zeker van te zijn dat er geen IP-adres aan de netwerkinterfaces is gekoppeld. <item>Zodra het systeem weer "in de lucht" is, plaats je de ethernetkaarten in promiscuous mode, zodat ze ieder pakketje dat de interface passeert bekijken: <tscreen> <verb> ifconfig eth0 promisc ; ifconfig eth1 promisc </verb> </tscreen> Alle interfaces verbonden met netwerksegmenten voor de bridge moeten in promiscuous mode worden gezet. <item>Zet bridging AAN met behulp van het programma <tt>brcfg</tt>: <tscreen> <verb> brcfg -ena </verb> </tscreen> <item>Verifieer dat er ander verkeer is op iedere interface: <tscreen> <verb> tcpdump -i eth0 (in een venster) tcpdump -i eth1 (in een ander venster) </verb> </tscreen> <item>Start op een andere computer een sniffer of <tt>tcpdump</tt> ter verificatie dat de bridge het segment correct afzondert. </enum> </p> <sect>Gebruikelijke problemen <p> <enum> <item> <descrip> <tag/Vraag/ Ik kreeg de melding <tscreen> <verb> ioctl(SIOCGIFBR) failed: Package not installed </verb> </tscreen> Wat betekent dit? <tag/Antwoord/ Je hebt geen ondersteuning voor bridging in je kernel. Zorg dat je aan kernel 2.0 of nieuwere versie komt, en hercompileer het met de <tt>BRIDGING</tt> optie geactiveerd. </descrip> <item> <descrip> <tag/Vraag/ Computers aan de ene kant kunnen de computers aan de andere kant niet pingen! <tag/Antwoord/ <itemize> <item>Heb je bridging geactiveerd met behulp van ``<tt>brcfg -ena</tt>''? (<tt>brcfg</tt> zou als antwoord terug moeten geven ``<tt>bridging is ENABLED</tt>'') <item>Heb je de interfaces in promiscuous mode gezet? (voer de opdracht ``<tt>ifconfig</tt>'' uit. De ``<tt>PROMISC</tt>'' vlag zou voor beide interfaces aan moeten staan). <item>Als je gebruik maakt van multiple-media interface adapters, zorg er dan voor dat de juiste is geactiveerd. Misschien dat je het config/setup programma nodig hebt dat met de netwerk interfacekaart werd meegeleverd. </itemize> </descrip> <item> <descrip> <tag/Vraag/ Ik kan niet <tt>telnetten</tt>/<tt>ftp-en</tt> vanaf de bridge! Waarom niet? <tag/Antwoord/ Dit komt omdat er met de bridge interfaces geen IP-adres is verbonden. Een bridge is bedoeld als een transparant onderdeel van het netwerk. </descrip> <item> <descrip> <tag/Vraag/ Wat heb ik nodig om routing in te stellen? <tag/Antwoord/ Niets! Alle routing intelligentie wordt afgehandeld door de bridging code in de kernel. Gebruik het programma <tt>brcfg</tt> in debug mode om de ethernetadressen te bekijken zoals ze aan de bridge zijn opgegeven. <tscreen> <verb> brcfg -deb </verb> </tscreen> </descrip> <item> <descrip> <tag/Vraag/ De bridge schijnt te werken, maar waarom laat ``traceroute'' de bridge niet zien als onderdeel van het path? <tag/Antwoord/ Vanwege de eigenschappen van een bridge, laat een ``traceroute'' de bridge NIET als onderdeel van het path zien. Een bridge is bedoeld als een transparante component van het netwerk. </descrip> <item> <descrip> <tag/Vraag/ Is het nodig <tt>IP_FORWARD</tt> in de kernel te compileren? <tag/Antwoord/ Nee. De bridging code in de kernel zorgt voor het transport van de pakketjes. <tt>IP_FORWARD</tt> is voor een gateway waar een IP-adres met de interfaces is verbonden. </descrip> <item> <descrip> <tag/Vraag/ Waarom zijn de fysieke ethernetadressen voor poort 1 en poort 2 hetzelfde volgens het ``<tt>brcfg</tt>'' programma? Zouden ze niet verschillend moeten zijn? <tag/Antwoord/ Nee. Aan elke poort op een bridge is doelbewust hetzelfde ethernetadres toegekend door de bridging code. </descrip> <item> <descrip> <tag/Vraag/ Bridging verschijnt niet als een optie bij het uitvoeren van een make config op de kernel. Hoe activeert men dit? <tag/Antwoord/ Antwoord tijdens de kernelconfig 'Y' op de vraag, ``Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL) [Y/n/?]''. </descrip> <item> <descrip> <tag/Vraag/ Te veel hubs (4 of meer) achtereenvolgens in een keten (in serie) veroorzaakt tijdsproblemen op een ethernet. Welk effect heeft een bridge in een subnet dat met hubs in lagen werkt? <tag/Antwoord/ Een bridge reset de 3/4/5 hubs regel. Een bridge gaat niet zo met pakketjes om zoals een hub dat doet, en draagt daarom niet bij aan tijdsproblemen op een netwerk. </descrip> <item> <descrip> <tag/Vraag/ Is een bridge interface naar zowel 10Mb als 100Mb ethernetsegmenten mogelijk? Zal een dergelijke configuratie de rest van het verkeer op de hoge snelheidszijde vertragen? <tag/Antwoord/ Ja, een bridge kan een 10Mb segment verbinden met een 100Mb segment. Zolang als de netwerkkaart op het snelle netwerk 100Mb capabel is, zorgt TCP voor de rest. Ondanks dat het klopt dat de pakketjes van een host communicerend in het 100Mb netwerk verplaatst worden in slechts 10Mb/s, zal de rest van het verkeer op het snelle ethernet daardoor niet worden vertraagd. </descrip> </enum> </p> </article>