Samstag, 22. April 2006

HOWTO_ OpenVPN mit HTTPTunnel durch Proxyserver bugsieren

Im ersten Teil ging es um die Einrichtung von OpenVPN-Server und Client. Nun ist allerdings der Zugriff auf das WWW aus vielen größeren Netzwerken durch Proxy-Server kontrolliert und beschränkt. Es gibt doch einige Mechanismen, wie sich eine VPN-Verbindung darüber aufbauen lässt.
  1. Tunneln per CONNECT

    Etliche Proxyserver erlauben auch Verbindungen zu HTTPS-Servern. Dabei hat der Proxy allerdings keinen Zugriff auf die aufgebaute Verbindung (wir erinnern uns: Verschlüsselung) und leitet die Daten einfach nur durch. Prinzipiell weiß er nicht einmal, dass am Ende eine SSL-Verbindung aufgebaut wurde, denn initial wird lediglich eine unverschlüsselte TCP/IP-Verbindung verwendet.
    Dieser Mechanismus ist im OpenVPN-Client bereits eingebaut und kann einfach in der Konfigurationsdatei eingestellt werden.
    http-proxy [proxy server] [proxy port #]

    Standardmäßig werden HTTPS-Verbindungen zum Port 443 aufgebaut, und daher beschränken Proxyadministratoren auch gerne das CONNECT-Kommando auf diesen Port. In meinem Falle "sitzt" da zu Hause aber bereits ein Webserver, so dass ich auf diese Methode leider nicht zurückgreifen kann. Mit ein wenig Herumprobieren ließe sich eventuell der Port mittels iptables sharen.
  2. HTTPTunnel

    Was aber erlaubt wird, sind unverschlüsselte, les- und cachebare HTTP-Verbindungen. Wer wirklich Pech hat, darf auch diese nur zu einem Port 80 aufbauen und - genau - da sitzt eben oft auch ein Webserver. Glücklicherweise wird der Port 8080 oftmals auch freigeschaltet, und über den lasse ich nun HTTPTunnel laufen. Tipps dazu habe ich aus diesem Artikel.
    1. Setup Server (Debian Sarge 3.1 "stable")
      Nach apt-get install httptunnel wird mit touch /etc/init.d/httptunnelein kleines Startupscript angelegt und mit folgendem Inhalt gefüllt:
      #!/bin/bash

      # Startup-script für HTTPTunnel
      # Tunnelendpunkt auf Port 8080 wird auf
      # 1194 (OpenVPN-Server) weitergeleitet
      echo Starting HTTPTunnel for OpenVPN
      hts --forward-port localhost:1194 8080
      Automatisch bei Systemstart laden:
      chmod +x /etc/init.d/httptunnel
      update-rc.d httptunnel defaults 98

      Damit ist der Tunnel eingerichtet, aber zwei Anpassungen für OpenVPN sind in der /etc/openvpn/server.conf noch vorzunehmen:
      # HTTP-Tunnelling funktioniert nur mit TCP-Paketen!
      proto tcp
      ;proto udp

      # Mit tun funktioniert das NAT-Routing auf dem VPN-Server nicht
      dev tap
      ;dev tun
      Nach einem Neustart sind die Änderungen übernommen:
      /etc/init.d/openvpn stop
      /etc/init.d/openvpn start
    2. Setup Client (Max OS X)
      Hier ist ein bisschen mehr Arbeit nötig. Auf jeden Fall müssen die aktuellen XCode-Tools installiert werden, da sonst die GCC nicht vorhanden ist.
      Die Sources müssen heruntergeladen und entpackt werden, aktuell ist 3.0.5. Nun in das Verzeichnis wechseln und mit
      ./configure
      make
      sudo make install
      sudo ./install-sh hts /usr/local/bin
      sudo ./install-sh htc /usr/local/bin
      kompilieren und installieren. Der Tunnelclient ist nun einsatzbereit:
      htc --forward-port 8080 --proxy <PROXY>[:<PORT>] [--proxy-authorization <USER>:<PASS>] <VPN_HOSTNAME>:8080

      Damit auch der VPN-Client über den HTTPTunnel geht, müssen ihm diese Änderungen über die Konfiguration bekannt gemacht werden. In den Utilities mit einem Doppelklick Tunnelblick starten, auf das Icon klicken, Details... auswählen und auf Edit Configuration klicken.
      # TAP statt TUN verwenden
      ;dev tun
      dev tap

      # HTTP verwendet TCP und nicht UDP
      ;proto udp
      proto tcp

      # Tunnel wird lokal geöffnet
      ;remote myserver.dyndns.org 1149
      remote localhost 8080
      Abspeichern und fertig ist.
    Damit lässt sich nun aus fast jedem Netzwerk heraustunneln. Die Pinglaufzeit ist mit rund 60ms akzeptabel, die Geschwindigkeit ist durch das zweifache Tunneln allerdings deutlich herabgesetzt, bei umfangreichen Webseiten dauert das Laden schon mal bis zu 5 Sekunden. Dazu muss ich allerdings sagen, dass mein Homeserver mit 1536/1024 kbps angebunden ist, letztendlich ist der Upstream der Flaschenhals. Wer nur 16 Kbyte (=128kbps) hat, wird auch nicht groß über ISDN-Geschwindigkeit hinauskommen können.
    Bei dem von mir verwendeten Proxy bricht leider die Verbindung nach kurzer Zeit immer wieder ab, eine runde halbe Minute später beendet sich dann auch der HTTPTunnel-Client und muss neu gestartet werden. Eventuell lässt sich dies aber noch über die verschiedenen Parameter (htc --help) optimieren.
    Last but not least fehlt noch ein elegantes (automatisches?) Startupscript für den HTTPTunnel-Client. Wenn ich mal wieder nichts zu tun habe...
Jan (Gast) - 14. Dez, 11:12

Warum TAP-Adapter?

Hi, ich habe in meinem Artikel bewusst vom TAP-Adapter abgeratet und TUN empfohlen: http://www.kammerath.net/ubuntu-openvpn-server-konfigurieren.html

Gibt es deinerseits irgendwelche Argumente, die für TAP sprechen wenn man keine Ethernet-Frames benötigt?

Reflog

Informationstechnische Howtos, Hinweise und Merkwürdiges

Batchlib v1.0 2008-03-29

Aktuelle Beiträge

HOWTO_ O2 DSL Surf &...
Der O2 DSL Surf & Phone-Router ist für die alleinige...
cypressor - 12. Feb, 19:57
Uptweak Windows XP Home...
There are a lot of annoying limitations in Windows...
cypressor - 9. Okt, 19:30
BATCHLIB_ Batchlib package...
Download Batchlib package v1.0 (5 KB zip file) What...
cypressor - 29. Mär, 19:10
BATCHLIB_ Batchlib library...
The batchlib library string.cmd is part of the batchlib...
cypressor - 29. Mär, 18:10

Homepage Ticker

Links

Status

Online seit 6590 Tagen
Zuletzt aktualisiert: 28. Jun, 11:32
RSS XML 1.0 Button-Get-Firefox

batch
batchlib
howto
tech
video
Profil
Abmelden
Weblog abonnieren