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 !
- ppp verwendet nun /dev/ttyUSB0
- 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:
- Ich möchte das die UMTS Verbindung nur bei Ausfall der Hauptverbindung (eth0->firewall-isp) aufgebaut wird.
- 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