Ich wollte eine SIMPLE Möglichkeit um zwischen 2 Gateways schmerzlos umzuschalten
Nachdem ich im OpenWRT-Forum ausgebuht wurde, mein Ansinnen müsste man ja unbedingt mit einem externem Addon namens mwan3 erledigen, stelle ich meine scriptbasierte Lösung auf Virtualisierungsbasis mal hier ein.
Vielleicht hilft es jemandem.
Vorraussetzung:
Nun muss nur bei Bedarf nur die entprechende OpenWRT-VM gestartet werden.
Das macht folgendes Script:
Hilfsscript für die WAN-Verfügbarkeit eines Gateways:
Nachdem ich im OpenWRT-Forum ausgebuht wurde, mein Ansinnen müsste man ja unbedingt mit einem externem Addon namens mwan3 erledigen, stelle ich meine scriptbasierte Lösung auf Virtualisierungsbasis mal hier ein.
Vielleicht hilft es jemandem.
Vorraussetzung:
- Es gibt zwei Gateways im LAN, die eine WAN-Verbindung haben.
- Es gibt zwei virtualisierte Minimal-OpenWRTs, die sich lediglich durch unterschiedliche Gateway-Definitionen auf die zwei HW-Gateways unterscheiden. Diese benötigen auch nur eine Netzwerkschnittstelle.
- Beide OpenWRT-VMs benutzen die gleiche IP, welche als Gateway im Netz propagiert wird und sollten nie parallel laufen.
- DNS/DHCP laufen nicht auf den Gateways. Selbige fungieren wirklich nur als GW.
Nun muss nur bei Bedarf nur die entprechende OpenWRT-VM gestartet werden.
Das macht folgendes Script:
Code:
#!/bin/bash
# FAILOVER für Gateways openWRT254 und OpenWRT247 auf PVE-osts beide GW unter 192.168.1.1 verfügbar und im Netz propagiert.
# Die Minimal-OpenWRT-VMs unterscheiden sich nur im definierten GW.
# So sind die Open-WRTs einfachste Proxys der physischen Gateways um recht nahtlos Umschalten zu können.
# Vorraussetzung ist ein konfigurierter Postfix, um Benachrichtgungen mit mutt zu versenden.
# Die scripte check254.sh und check247.sh sind im Prinzip identisch und prüfen nur die WAN-Verbindung der entsprechenden Fritzbo
xen
# Andere Router erforden natürlich andere Prüfmechanismen.
MAILTO="evil@umbrella.com"
COMPANY="Umbrella corp."
SLEEPTIME=30 # wir prüfen alle 30s.
LINKEDBY="bond0:" # Einzelschnittstelle, vmbr oder bond
MASTERPVE="192.168.1.201" # da sollen die OpenWRTs eigentlich rumwerkeln
AMIMASTERPVE=$(ip addr | grep $MASTERPVE | wc -l) # Bin ich das womöglich selbst?
while true; do
sleep $SLEEPTIME
LINKED=$(ip link show | grep $LINKEDBY | grep "state UP" | wc -l) # Sind wir denn selbst im Netzwerk überhaupt verfügbar?.
if [ $LINKED == 1 ]; then # LAN connection active
ACTIVEMASTERPVE=$(nmap -p 22 $MASTERPVE | grep open | wc -l)
if [ $AMIMASTERPVE == 1 ] || [ $ACTIVEMASTERPVE == 0 ]; then # oh wir sind selbt Master aber Master-WAN ist platt.
INTERNET=$(curl -s https://icanhazip.com | wc -l) # liefert unsere externe IP, falls online
MASTERUP=$(/root/check254.sh) # WAN Haupt-GW prüfen
FAILOVERUP=$(/root/check247.sh) # WAN Failover-GW prüfen
RUNNINGMASTER=$(qm list | grep 901 | grep running | wc -l)
if [ $INTERNET == 0 ]; then # inet absent
if [ $FAILOVERUP == 1 ]; then # failover possible
if [ $RUNNINGMASTER == 1 ]; then # MasterOpenWRT aktiv, Inet sollte eigentlich funktionie
ren tuts aber nicht
qm start 900
qm shutdown 901
echo "Gateway über OpenWRT Master ist ausgefallen FAILOVER wird aktiviert." | mutt -s "Failover $COMPANY Failover-Op
enWRT (VM900) läuft nun auf $HOSTNAME" -- $MAILTO
fi
else
echo "Failover-Gateway nicht verfügbar."
fi
else
if [ $MASTERUP == 1 ]; then # MasterRoute online
qm shutdown 900
if [ $RUNNINGMASTER == 0 ]; then # MasterOpenWRT nicht aktiv, kann also wieder aktiviert werden
qm start 901
echo "Gateway über OpenWRT Master wieder aktiv FAILOVER wurde deaktiviert." | mutt -s "Recover $COMPANY Master-OpenW
RT (VM901) läuft nun wieder auf $HOSTNAME" -- $MAILTO
fi
fi
fi
else # unser Master-PVE ist wohl am Start. Alles nicht mehr unser Bier. Wir stoppen hier also alle womöglichen laufen
de OpenWRTs
if [ $AMIMASTERPVE == 0 ]; then # wir sind also nur failoverhost und wollen kein
esfalls am Master fummeln.
RUNNING247=$(qm list | grep "openwrt247" | grep "running" | wc -l) # läuft hier ein Failover-WRT
RUNNING254=$(qm list | grep "openwrt254" | grep "running" | wc -l) # oder gar der Master-WRT
if [ $RUNNING247 == 1 ]; then
qm shutdown 900
fi
if [ $RUNNING254 == 1 ]; then
qm shutdown 901
fi
fi
fi
else
echo "Wir sind offline und damit nutzlos."
fi
done
Hilfsscript für die WAN-Verfügbarkeit eines Gateways:
Code:
#!/bin/bash
# Prüft, ob die Fritzbox meint, das WAN würde funktionieren
curl -s -X POST -H "Content-Type: text/xml; charset=utf-8" -H "SoapAction: \"urn:schemas-upnp-org:service:WANCommonInterfaceConf
ig:1#GetCommonLinkProperties\"" --data "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.o
rg/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetCommonLinkProperties xmlns:u=\"u
rn:schemas-upnp-org:service:WANCommonInterfaceConfig:1\"/></s:Body></s:Envelope>" "http://192.168.1.247:49000/igdupnp/control/WA
NCommonIFC1" | grep -E "(NewPhysicalLinkStatus|NewWANAccessType|NewLayer1DownstreamMaxBitRate|NewLayer1UpstreamMaxBitRate)" | gr
ep ">Up<" | wc -l
Last edited: