[Gelöst] Wlan ausschalten, wenn kein VPN

JokerGermany

Mitglied
Mitglied seit
7 Aug 2007
Beiträge
610
Punkte für Reaktionen
6
Punkte
18
Ich habe hier eine etwas speziellere Proxy Problematik.
Ich hätte eigentlich gerne die folgende Lösung: Wenn an Lan1 (Internet) kein Kabel angeschlossen ist, soll das Wlan ausgehen, damit Mobile Geräte ihr Mobiles Internet nutzen.
Da ich dafür auf die schnelle keine Lösung gefunden habe und diese nur noch bis Juli brauche, habe ich mir eine andere Lösung überlegt:
Wenn der VPN nicht aufgebaut ist, soll das Wlan ausgehen. Diese Lösung hat auch den Vorteil, dass bei nicht funktionierendem Proxy das Wlan ausgeschaltet wird...

Ich habe schon eine crontab Lösung von @MaxMuster , welche den VPN neustartet, wenn die Verbindung abgerissen ist.
Code:
*/4 * * * *    ping -q -w 2 192.168.2.1 1>&2 2>/dev/null || /mod/etc/init.d/rc.openvpn restart
192.168.2.1 ist hierbei die IP auf der anderen Seite des VPN Tunnel.
Die Lösung klappt sehr gut, daher habe ich gedacht, dass ich meine Wlan Problematik auch so lösen kann.
Code:
*/5 * * * *    ping -q -w 2 192.168.2.1 1>&2 2>/dev/null || /etc/init.d/rc.net wlanstop
*/2 * * * *    ping -q -w 2 192.168.2.1 1>&2 2>/dev/null && /etc/init.d/rc.net wlanstart

Wo liegt mein Fehler?

€dit:
Das Skript scheint nun zu funktionieren, der unten genannte crontab aufruf scheint immer noch falsch
https://github.com/JokerGermany/WlanAusschaltenFreetz
 
Zuletzt bearbeitet:
Schau Dir besser an, was in den Lua-Seiten beim Ein-/Ausschalten des WLAN geschieht - das "wlanstart" und "wlanstop" in der "rc.net" kann auch in allen möglichen anderen Situationen aufgerufen werden (Du brauchst nur mal in der "rc.net" in "startall" und "stopall" schauen und dann noch einmal, an wievielen Stellen diese dann wieder aufgerufen werden) ... diese Aufrufe taugen einfach nicht zum (dauerhaften) Ein- und Ausschalten des WLAN.

Da kommst Du mit einem passenden "ctlmgr_ctl" vermutlich weiter ... und man kann durchaus auch in einer "crontab" ein Skript aufrufen und muß nicht zwangsläufig eine "Kommandokette" auf Teufel komm raus realisieren wollen. Wenn man's richtig macht, kann man sogar mit demselben Skript (das man dann wieder im Minutenrhythmus aufrufen könnte) das WLAN ein- und ausschalten lassen, je nach Ergebnis des "ping". Wobei man bei einer Minute dann auch gleich mit einem Loop und "sleep" arbeiten kann ... und dann kann man sogar tatsächlich den Status des LAN-Ports abfragen lassen (ebenfalls mit "ctlmgr_ctl", wenn ich mich nicht irre - das findet man wieder in den Netzwerk-Seiten des GUI, wo die Angaben für "grüne oder graue LED" zusammengesucht werden) und muß nicht auf ein "ping" bauen (was auch mal aus anderem Grund schiefgehen kann und ein eher unzuverlässiger Indikator ist, zumindest ohne Eskalationsstrategie).
 
Hab gerade keine Fritz!box in der Nähe, aber ich vermute du meinst:
Code:
ctlmgr_ctl r eth0 status/carrier
für auslesen von lan und
Code:
ctlmgr_ctl w wlan settings/STA_enabled 1
bzw
Code:
ctlmgr_ctl w wlan settings/STA_enabled 0
für wlan an und ausschalten?
 
Ich weiß es aus dem Stand auch nicht und müßte selbst erst nachsehen in den Dateien aus der Firmware ... aber neuere Versionen des "ctlmgr_ctl" erlauben auch das "Aufzählen" der bekannten Variablen für die verschiedenen Plugins mit dem "-u"-Parameter beim Aufruf (einfach mal mit "-h" aufrufen, da stehen dann die bekannten Möglichkeiten der Parametrierung).
 
