Automatische Offline Page bereitstellen

blubber12345

Neuer User
Mitglied seit
24 Dez 2009
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
hallo,

ich steh mal wieder vor einem kleinen Problem :mad:

Ausgangssituation:
- Wake On Call eingerichtet
- Shutdown Möglichkeit eingerichtet
- Webserver auf weiterem Lan-Rechner

Was nun folgen sollte:
- Falls die Seite des Lan-Rechners nicht erreichbar ist, weil dieser zum Beispiel offline ist oder der Webserver abgeschmiert ist, soll auf der F!B eine kleine Offline Seite per httpd bereitgestellt werden auf die meine dyndns Adresse geforwarded werden soll.

Skript:
- Dieses kleine Skript hilft beim Switch.
Code:
#!/bin/sh
# skript to set redirect to buri's websrv if it is online

WEBSRVSTAT=1 # 0-online, 1-offline
WEBSRVIP=""
websrvstat(){
        local info=$(wget -s http://${WEBSRVHOST}/ 2>&1)
        local idxavail=$(wget -q -s http://${WEBSRVHOST}/ > /dev/null 2>&1 /dev/null; echo $?)
        local ip=$(echo ${info} | cut -d'(' -f2 | cut -d')' -f1)

        if [ "${ip}" != "" -a "${idxavail}" == "0" ] ; then
                WEBSRVSTAT=0
                WEBSRVIP="${ip}"
        else
                WEBSRVSTAT=1
                WEBSRVIP=""
        fi
}

setupvirtwebsrv(){
        local vip=$1
        local port=$2
        local iface=$3
        local nmask=$4
        local bcast=${vip%.*}".255"

        echo "$vip - $port - $iface - $nmask - $bcast"

        # rewrite ar7.cfg
        [B]cp /var/flash/ar7.cfg /var/tmp/ar7.cfg
        cat /var/tmp/ar7.cfg | sed 's/\"tcp\ 0\.0\.0\.0:80\ .*\ 0\ \#\ HTTP\ SRV\"/ \
                                      \"tcp\ 0\.0\.0\.0:80\ '"${vip}"':'"${port}"'\ 0\ \#\ HTTP\ SRV\"/' \
                                      > /var/tmp/ar7.cfg.new
        cat /var/tmp/ar7.cfg.new > /var/flash/ar7.cfg
[/B]
        # start httpd
        #echo "httpd -P ${WEBSRVOFFPID} -p ${vip}":"${port} -h ${WEBSRVOFFHOME}"
        #httpd -P ${WEBSRVOFFPID} -p ${vip}":"${port} -h ${WEBSRVOFFHOME}
        [B]echo "httpd -P ${WEBSRVOFFPID} -p ${port} -h ${WEBSRVOFFHOME}"
        httpd -P ${WEBSRVOFFPID} -p ${port} -h ${WEBSRVOFFHOME}
[/B]
        # setup virtual interface
        #echo "ifconfig ${iface} ${vip} netmask ${nmask} broadcast ${bcast} up"
        #ifconfig ${iface} ${vip} netmask ${nmask} broadcast ${bcast} up
}

setuplanwebsrv(){
        local ip=$1
        local port=$2
        local iface=$3

        echo "$ip - $port - $iface"

        # 1st write ar7.cfg
        [B]cp /var/flash/ar7.cfg /var/tmp/ar7.cfg
        cat /var/tmp/ar7.cfg | sed 's/\"tcp\ 0\.0\.0\.0:80\ .*\ 0\ \#\ HTTP\ SRV\"/ \
                                      \"tcp\ 0\.0\.0\.0:80\ '"${ip}"':'"${port}"'\ 0\ \#\ HTTP\ SRV\"/' \
                                      > /var/tmp/ar7.cfg.new
        cat /var/tmp/ar7.cfg.new > /var/flash/ar7.cfg[/B]

        # 2nd stop httpd
        echo "kill $(cat ${WEBSRVOFFPID})"
        kill $(cat ${WEBSRVOFFPID})

        # 3rd stop virtual interface
        #echo "ifconfig ${iface} down > /dev/null 2>&1 > /dev/null 2>&1"
        #ifconfig ${iface} down > /dev/null 2>&1 > /dev/null 2>&1
}

PREVWEBSRVSTAT=1
WEBSRVHOST="buri"
WEBSRVOFFHOME="/var/tmp/.webhomes/offline/"
WEBSRVOFFPID="/var/tmp/.webhomes/websrv-off.pid"
watchwebsrv() {
        while(true)
        do
                websrvstat

                if [ "${WEBSRVSTAT}" == "0" -a "${PREVWEBSRVSTAT}" == "1" ] ; then
                        PREVWEBSRVSTAT=0
                        echo "'${WEBSRVHOST}' IS ONLINE. WEBSRV IS RUNNING @ ${WEBSRVIP}"
                        setuplanwebsrv "$(echo ${WEBSRVIP} | cut -d':' -f1)" \
                                       "$(echo ${WEBSRVIP} | cut -d':' -f2)" \
                                       "eth0:1"
                fi
                if [ "${WEBSRVSTAT}" == "1" -a "${PREVWEBSRVSTAT}" == "0" ] ; then
                        PREVWEBSRVSTAT=1
                        echo "'${WEBSRVHOST}' IS OFFLINE"
                        setupvirtwebsrv "192.168.237.1" "83" "eth0:1" "255.255.255.0"
                fi

                sleep 5
        done
}

usage(){
        echo "Usage: ./watchdog <SERVICE> , SERVICE={websrv}"
}

main(){
        case "$1" in
                "websrv" ) watchwebsrv ;;
                * ) usage ;;
        esac
}

main $1

Problem:
- Der Switch funktioniert auch so weit schon.
- Allerdings nur LAN intern. Also jeweiliges Ansprechen der IPs bzw. Rechnernamen funktioniert, je nach dem welcher Server läuft (httpd auffer Box oder aufm LAN Rechner)
- Die Änderungen der Forwarding Regeln scheinen irgendwie nicht an meine Dyndns-Adresse gebunden zu werden.

Fragen:
- Reicht es aus die Forwarding Regeln in die ar7.cfg zu schreiben, oder muss diese Änderung noch gesondert für Dyndns bekannt gegeben/gebunden werden ?
- Eine Konfiguration mithilfe einer virtuellen IP auf der Box führten auch nicht zum Erfolg. Irgend welche Vorschläge, wieso Dyndns (auch nach einer längeren Zeitspanne) die Änderungen nicht mitkriegt ?

EDIT:
ok ich bin jetzt soweit, dass es scheint als würde die ar7.cfg nach neu schreiben nicht geladen/erwendet werden.
mittels
Code:
$ ar7cfgchanged
$ exec /etc/init.d/rc.net reload
können die neuen einstellungen nachgeladen werden.

Allerdings werden hierbei alle Interfaces und Konfigurationsdateien neu geladen.
Gibt es hier eine Möglichkeit nur die ar7.cfg nachträglich nochmal zu laden, ohne die Interfaces neu zu initiieren ?


gtx
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.