Habe mir am 04.08.2006 "auf gut Glück" eine ziemlich billige Wireless-LAN PCI-Karte gekauft, was soviel heisst wie: Ich habe vorher nicht darauf geachtet ob mein Linux sie nativ unterstützt.

Es kam was kommen musste, die Karte wird nicht nativ von Ubuntu 6.06.1 unterstützt und für mich viel das Emulieren eines Access-Points mit WPA2 via Hostapd leider flach.

Trotzdem liess sich mit Hilfe vom NdisWrapper und OpenVPN ein funktionstüchtiges und sicheres WLAN zusammenschustern. Hier beschreibe ich kurz mein Vorgehen, falls jemand anders etwas ähnliches vorhat.

Ausgangssituation:

  • Mein Laptop
    • Ubuntu 6.06.1 LTS
    • Intel Corporation PRO/Wireless 2200BG (eth1)
  • Mein Server
    • Ubuntu 6.06.1 LTS
    • Marvell Technology Group Ltd. 88w8335 [Libertas] 802.11b/g Wireless (wlan0)
    • DSL an ppp0/eth0
    • LAN an eth1

1. Installation der Windows-Treiber

Nach der hier vorhandenen Anleitung habe ich ohne weitere Probleme die Treiber für die Marwell-Karte installieren können. Nach einem Neustart meldete mir iwconfig endlich, das eine WLAN-Karte vorhanden ist.

2. Konfiguration der Karten

Die schnöde Layer-2-Verbindung zwischen den Karten habe ich mit dem Ad-Hoc-Modus realisiert. Das ganze habe ich dann noch in die jeweiligen /etc/network/interfaces eingetragen. Hier der entsprechende Abschnitt aus der Netzwerkkonfiguration des Servers:

auto wlan0
iface wlan0 inet static
address 192.168.59.1
netmask 255.255.255.0
pre-up /sbin/iwconfig wlan0 mode ad-hoc channel 3 essid meinnetz
#Dies initialisiert das Ad-Hoc Netz auf Kanal 3 mit der essid "meinnetz"
#bevor das Interface hochgefahren wird ...
post-down /sbin/iwconfig wlan0 mode managed essid off
#... und dies "deaktivert" es wenn das Interface herunterfährt

Auf dem Laptop das selbe, nur mit anderem Interface, anderer Adresse und Weglassen der "auto"-Zeile (Weil ich das WLAN hier gerne von Hand aktivieren will).

3. Einrichten von OpenVPN

Ich habe mich hierbei größtenteils an das Tutorial von OpenVPN gehalten. Der generieren der Zertifikate kann etwas frickelig werden, ist aber mit den Scripten unter /usr/share/doc/openvpn/examples/easy-rsa nur halb so schlimm.

Hier mal meine /etc/openvpn/server.conf

port 443
proto tcp
#Diese Einstellungen erlauben uns nachher noch ein paar Tricks ;)
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.192
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp lzo
max-clients 1
#muss natürlich höher bei mehreren Clients!
persist-key
persis-tun
status openvpn-status-log
verb 3

Die Konfiguration des Laptops ist um einiges kleiner und simpler, daher führe ich die hier nicht nochmal auf. Wichtig ist hier vor allem die redirect-gateway-Option einzufügen, damit das Default-Gateway auf den Endpunkt des VPN umgeschaltet wird.

4. Das Firewalling

Hierfür benutze ich das IP-Tables Frontend Shorewall. Es erlaubt relativ kompfortables Aufsetzen komplexer Regelsätze und erfordert nur relativ wenig Einarbeitungszeit. Auf der Homepage des Projekts gibt es an sehr gute Tutorials.

Persönlich habe ich in der /etc/shorewall/zones und der /etc/shorewall/interfaces zwei Zonen, eine für das WLAN und eine für das VPN definiert. Danach wird alles aus den beiden Zonen in der /etc/shorewall/policy pauschal verboten. Nun könnt ihr in der /etc/shorewall/rules Punkt für Punkt erlauben, was die Clients dürfen und was nicht.

In meinem Fall habe ich aus dem WLAN lediglich ICMP/Ping und TCP/443 (unser OpenVPN-Port) auf den Server erlaubt. Ersteres hilft nur bei der Diagnose, kann aber eigentlich auch deaktiviert werden. Nun wollt ihr warscheinlich noch jedwege Verbindungen vom VPN in das Internet erlauben und eventuell noch den ein oder anderen Service auf eurem Server freischalten.

Nach einem Neustart der Shorewall solltet ihr euch ohne Probleme via OpenVPN bei eurem Server anmelden und unbehelligt im Internet surfen können.

5. VPN aus dem Internet

Jetzt wo ihr schonmal OpenVPN eingerichtet habt, könnt ihr das ganze auch nutzen um in so gut wie jedem Netzwerk sicher zu kommunizieren. Setzt euch hierzu nur z.B. einen DynDNS-Daemon auf und tragt die Adresse als sekundären Server in eure client.conf ein. Danach erlaubt in eurer /etc/shorewall/rules Verbindungen aus dem Internet auf TCP-Port 443 eurer Firewall.

Da OpenVPN über SSL funktioniert und auchnoch auf den Standard-SSL Port geeicht ist, kommt ihr so an (fast) jedem Proxy* mühelos vorbei und bekommt eine direkte IP-Verbindung in das Internet.

* Diesen müsst ihr natürlich vorher auch in der client.conf via http-proxy setzen!