UMTS – Internet Backup Proxy (Hot Standby)

Ich verwendete den Raspberry bis dato nur als SMS-Gateway (smstools).

Mein Ziel war es nun das USB-Modem des Raspberry (bei Ausfall der Hauptverbindung)  als Hotstandby WAN Verbindung zu nutzen.

Da der Raspberry-Pi ansonsten NICHT als Default-Gateway meines Netzwerkes dient, möchte ich diesen bei Ausfall der Internetverbindung nur als Proxy verwenden.
Ich muss also nicht den Standard-Gateway auf den Clients anpassen, sondern den Proxyeintrag der Client Internet-Browser bei Bedarf/Ausfall setzen.

Dieser Beitrag ist nur ein grober Überblick, behandelt jedoch keine Detailfragen !

Problem 1:
Da hier 2 Daemons (smstools und pppd) auf das USB Modem zugreifen, musste in der  smstools Konfigurationsdatei die Devicenummer anpasst werden !

  1. ppp verwendet nun /dev/ttyUSB0
  2. smstools verwendet /dev/ttyUSB1

Das USB-Modem benötigt in meinem Fall mindestens 2 Device Nummern, dies ist hier der Fall: (Dürfte vom Typ des USB-Sticks abhängig sein)

dmesg | grep modem
[   12.876180] usbserial: USB Serial support registered for GSM modem (1-port)
[   13.019698] option 1-1.3:1.2: GSM modem (1-port) converter detected
[   13.049190] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB0
[   13.049755] option 1-1.3:1.3: GSM modem (1-port) converter detected
[   13.056168] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB1
[   13.056800] option 1-1.3:1.4: GSM modem (1-port) converter detected
[   13.057593] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB2
[   13.058213] option 1-1.3:1.5: GSM modem (1-port) converter detected
[   13.058900] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB3

 

Schritt 1, Pakete installieren:
Benötigte Pakete:

apt-get install ppp usb-modeswitch

Optionale Pakete installieren (Falls man den PPP Onlinestatus anzeigen möchte, bzw. Anzahl der übertragenen Pakete):

apt-get install pppstatus

 

Schritt 2, UMTS Internetverbindung einrichten und testen:

Die 2 benötigten Konfigurationsdateien für pppd erstellen, in meinem Fall ist der Datenstick von hot.at (Hofer).

nano /etc/ppp/peers/hot
hide-password
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/hot"
debug
/dev/ttyUSB0
460800
defaultroute
replacedefaultroute
noipdefault
usepeerdns
nano /etc/chatscripts/hot
ABORT 'BUSY'
ABORT 'NO ANSWER'
ABORT 'ERROR'
ABORT 'NO CARRIER'
'' 'ATZ'
TIMEOUT 5
'OK' 'ATE1'
'OK' 'AT+CGDCONT=1,"IP","webaut","0.0.0.0",0,0'
'OK' 'ATDT*99#'
'CONNECT' '\c'

Beim ersten Test die Verbindung mit debug Ausgabe starten:

pppd call hot nodetach

Die UMTS Verbindung aufbauen und  trennen:

pon hot
poff hot

Public IP anzeigen (im Regelfall nicht von aussen erreichbar ohne Sondertarif !)

curl ipinfo.io/ip

Tests:

  • Test ob DNS-Server in /etc/resolv.conf richtig gesetzt werden, und wichtig nach Verbindungsende auch wieder entfernt werden !

 

Schritt 3, Backup Proxy für Clients einrichten:

Dazu verwende ich auf dem Raspberry nicht „squid“ Proxyserver, sondern den kleineren „polipo“.

apt-get install polipo
nano /etc/polipo/config
# This file only needs to list configuration variables that deviate
# from the default values.  See /usr/share/doc/polipo/examples/config.sample
# and "polipo -v" for variables you can tweak and further information.

logSyslog = true
logFile = /var/log/polipo/polipo.log

proxyAddress = "192.168.0.34"
allowedClients = 127.0.0.1, 192.168.0.0/24

Nach Bearbeitung der Konfigurationsdatei den Proxy neustarten:

service polipo restart

Nun kann der Proxy von einem Client aus getestet werden, hier im Browser als Proxy die Raspberry IP (bzw. DNS) eintragen und die Portnummer: 8123 (polipo Default-Port)

Da ich den Proxy nur bei Ausfall der Hauptverbindung starten möchte, entferne ich den automatischen Starteintrag des Daemons:

update-rc.d polipo remove

 

Schritt 4, Automatische Steuerung der UMTS Verbindung:

  1. Ich möchte das die UMTS Verbindung nur bei Ausfall der Hauptverbindung (eth0->firewall-isp) aufgebaut wird.
  2. Ausserdem möchte ich über den Verbindungsaufbau per SMS informiert werden. (Damit ich weiss das ich den Proxy im Browser eintgragen sollte 🙂

Ich hänge hier einfach mein einfaches Bashscript dran, das ich minütlich per crontab laufen lasse. Das Script benötigt das arping Paket  !

apt-get install arping sendemail

cat /var/scripts/umts-wanbackup.sh

#!/bin/sh

provider=hot #This is Name of ppp peer -> /etc/ppp/peers/hot
pinghost="135.37.133.1" #When this adress not response, start umts
pingcount=3 #Count of Packets
gateway=40:3d:5c:a7:e9:f6 #MAC Adress of Default Gateway from eth0 Interface
log="/var/log/wan-backup.log"
timestamp=`date +"%Y%m%d_%H%M"`
subject="Internetleitung Hotstandby: Hauptleitung ist"
message="Proxydaten: notproxy.domain.net:8123"

sendsms(){
File=/var/scripts/start-umts.txt
echo To: +436603456780 > $File
echo >> $File
echo UMTS Wan-Backup gestartet! Verwende Hotstandby Proxy. $message >> $File

echo `cat $File`
touch $File
cp $File /var/spool/sms/outgoing/
}

sendmail_online(){
sendemail -f `hostname`@domain.net -t admin@domain.net -s smtp.domain.net -u "$subject Online " -m "Hauptleitung ist Online, UMTS wurde herungergefahren"
}

sendmail_offline(){
sendemail -f `hostname`@domain.net -t admin@domain.net -s smtp.domain.net -u "$subject Offline " -m "Hauptleitung ist Offline, UMTS wurde gestartet.\n$message"
}

pppstart(){
pon $provider
/etc/init.d/polipo start > /dev/null 2>&1
#sendsms
sendmail_offline
}

pppstop(){
poff $provider > /dev/null 2>&1
/etc/init.d/polipo stop > /dev/null 2>&1
sendmail_online
}

pppstatus(){
STATUS=`cat /proc/net/dev | grep ppp0`
if [ ! "${STATUS}" = "" ] ;then
ppp="up"
else
ppp="down"
fi
}

# --- MAIN ---
pppstatus

if /usr/sbin/arping -I eth0 -c $pingcount -T $pinghost $gateway > /dev/null 2>&1; then
if [ $ppp = "down" ]; then
logger -s "Internetleitung ist Online"
echo "${timestamp}: Internetleitung ist Online" >> ${log}
else
logger -s "Internetleitung ist Online, UMTS wird getrennt"
echo "${timestamp}: Internetleitung ist Online, UMTS wird getrennt" >> ${log}
pppstop
fi
else
if [ $ppp = "down" ]; then
logger -s "Internetleitung ist Offline, UMTS wird gestartet"
echo "${timestamp}: Internetleitung ist Offline, UMTS wird gestartet" >> ${log}
pppstart
else
logger -s "Internetleitung ist Offline, UMTS ist Online"
echo "${timestamp}: Internetleitung ist Offline, UMTS ist Online" >> ${log}
fi
fi

Schreibe einen Kommentar



error: