Fritz!Box per Bash-Script neustarten

heute möchte ich euch ein nützliches Bash-Script vorstellen, das mir persönlich sehr geholfen hat. Es handelt sich um das “fritzbox-restart.v1.sh”-Script, mit dem ich meine Fritz!Box bei Problemen mit der Stabilität der Internetverbindung neu starten kann. Da ich selbst lange Zeit mit dieser Herausforderung zu kämpfen hatte, möchte ich meine Erfahrungen und Lösung gerne mit euch teilen.

Um das Script nutzen zu können, benötigt ihr eine Fritz!Box mit FritzOS 6.0 oder höher. Die genaue Beschreibung ist in meinem Git-Repository verfügbar, den Link dazu findet ihr am Ende dieses Blogposts. Lasst mich nun kurz erklären, wie das Script funktioniert.

#!/bin/bash
# Script Name:  fritzbox-restart.v1.sh
# Beschreibung: startet die Fritzbox neu
#               Dieses Bash-Script nutzt das Protokoll TR-064
#               Skript funktioniert für alle Fritzboxen ab FritzOS 6.0
# Aufruf:       ping -c 1 1.1.1.1 >/dev/null || (for i in {1..3}; do ping -c 1 1.1.1.1 >/dev/null && exit; sleep 30; done; /home/scripts/network/fritzbox-reboot.v1.sh)
# Aufruf 2      bash ./fritzbox-reboot.v1.sh
# Autor:        Patrick Asmus
# Web:          https://www.media-techport.de
# Git-Reposit.: https://git.media-techport.de/scriptos/fritzbox-restart-script
# Version:      1.0.2
# Datum:        16.07.2023
# Modifikation: Logging hinzugefuegt
#####################################################

# Variablen
IPS="192.168.178.1"
FRITZ_USER="FritzBenutzer"
FRITZ_PW="FritzPasswort"
LOG_FILE="/var/log/script-logs/fritzbox-restart.log"

# Funktion zum Schreiben von Logs
log() {
    timestamp=$(date +"%Y-%m-%d %T")
    echo "[${timestamp}] $1" >> "$LOG_FILE"
}

# Ausführung
location="/upnp/control/deviceconfig"
uri="urn:dslforum-org:service:DeviceConfig:1"
action='Reboot'

log "Script gestartet."

for IP in ${IPS}; do
    log "Starte Neustart für Fritzbox mit IP: $IP"
    curl -k -m 5 --anyauth -u "$FRITZ_USER:$FRITZ_PW" "http://$IP:49000$location" -H 'Content-Type: text/xml; charset="utf-8"' -H "SoapAction:$uri#$action" -d "<?xml version='1.0' encoding='utf-8'?><s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><u:$action xmlns:u='$uri'></u:$action></s:Body></s:Envelope>" -s > /dev/null
    log "Neustart für Fritzbox mit IP: $IP abgeschlossen."
done

log "Script beendet."

Bevor wir starten, müsst ihr einige Variablen an eure individuelle Konfiguration anpassen. Ihr findet diese im oberen Teil des Scripts. Hier könnt ihr die IP-Adresse eurer Fritz!Box, eure Fritz!Box-Benutzerdaten sowie den Pfad für das Log-File festlegen. Es ist wichtig, dass ihr diese Informationen korrekt eintragt, damit das Script reibungslos funktioniert.

Das Script selbst verwendet das TR-064 Protokoll, um die Fritz!Box neu zu starten. Es nutzt die curl-Bibliothek, um eine Verbindung zur Fritz!Box herzustellen und den Neustart-Befehl zu senden. Dabei werden die eingegebenen IP-Adresse, Benutzerdaten und der Pfad für das Log-File verwendet. Das Script unterstützt auch die Verwendung mehrerer Fritz!Boxen, indem ihr einfach die entsprechenden IP-Adressen durch Kommas getrennt in der Variable “IPS” eintragt.

Um das Script auszuführen, könnt ihr den folgenden Befehl verwenden:

bash ./fritzbox-reboot.v1.sh

Das Script startet dann den Neustartvorgang für jede angegebene Fritz!Box-IP-Adresse. Es schreibt außerdem Ereignisse und Statusmeldungen in das Log-File, sodass ihr den Fortschritt und eventuelle Fehler nachverfolgen könnt.

Ich für meinen Fall nutze dieses Script in einem Cronjob:

*/30 * * * * ping -c 1 1.1.1.1 >/dev/null || (for i in {1..3}; do ping -c 1 1.1.1.1 >/dev/null && exit; sleep 30; done; /home/scripts/network/fritzbox-reboot.v1.sh)

Dieser Cronjob prüft alle 30 Minuten die Verbindung ins Internet, in dem versucht wird eine Verbindung zum öffentlichen DNS-Server 1.1.1.1 herzustellen. War der Verbindungsversuch erfolgreich, wird nichts weiter unternommen. Wenn der Verbindungsversuch 3 mal nicht erfolgreich war, wird das Script ausgeführt und damit die Fritz!Box(en) neu gestartet.

Ich persönlich habe dieses Script bereits erfolgreich genutzt, um meine Fritz!Box bei Verbindungsproblemen neu zu starten. Es hat mir geholfen, die Stabilität meiner Internetverbindung wiederherzustellen und ständige Unterbrechungen zu vermeiden. Natürlich ist es wichtig zu beachten, dass das Neustarten der Fritz!Box den Internetzugang vorübergehend unterbricht. Wenn diese aber ohnehin nicht vorhanden ist, macht das eh keinen Unterschied.

Falls ihr weitere Informationen benötigt oder Fragen zum Script habt, könnt ihr gerne mein Git-Repository besuchen, in dem ihr den vollständigen Code und weitere Details findet. Hier ist der Link dazu: Git-Repository: scriptos/fritzbox-restart-script

Ich hoffe, dass dieses Script euch genauso gut helfen wird wie mir. Wenn ihr weitere Fragen oder Anregungen habt, könnt ihr mir gerne einen Kommentar hinterlassen. Ich freue mich immer über Feedback.

Bis zum nächsten Mal und eine stabile Internetverbindung wünsche ich euch.

Danke fürs Teilen!