I just found this old article I've written down once to simulate a Linux network bridging alternative. This article was written in Dutch, but I didn't want it to get lost, so I added it to my blog.
Probleem
Enkele jaren heb ik gretig gebruik gemaakt van een Windows 2003 serverke. Maar het toestel werd oud en traag en was dringend aan vervanging toe.
Bij het opzetten van een nieuwe server heb ik gekozen voor Ubuntu, omdat ik al veel positieve dingen gehoord/gelezen heb qua servers & Linux. Bovendien was het zeker niet slecht om mijn CV wat aan te vullen ;-)
Goed, 1 van de vereisten is dat mijn server als netwerk brug functioneert. Waarom? Dat valt hier eigenlijk buiten de scope van het document, maar het is bedoeld om een printer en andere DHCP clients te voorzien via HUB en de server richting het internet (en ook andere DHCP clients in het gebouw)
Bij de windows server ging dat perfect. Je selecteert 2 verbindingen: de wired en de wireless, en je kiest voor Netwerk brug maken...
De rest gebeurt van zelf, en klaar is kees :-).
Bij Linux was dit probleem precies iets anders. Er is genoeg documentatie te vinden over het bridgen van 2 wired interfaces, maar niet zo veel voor wireless en wired.
Dagen heb ik zitten prutsen om de brug in orde te brengen, maar ik kreeg ze maar niet werkend.
Het probleem is als volgt: mijn Linksys WRT54GS stuurt pakketten uit die WDS informatie bevatten. Die informatie zorgt ervoor dat pakketten hetzelfde MAC adres blijven behouden over verschillende access points heen. Nu moet mijn driver van mijn netwerkkaart wel die WDS pakketten verstaan om ze deftig te kunnen doorgeven aan mijn eth0 zijde => MAC spoofing!
En dit was dus niet mogelijk, het MAC adres kon niet gespoofd worden, waardoor mijn pakketten verloren gingen ...
Met andere woorden: ik ben gesjost. Ik kon geen netwerk brug maken onder Linux en dat was voor mij wel een redelijk pain-in-the-ass.
Maar Jochus zou Jochus niet zijn, moest hij daarvoor geen oplossing hebben ...
Getroffen systemen
ROUTER
SERVER
- OS: Ubuntu 8.10 Intrepid
- wireless interface: WMP54G
- wired interface: RealTek RTL8139
CLIENTS
- OS: Windows XP SP3
- wired/wireless interface: doeterniettoe :-)
Oplossing
Alle clients die aangesloten zijn op mijn router, zitten het in het 192.168.1.0/32 netwerk. Ook mijn server heeft verbinding met mijn router op interface wlan0
auto wlan0
iface wlan0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
Nu heb ik op mijn eth0 interface een 2e subnet geconfigureerd: 192.168.0.0/32. Mijn server zal instaan voor het verkeer tussen de 2 subnetten.
Maar hoe zet je zoiets op?
Configureren eth0 onder Ubuntu
- Configureren wired connectie (eth0) in een ander subnet
- Voeg volgende sectie toe aan: /etc/network/interfaces
- Tip! gebruik geen gateway, want dan zal je standaard verkeer telkens naar eth0 vliegen, ipv wlan0
auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
Toestaan dat IP pakketten van interface wlan0 doorgegeven worden aan eth0 en vice versa
- Pas volgende file aan: /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
IP pakketten herzien van bron- en doelbestemming, zodat pakketten aan de juiste PC teruggegeven worden
$ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Aanpassen printerconfiguratie
Op de printer zelf heb ik dan volgende configuratie ingesteld:
address: 192.168.0.2
submask: 255.255.255.0
gateway: 192.168.0.1
Op de clients moest ik ook de printer- en scannerpoort veranderen naar 192.168.0.2
===========
= PRINTER =
===========
* rechts klikken op je printer
* Eigenschappen
* Tabblad: Poorten
* Selecteer de bestaande poort en druk op Poort configureren
* Stel IP-adres in op : 192.168.0.2
===========
= SCANNER =
===========
* Start
* Configuratiescherm
* Scanners & Camera's
* rechts klikken op je scanner
* Eigenschappen
* Tabblad: Netwerkinstellingen
* Stel IP-adres in op : 192.168.0.2
Aanpassen clients
Nu zijn we er nog niet. Want de pakketten zullen op de clients telkens naar 192.168.1.1 gestuurd worden (juist ja de router!). Hoe krijgen we die tot bij de server?
- a) ... ofwel configureer je een extra route in de router, zodat via de DHCP offers de route ook wordt meegegeven
- b) ... ofwel configureer je dit manueel op iedere client
Aangezien al mijn clients statisch ingesteld zijn, moest ik wel voor optie b) gaan.
Je moet op elke client het volgende ingeven:
$ route -p ADD 192.168.0.0 MASK 255.255.255.0 192.168.1.100