… weil Bananen keine Äpfel sind!

Internet-Gateway über OpenVPN

Juli 5th, 2010 Friedemann

Wenn man, so wie wir, von der Universität (bzw. von dessen Rechenzentrum) nur 5GB Traffic im Monat zur Verfügung stehen hat die man versurfen kann, muss man sich schnell umschauen, ob man sich einen eigenen Internet-Anschluss holt oder einen mit seinem Mitbewohner (in meinem Fall Torben :-) ) teilt.

Stellt sich die Frage: Wie macht man das am geschicktesten?

  • Nun: Es gibt natürlich mehrere Möglichkeiten an sein heißgeliebtes Suchtmittel zu gelangen. Zum einen kann eine einfache WLAN-Verbindung der Weg zum dauerhaften Internet bedeuten. Aber erstens ist das ganze witzlos und für uns Informatiker nur halb so reizvoll wie sich der Rest der Welt sich das vorstellt, und zweitens hat man ja (ich gehe jetzt von mir und meinem Bekanntenkreis aus) meist mehr als ein WLAN-Gerät sein eigen und wenn diese Gleichzeitig im WLAN sind und womöglich noch Daten untereinander austauschen, kommt das WLAN relativ schnell an seine Grenzen.
  • Möglichkeit Zwei (hatten wir auch in Betrieb): Den eigenen Router in eine Bridge wandeln. Hierbei arbeitet der eigene Router als WDS (Wireless Distribution System): Es verlängert sozusagen das WLAN-Signal des Routers, bzw. des Access-Points, der das Internet zur Verfügung stellt. Viele Router haben diese Funktion wohl schon dabei, ich musste mir erst eine alternative Firmware auf meinen Router (D-Link DIR 300) spielen: Man installiert sich auf einen kompatiblen Router ein DD-Wrt oder Open-Wrt System. Es ist inzwischen für viele Router verfügbar und solange man sich traut seinen Router evtl. ins Nirvana zu schicken auch empfehlenswert, da es unter Umständen viele tolle neue Features für den Router bringt.
    Hat man erstmal eines dieser beiden Systeme installiert, bzw. den Router entsprechend konfiguriert, hat man seinen eigenen Access-Point im Zimmer stehen. Leider war die Verbindung „etwas“ instabil: Es konnte passieren, dass das Internet mal einfach abschmierte. Das war auf Dauer doch etwas zu nervig. Also haben wir
  • Möglichkeit Drei eingerichtet und nun seit einigen Wochen erfolgreich in Betrieb: Eine OpenVPN-Gateway. Hierzu haben wir uns die Infrastruktur unseres Wohnheims zu nutze gemacht: Zwar ist bei uns der Traffic außerhalb des Uninetzes limitiert, der interne Traffic, also der innerhalb des Wohnheims / des Uninetzes, nicht. Warum also nicht einfach das die vorhandene Internetleitung über einen Server freigeben und dann fröhlich im Internet surfen? Nun ja: Zum einen ist das natürlich ziemlich unsicher, zum anderen soll auch nicht jeder, der die Daten kennt einfach so über fremde Internetleitungen surfen können. Da kam uns die Idee, das Ganze über ein VPN abzusichern. OpenVPN lag nahe, da es einfach zu konfigurieren und in Betrieb zu nehmen ist. Insbesondere mit einem Ubuntu-Server. Diese ehrenvolle Aufgabe übernimmt bei uns ein ausrangierter Laptop, der über WLAN (LAN wäre natürlich optimaler) mit dem Internet-Router und über LAN mit unserem Wohnheimnetzwerk verbunden ist. Ich habe versucht mit folgender Grafik den verwirrten Leser ein wenig zu entwirren:

    Ich hoffe, dass sich nun jeder vorstellen kann wie das ganze System aufgebaut ist.
    Kommen wir nun zur Installation und Konfiguration: Die Installation ist unter Ubuntu – gottseidank! – schnell erledigt.

    sudo apt-get install openvpn

    ausgeführt und schon ist OpenVPN installiert. Bevor man sich nun an die Konfiguration macht, sollte man als Vorbereitung zuerst Zertifikate erstellen (so haben wir das gelöst, es erschien mir als sicherste Lösung). Nun muss die Config noch angepasst werden. Hierzu haben wir folgende Config erstellt (in

    /etc/openvpn/server.conf

    ). Ich habe versucht das ganze vernünftig zu kommentieren. Möge sich jeder seine Anpassungen vornehmen, wo es ihm sinnvoll erscheint.

  • #Der Port, auf den OpenVPN horchen soll
    port 1194
    # Das Protokoll, das verwendet werden soll. Sowohl UDP, als auch TCP haben ihre Vor- und Nachteile..
    proto udp
    # Hier würde ich die Einstellung einfach so belassen. Was jetzt genau der Unterschied zwischen tun und tan ist,
    # mag ich jetzt hier nicht erläutern. Der geneigte Leser möge es im Netz nachlesen. ;-)
    dev tap
    
    # Hier nun die Pfade zu den Zertifikaten, die vorher erstellt wurden
    ca /etc/openvpn/certs/ca_cert_vpn.pem
    cert /etc/openvpn/certs/server_cert_vpn.pem
    key /etc/openvpn/certs/server_key_vpn.pem
    dh /etc/openvpn/certs/dh2048.pem
    
    # Hier wird nun eingestellt, welches IP-Netz unser neues VPN haben soll. Wir haben hierfür den
    # Pool 10.8.0.X und das Subnetz 255.255.255.0 gewählt.
    server 10.8.0.0 255.255.255.0
    # Der integrierte DHCP-Server soll natürlich die Mac-Zuordnungen speichern...
    ifconfig-pool-persist ipp.txt
    # Die folgende Zeile ist dafür da, dass die Rechner, die im VPN sind, auch untereinander Daten aus-
    # tauschen können, bzw. in der Lage sind, sich gegenseitig zu sehen.
    client-to-client
    keepalive 10 120
    # Die Verbindung wird noch komprimiert, braucht weniger Traffic, ist vielleicht auch schneller?
    comp-lzo
    # Die nächsten Zeilen lass ich mal unkommentiert. Wen es interessiert, möge
    # im Internet suchen.
    # Die Config funktioniert auf jeden Fall :-)
    user nobody
    group nogroup
    persist-key
    persist-tun
    status openvpn-status.log
    verb 3
    
    # Diese Zeilen bewirken, dass der Client sowohl den DNS-Server, als auch die Gateway per DHCP
    # erhalten.
    push "redirect-gateway"
    push "dhcp-option DNS 192.168.178.1"
    # Diese Zeile bewirkt, dass sich mehrere User mit dem gleichen Zertifikat anmelden können.
    # Haben wir so gemacht, ist aber nicht unbedingt zu empfehlen (Sicherheitsrisiko!)
    duplicate-cn

    Damit wäre die Server-Config abgefrühstückt.
    Eine Kleinigkeit muss allerdings noch erledigt werden: Die Internetverbindung muss noch durchgeleitet werden. Um das ganze sicher zu konfigurieren, lege ich die Wiki-Seiten bei Ubuntuusers.de nahe.
    Wir haben uns folgende Bash-Datei gebastelt. Sollte bei Euch aus so funktionieren, so ihr nichts an den Nachfolgenden Configs ändert:

    #!/bin/sh
    iptables -A INPUT -p udp  --dport 1194 -j ACCEPT
    iptables -A INPUT -i tap0 -j ACCEPT
    iptables -A OUTPUT -o tap0 -j ACCEPT
    iptables -A FORWARD -i tap0 -j ACCEPT
    iptables -t nat -F POSTROUTING
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # eth1 ist bei unserem Server die Netzwerkkarte, die mit dem 
    # Internetrouter verbunden ist.
    iptables -t nat -A POSTROUTING -o eth1 -s 10.8.0/24 -j MASQUERADE

    Es bietet sich an, diese Bash-Datei als Crontab anzulegen. Hierzu einfach

    sudo crontab -e

    in die Konsole eingeben. Das ganze könnte dann so aussehen:

    # m h  dom mon dow   command
    # @reboot bewirkt, dass das Skript bei jedem Start des Systems mitgestartet wird.
    # Falls der Server mal neu gestartet werden muss...
    @reboot bash /home/neo/inet.sh
    

    Nun noch den OpenVPN-Server neu starten, dann sind wir hier an dieser Stelle mit der Serverkonfiguration am Ende.
    Kommen wir nun zum Client:

    # Damit OpenVPN weiß, dass er als Klient arbeiten soll
    client
    # Siehe Server-Config. Muss übereinstimmen.
    dev tap
    proto udp
    # IP / DynDNS / wasauchimmer des OpenVPN-Servers, gefolgt vom Port, auf den der Server horcht.
    remote blabla.de 1194
    # Die folgenden Zeilen lass ich auch wieder unkommentiert...
    resolv-retry infinite
    nobind
    user nobody
    group nogroup
    persist-key
    persist-tun
    
    # Pfad zu den Zertifikaten
    ca ca_cert_vpn.pem
    cert client1_cert_vpn.pem
    key client1_key_vpn.pem 
    
    # Auch hier wurde die Komprimierung aktiviert.
    comp-lzo
    verb 3

    Nun sollte man sich verbinden können und über den Server ins Internet gelangen können.

Leave a Reply