Raspi als IPsec Client

Als Vorlage dient folgender Blogbeitrag: http://www.kuemmel.wtf/?p=363

Für das offsite Backup war es vorteilhaft den Raspi per VPN in mein Netzwerk zu bekommen. Dieses macht portforwarding und konfigurationen an der offsite Location unnötig.

Der bei mir eingesetze Router ist eine Fritzbox 7490

DynDNS sollte auf der FritzBox aktiviert sein, so das sie unter einer statischen Adresse erreichbar ist. Hierfür bietet sich der MyFritz service von AVM an.
Einrichtung von VPN bei der Fritzbox

Zuerst wird unter System-> FRITZ!Box- Benutzer ein neuer User angelegt.

Hier muss der Zugang aus dem Internet gewährt werden und VPN (natürlich freigeschaltet werden, alles andere wird abgewählt.

Wir merken uns die angaben aus den Iphone einstellungen:

    Beschreibung:
    Server:wlhvqalfzaqiqamv.myfritz.net
    Account:vpn_user
    Kennwort:Kennwort des FRITZ!Box-Benutzers „vpn_user“
    Zertifikat verwenden ist deaktiviert
    Gruppenname:vpn_user
    Shared Secret:TANrpS1y34hHHJGIS4

Jetz geht es auf den Raspi weiter….

Installation:

sudo apt-get install vpnc

Config erstellen und anpassen:

sudo nano /etc/vpnc/fritzbox.conf

IPSec gateway wlhvqalfzaqiqamv.myfritz.net
IPSec ID vpn_user
IPSec secret TANrpS1y34hHHJGIS4
IKE Authmode psk
Xauth username vpn_user
Xauth password <passwort>
local port 0
DPD idle timeout (our side) 0

erster test des tunnels:

sudo vpnc fritzbox.conf

Beenden der VPn Verbindung:

sudo vpnc-disconnect

Ich habe das starten des Scripts in der /etc/rc.local eingetragen damit die VPN verbindung beim booten aufgebaut wird.

vpnc fritzbox.conf

da die VPN Verbindung teilweise unkontrolliert abbricht hat Abdelkader Wahb ein Script gemacht, das die Verbindung überwacht und bei bedarf neustartet. Das möchte ich euch nicht vorenthalten:

    #!/bin/bash

    # hier wird die Logfile-Datei definiert

    LOGFILE=/data/log_vpnc/fritzbox.log

    # hier wird die IP-Adresse von Fritzbox definiert. wenn die VPN Verbindung steht, dann sollte ping funktionieren.

    myHost=“192.168.178.1″

    # Wert -> wie oft soll gepingt werden

    wert=4

    # Ausgabe Wert für „count“ soll bei erfolgreichen ping 4 sein, bei erfolglosen ping 0.

    count=$(ping -c $wert $myHost | grep ‚received‘ | awk ‚{print $4}‘)

    if [ $count == 4 ]

    then

    # die kommenden echos sind die Info-Ausgaben in Logfile

    echo „$(date +%Y-%m-%d:%T) :Fritzbox mit der IP $myHost  ist erreichbar und VPN Verbindung steht“ | tee -a $LOGFILE

    else

    echo „“ | tee -a $LOGFILE

    echo „$(date +%Y-%m-%d:%T) :Fritzbox mit der IP $myHost ist nicht erreichbar“ |tee -a $LOGFILE

    echo „$(date +%Y-%m-%d:%T) :VPN-Verbindung trennen“ |tee -a $LOGFILE

    #hier wird das VPNC-Demon gestoppt, damit es nicht meherer im Hintergrund laufen

    vpnc-disconnect

    # oft ist die Wlan Verbindungen gebrochen. hier werden alle Netzwerkverbindungen neugestartet.

    echo „$(date +%Y-%m-%d:%T) :Netzwerkverbindungen neu starten“ | tee -a $LOGFILE

    /etc/init.d/networking restart

    # 10 Sekunden warten

    sleep 10

    # auslesen von der Wlan Ip-Adresse

    ipwlan=$(ifconfig wlan0 | grep „inet Adresse“ | cut -b 24-38)

    echo „$(date +%Y-%m-%d:%T) :Netzwerkverbindungen wurde neugestart. WLAN IP-Adresse: $ipwlan “ | tee -a $LOGFILE

    echo „$(date +%Y-%m-%d:%T) :VPN Verbindung neu aufbauen, der Skript vpnc_fritzbox starten“ | tee -a $LOGFILE

    # starten von VPNC-Demon. PID und VPN-IP Adresse auslesen

    vpnc fritzbox.conf

    pid=$(pidof vpnc)

    ipvpn=$(ifconfig tun0 | grep „inet Adresse“ | cut -b 24-38)

    echo „$(date +%Y-%m-%d:%T) :Die VPN-Verbindung wurde erfolgreich aufgebaut. die VPN IP-Adresse ist: $ipvpn. VPNC-Demon ist aktiv unter id: $(pidof vpnc)“ | tee -a $LOGFILE

    echo „“ | tee -a $LOGFILE

    fi

Eintrag im /etc/crontab, damit es bei booten automatisch jede 3 Minuten durchgeführt werden:

    */3  *  * * *   root /etc/init.d/autovpncscript

Weiteres Skript zu dem Thema

#!/bin/bash

# hier wird die Logfile-Datei definiert

LOGFILE=/var/log/fritzbox.log

# hier wird die IP-Adresse des Gateways definiert
myGw=“192.168.0.1″

# hier wird die IP-Adresse von Fritzbox definiert. wenn die VPN Verbindung steht, dann sollte ping funktionieren.
myHost=“192.168.10.1″

# Wert -> wie oft soll gepingt werden
wert=4
# Ausgabe Wert für „count“ soll bei erfolgreichen ping 4 sein, bei erfolglosen ping 0.

########################## check lokales Netz

count=$(ping -c $wert $myGw | grep „received“ | awk ‚{print $4}‘)

if [ $count -eq 4 ]

then
# die kommenden echos sind die Info-Ausgaben in Logfile
echo „$(date +%Y-%m-%d:%T) :Router mit der IP $myGw ist erreichbar“ | tee -a $LOGFILE
else
echo „“ | tee -a $LOGFILE
echo „$(date +%Y-%m-%d:%T) :Router mit der IP $myGw ist nicht erreichbar“ |tee -a $LOGFILE
echo „$(date +%Y-%m-%d:%T) :VPN-Verbindung trennen“ |tee -a $LOGFILE
#hier wird das VPNC-Demon gestoppt, damit es nicht meherer im Hintergrund laufen
/usr/sbin/vpnc-disconnect
# oft ist die Wlan Verbindungen gebrochen. hier werden alle Netzwerkverbindungen neugestartet.
echo „$(date +%Y-%m-%d:%T) :Netzwerkverbindungen neu starten“ | tee -a $LOGFILE
/etc/init.d/networking restart
# 20 Sekunden warten
sleep 20
# auslesen von der lokalen Ip-Adresse
ipwlan=$(ifconfig eth0 | grep „inet Adresse“ | cut -b 24-38)
echo „$(date +%Y-%m-%d:%T) :Netzwerkverbindungen wurde neugestart. LAN IP-Adresse: $ipwlan “ | tee -a $LOGFILE
echo „$(date +%Y-%m-%d:%T) :VPN Verbindung neu aufbauen, der Skript vpnc_fritzbox starten“ | tee -a $LOGFILE
# starten von VPNC-Demon. PID und VPN-IP Adresse auslesen
/usr/sbin/vpnc fritzbox.conf
sleep 1
pid=$(pidof vpnc)
ipvpn=$(ifconfig tun0 | grep „inet Adresse“ | cut -b 24-38)
echo „$(date +%Y-%m-%d:%T) :Die VPN-Verbindung wurde erfolgreich aufgebaut. die VPN IP-Adresse ist: $ipvpn. VPNC-Demon ist aktiv unter id: $(pidof vpnc)“ | tee -a $LOGFILE
echo „“ | tee -a $LOGFILE
fi

########################## check Destination Netz

count=$(ping -c $wert $myHost | grep „received“ | awk ‚{print $4}‘)

if [ $count -eq 4 ]

then
# die kommenden echos sind die Info-Ausgaben in Logfile
echo „$(date +%Y-%m-%d:%T) :Fritzbox mit der IP $myHost ist erreichbar und VPN Verbindung steht“ | tee -a $LOGFILE
else
echo „“ | tee -a $LOGFILE
echo „$(date +%Y-%m-%d:%T) :Fritzbox mit der IP $myHost ist nicht erreichbar“ |tee -a $LOGFILE
echo „$(date +%Y-%m-%d:%T) :VPN-Verbindung trennen“ |tee -a $LOGFILE
#hier wird das VPNC-Demon gestoppt, damit es nicht meherer im Hintergrund laufen
/usr/sbin/vpnc-disconnect
# 10 Sekunden warten
sleep 20
# starten von VPNC-Demon. PID und VPN-IP Adresse auslesen
/usr/sbin/vpnc fritzbox.conf
sleep 1
pid=$(pidof vpnc)
ipvpn=$(ifconfig tun0 | grep „inet Adresse“ | cut -b 24-38)
echo „$(date +%Y-%m-%d:%T) :Die VPN-Verbindung wurde erfolgreich aufgebaut. die VPN IP-Adresse ist: $ipvpn. VPNC-Demon ist aktiv unter id: $(pidof vpnc)“ | tee -a $LOGFILE
echo „“ | tee -a $LOGFILE
fi