Code:
ctlmgr_ctl -?
usage: ctlmgr_ctl [options] <r [ui-module key]+> | <w [ui-module key value]+> | <u [ui-module]*> | <del [ui-module command]+
options:
  -?                 - print this help
  -s STRING          - string: SID to use. (NULL)
  -v                 - bool: echo variable name, not only value. (NOTSET)
  -d CHAR            - use character instead of TAB for field delimiter. ()
  -D STRING          - switch debug logs on. (FUNC)
(r: read), then list of tuples describing each value to be read (at least one)
(w: write), then list of triples dcodeescribing each value to be read (at least one)
(u: dump), then list of ui-modules. If empty, will provide list of available ui-modules
(del), then command string, which node should be deleted
(l: list), list variable
examples:
1) ctlmgr_ctl w wlan settings/STA_enabled 1
2) ctlmgr_ctl r wlan settings/STA_enabled
3) ctlmgr_ctl u wlan
4) ctlmgr_ctl del landevice landevice:command/landevice0
5) ctlmgr_ctl l landevice "settings/landevice/list(UID,allow_pcp_and_upnp,igd_fw_cnt_pcp,igd_fw_cnt_upnp)"

Aber irgendwie bleibt er bei
Code:
ctlmgr_ctl w wlan settings/STA_enabled 0
trotzdem an obwohl
Code:
ctlmgr_ctl r wlan settings/STA_enabled
0 anzeigt.

Aber egal, ich will daraus keine Wissenschaft machen, so wichtig ist es dann nicht mehr für die letzten 2 Monate...
 
"STA_enabled" wäre wohl ohnehin eher dafür verantwortlich, ob die Box als WLAN-Client arbeitet oder nicht.

Hier sind eher "ap_enabled" und "ap_enabled_scnd" die richtigen Einstellungen, wenn ich mich richtig erinnere ... nachsehen will ich jetzt trotzdem nicht.
 
  • Like
Reaktionen: JokerGermany
Ähm, danke aber dumme geschichte:
ap_enabled_scnd hat funktioniert, aber nur zum ausschalten.
Der Wert ist wieder auf 1 die Fritzbox auch mehrmals neugestartet, aber jetzt sieht man wie das wlan in der Fritzbox oberfläche nach dem start erst grün ist und dann ausgeschaltet wird.
In der Oberfläche kann man nichts mehr einstellen...
wlanstart hat auch nichts geholfen....
 
Beide gleichzeitig setzen bzw. löschen ... das sind deshalb zwei getrennte Werte, weil man damit (theoretisch) die beiden Bänder auch getrennt steuern könnte. Das "ap_enabled_scnd" (das dürfte "second" heißen) ist für das 5 GHz-Band.

Ansonsten ... wenn gar nichts mehr geht, einfach die "wlan.cfg" aus den Standardeinstellungen (in /etc) nach "/var/flash" schaffen (Achtung, TFFS - braucht "character oriented I/O" beim Schreiben und kein "cp" o.ä.) und die Box neu starten. Beim Schreiben der "wlan.cfg" sollte der "ctlmgr" nicht aktiv sein (einfach mit "ctlmgr -s" anhalten) - ansonsten überschreibt der später beim Stoppen im schlechtesten Fall die "wlan.cfg" wieder.

Daß man dann das WLAN neu konfigurieren muß (sofern man nicht die Datei vor den eigenen Versuchen mit "ctlmgr_ctl" gesichert hat und die nun einfach wiederherstellen kann - dann braucht man die Standardwerte natürlich auch nicht aus /etc, wobei die "wlan.cfg" dort m.W. ohnehin eher kurz ist), versteht sich von selbst.
 
Ja, war trotzdem auf einmal beides aus, obwohl ich nur den einen befehl gesendet habe.
War wohl eine böse wechselwirkung mit settings/STA_enabled die immer noch auf 1 war, seit die wieder auf 0 steht funzt es mit an und aus und 5Ghz und 2,4GHz XD

Bloß kann ich das nicht mehr über das AVM GUI steuern, dort ist es ausgegraut, ka ob es an meiner fritzbox liegt, die sich bei neustarts sowieso seltsam verhält, weswegen ich diese Lösung brauch da ich sonst einfach die FritzBox vom Strom nehmen würde..., siehe anderen Thread...
https://www.ip-phone-forum.de/threads/fritz-box-vergisst-dass-sie-openvpn-installiert-hat-und-verhält-sich-seltsam.299028/#post-2271939
 
Zuletzt bearbeitet:
So, als Script definitiv besser aufgehoben, aber es sollte erstmal funktionieren...
Code:
*/5 * * * *    ctlmgr_ctl r eth0 status/carrier || ctlmgr_ctl w wlan settings/ap_enabled 0
*/5 * * * *    ctlmgr_ctl r eth0 status/carrier || ctlmgr_ctl w wlan settings/ap_enabled_scnd 0
*/2 * * * *    ctlmgr_ctl r eth0 status/carrier && ctlmgr_ctl w wlan settings/ap_enabled 1
*/2 * * * *    ctlmgr_ctl r eth0 status/carrier && ctlmgr_ctl w wlan settings/ap_enabled_scnd 1

### Zusammenführung Doppelpost by stoney ###

So, hier als Skript ungetestet runtergeschrieben:
Code:
#!/bin/sh
while [ true ]
do
    while [ ctlmgr_ctl r eth0 status/carrier == 1 ]
    do
        if [ ctlmgr_ctl r wlan settings/ap_enabled_scnd == 0 ]
        then
            ctlmgr_ctl w wlan settings/ap_enabled_scnd 1
        fi      
        if [ ctlmgr_ctl r wlan settings/ap_enabled == 0 ]
        then
            ctlmgr_ctl w wlan settings/ap_enabled 1
        fi
        sleep 60
    done
    while [ ctlmgr_ctl r eth0 status/carrier == 0 ]
    do
        if [ ctlmgr_ctl r wlan settings/ap_enabled_scnd == 1 ]
        then
            ctlmgr_ctl w wlan settings/ap_enabled_scnd 0
        fi      
        if [ ctlmgr_ctl r wlan settings/ap_enabled == 1 ]
        then
            ctlmgr_ctl w wlan settings/ap_enabled 0
        fi
        sleep 60
    done
done

Das gleich hier nochmal mit ping.
Wie gesagt ungetestet und einfach runtergeschrieben...
Code:
#!/bin/sh
ip=192.168.222.1
while [ true ]
do
    ping -q -w 2 $ip 1>&2 2>/dev/null
    while [ $? == 0 && ctlmgr_ctl r eth0 status/carrier == 1 ]
    do
        if [ ctlmgr_ctl r wlan settings/ap_enabled_scnd == 0 ]
        then
            ctlmgr_ctl w wlan settings/ap_enabled_scnd 1
        fi          
        if [ ctlmgr_ctl r wlan settings/ap_enabled == 0 ]
        then
            ctlmgr_ctl w wlan settings/ap_enabled 1
        fi
        sleep 60
        ping -q -w 2 $ip 1>&2 2>/dev/null
    done
    while [ ctlmgr_ctl r eth0 status/carrier == 0 ]
    do
        if [ ctlmgr_ctl r wlan settings/ap_enabled_scnd == 1 ]
        then
            ctlmgr_ctl w wlan settings/ap_enabled_scnd 0
        fi          
        if [ ctlmgr_ctl r wlan settings/ap_enabled == 1 ]
        then
            ctlmgr_ctl w wlan settings/ap_enabled 0
        fi  
        sleep 60  
    done
done
192.168.222.1 durch die IP/DNS Namen seines Wunsches ersetzen...
https://github.com/JokerGermany/WlanAusschaltenFreetz/blob/master/wlanautoping-freetz.sh
 
Zuletzt bearbeitet von einem Moderator:
  • Like
Reaktionen: WileC
@JokerGermany
Wo genau würdest Du das Skript einbinden? .. per cron einmal aufrufen lassen (bleibt ja auf Grund der Schleife immer am laufen), oder über die rc.custom, bzw übers onlinechanged?
 
Ich hatte mich für die rc.custom entschieden
Hab es aber nicht mehr im Einsatz...

Bin mir auch nicht mehr 100%ig sicher ob es zuverlässig funktioniert hat, war eine stressige Zeit als ich das Skript erstellt habe...
Nehm aber auf jeden Fall die aktuellste Version von Github, bei der geposteten waren noch Fehler drin...
 
Zuletzt bearbeitet:
Vielen Dank ;)
 
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.