[www.efixes.de
 
 
 
 [technik & pc]
 
 [reisen]
 
 
Get Firefox

Linux VPN mit "ppp over ssh"

Es gibt viele verschiedene Lösungen um ein VPN unter Linux aufzubauen. Selbst mit der Methode eine ppp-Verbindung über eine ssh-Verbindung aufzubauen gibt es mehrere Vorgehensweisen.

Ein Ansatz hat bei mir innerhalb kürzester Zeit zum Erfol geführt, weshalb ich ihn hier festhalten möchte.

Prinzip:

?? Eine ssh-Verbindung starten und an beide Enden (Terminals) einen ppd anhängen??

Als erstes brauchen wir auf dem VPN-Gateway einen Benutzer für unser VPN. Diesen nennen wir "vpn".

Eintrag in /etc/passwd:

vpn:*:105:100::/home/vpn:/bin/bash 

durch den "*" ist es nicht möglich, sich per Passwort als vpn-User am VPN-Gateway anzumelden.
"/bin/bash" kann evtl durch "/bin/false" ersetzt werden (??)

folgende Skript erledigt die Verbindung auf dem VPN-Gateway /home/vpn/vpnd:

--------------------------------------------------------------------------------
#!/bin/bash
# /home/vpn/vpnd

LOCAL_VPN_IP=10.1.2.11
REMOTE_VPN_IP=$1

sudo /usr/sbin/pppd nodetach notty noauth ${LOCAL_VPN_IP}:${REMOTE_VPN_IP}

--------------------------------------------------------------------------------

"LOCAL_VPN_IP" ist die IP-Adresse des Tunnels auf der Server-Seite (eine freie IP-Adresse aus dem lokalen Netz des Servers)
"REMOTE_VPN_IP" ist die IP-Adresse des Tunnels auf der Client-Seite und wird vom Client übermittelt

Das ganze ausführbar machen:

# chmod 755 /home/vpn/vpnd

Das vpnd-Skript wird von diesem Skript auf dem VPN-Client aus gestartet /etc/ppp/vpn-up:

--------------------------------------------------------------------------------
#!/bin/bash
# /etc/ppp/vpn-up

VPN_GW=$1
LOCAL_VPN_IP=192.168.1.11

/usr/sbin/pppd updetach noauth passive \
               pty "/usr/bin/ssh ${VPN_GW} -2 -l vpn -o Batchmode=yes \
               /home/vpn/vpnd $LOCAL_VPN_IP" && echo "connected" \
               || echo "connection failed"

--------------------------------------------------------------------------------

"pty" gibt an, das als Terminal für den pppd das nachfolgende Skript genommen werden soll (???).
"-2" sagt dem ssh, das Protokoll Version 2 benutzt werden muß.
"LOCAL_VPN_IP" ist die IP-Adresse des Tunnels auf der Seite des Clients (eine freie IP-Adresse aus dem lokalen Netz des Clients)
Als Parameter muß beim starten das VPN-Gateway angegeben werden.

Das ganze ausführbar machen:

# chmod 755 /home/vpn/vpnd

Als nächstes braucht man einen Key um sich auf dem VPN-Gateway anmelden zu können. Diesen ezeugt man durch den Aufruf:

# ssh-keygen -d

und kopiert ihn z.B. mit scp auf den VPN-Server:

# scp ~/.ssh/id_dsa.pub root@vpnserver.myip.irgendwas:/home/vpn/.ssh/temp

Auf dem VPN-Gateway trägt man diesen Schlüssel in /home/vpn/.ssh/authorized-keys2 ein:

# cat /home/vpn/.ssh/temp >> /home/vpn/.ssh/authorized-keys2
# rm /home/vpn/.ssh/temp

Als nächstes am besten mal eine ssh-Verbindung aufbeuen, um den Key zu akzeptieren:

# ssh -l vpn vpngateway.myip.irgendwas

Jetzt kann das VPN gestartet werden:

# /etc/ppp/vpn-up vpngateway.myip.irgendwas

Das wars!

Was sonst noch getan werden muß:

  • Firewall anpassen (piercen:-)
  • Routen einrichten
    auf dem Server z.B.: # route add -net 192.168.1.0/24 gateway 192.168.1.11
    auf dem Client z.B.: # route add -net 10.1.2.0/16 gateway 10.1.2.11
    (-> das muss noch automatisiert werden!)
  • ...

Falls es nicht klappt:

Als Fehlerquelle Nr. 1 hat sich bei mir der pppd, genauer die options-Datei des pppd /etc/ppp/options herausgestellt. Folgendes darf dort (am besten weder auf dem Server noch auf dem Client) auf keinen Fall auftauchen: noipdefault, ipcp-accept-remote, ipcp-accept-local.

<-- zurück