Posts Tagged “VPN”

Gestern Morgen komme ich ruhig und gelassen zur Arbeit. Rechner aufgebaut und hochgefahren, Anmeldung erfolgt, Firefox an, Thunderbird an. Alles super. Pidgin an. Hmm Connection timed out. Was ist denn jetzt los? Freitag ging es doch noch. Ping geht auch, also weiter geforscht. Das Ende vom Lied, der Chef der Netzwerkbetreuung meinte, dass das Netz zu unsicher ist und das somit erstmal alle Ports, bis auf 22, 25, 80, 443 und 993 dicht gemacht werden. Großartig, also hat sich das VPN damit auch erledigt, über das ich sonst von zu Hause aus in die Firma kam. Da ich dies dringend benötige stand ich somit vor der Aufgabe einen Tunnel ohne die VPN-Ports aufzubauen. Von den fünf Ports eignete sich ausschließlich der Port 22 (SSH) zur Verwendung.

Vorüberlegung

  • Im internen Netz stehen mehrere Rechner, auf die wir von außen zugreifen wollen.
  • Wir haben im Internet einen Server stehen, der unsere Gegenstelle wird.
  • Zur Minimierung des Aufwandes wird im internen Netz ein Server als SSH-Proxy genutzt.
  • SSH-Verbindungen werden nach einiger Zeit getrennt, wenn keine Daten übertragen werden.
  • Am Internet-Server müssen keine Anpassungen vorgenommen werden.

Einrichtung des SSH-Proxy

Kommen wir also zur Konfiguration des SSH-Proxy, also vereinfacht ausgedrückt zur Einrichtung eines Rechners im internen Netz, sodass eine dauerhafte SSH-Verbindung besteht und wir dann vom Internet-Server aus in das interne Netz kommen. Realisieren werden wir dies mit Hilfe eines SSH-Tunnels.

Befehl zum Aufbau des SSH-Tunnels

intern1:$ ssh -R 2000:localhost:22 internet-server

Je nachdem wie der Internet-Server konfiguriert wurde, wird man nach einem Passwort gefragt oder kommt direkt auf ihn. Ein Abklopfen des Ports 2000 zeigt uns, dass der Befehl erfolgreich war und der Tunnel steht.

internet-server:$ telnet localhost 2000

Ausgabe:

Trying 127.0.0.1…
Connected to localhost.localdomain.
Escape character is ‘^]’.
SSH-2.0-OpenSSH_5.1p1 Debian-5

Wir könnten damit schon arbeiten haben dann aber das Problem, dass der Tunnel zusammengebrochen ist, nachdem wir nach Hause gefahren sind. Also muss dafür gesorgt werden, dass ständig Daten über den Tunnel laufen und das die Verbindung auch bei einem Netzausfall wiederherstellt wird. Dies habe ich im nachfolgenden kurzen Script umgesetzt.


#!/bin/sh

while true; do
VAR1=$(lsof -i |grep IP_VON_Internetserver) # besteht eine Verbindung zum Internetserver
VAR2=$(echo $VAR1 |grep ESTABLISHED) # ist diese noch verbunden
if [ $? -eq 1 ]; then
# Wenn keine Verbindung mehr besteht wird eine neue aufgebaut, sonst wird nichts gemacht
$(echo date) >>tun.log # Protokollieren
echo “Connection down – Starting new one” >>tun.log
echo ” ” >>tun.log
ssh -f -R 2000:localhost:22 internet_server “killall ping; ping -i 10 heise.de >/dev/null” # neue Verbindung herstellen
# Erklaerung der Parameter:
# -f Befehl in Hintergrund schicken
# “killall ping” beendet die bestehenden Ping Befehle auf internetserver, damit nicht unendlich viele Dienste erstellt werden
# “ping -i 10 heise.de >/dev/null” dient dazu, dass ständig Daten übertragen werden. Die Zeiten sind uns dabei egal daher nach /dev/null
fi
sleep 30 # alle 30 Sekunden pruefen
done

Bei Bedarf kann die Datei noch als Cronjob gestartet werden, der nach dem Booten ausgelöst wird. Gestartet wird das Script mit angehängtem & Zeichen, damit es im Hintergrund verschwindet und die Konsole frei gibt.
intern1:$ /usr/local/sbin/ssh-tunnel/tun.sh &

Damit ist die Hauptarbeit getan. Der Tunnel bleibt bestehen und auch bei einem Ausfall der Netzwerkverbindung wird die Verbindung wiederhergestellt, wenn die Internetverbindung wieder steht. Alles weitere erleichtert nur das Verbinden zu den internen Rechnern.
Den Rest des Eintrages lesen »

Comments Keine Kommentare »

219524 Seiten angezeigt, 539 heute
92155 Besuche, 162 heute
FireStats icon Powered by FireStats