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