WLAN automatisches Neuverbinden

yxy

Lieutenant
Registriert
Juli 2014
Beiträge
556
Hallo,

ich habe einen PC auf dem Linux (eine Ubuntu-basierende Linux-Distribution) läuft.
Per Fernzugriff muss ich hin und wieder auf diesen zugreifen.

Problem: Der PC ist über WLAN mit dem Internt verbunden. Hin und wieder macht das WLAN Probleme. So kann es passieren, dass die Verbindung abbricht und der PC sich nicht mehr einwählt. Zudem gibt es Fälle, bei denen das WLAN zwar verbunden bleibt, jedoch kein Internet mehr verfügbar ist (nach einen Trennen der Verbindung und einem Neuverbinden geht es dann wieder).
Leider kann ich aus der Ferne nichts mehr machen, wenn das Internt weg ist. Daher suche ich eine Lösung.

Am elegantesten wäre natürlich, wenn der PC automatisch z.B. alle 10 min prüfen würde ob er mit dem WLAN verbunden ist und ob er Internet empfängt. Wenn das nicht der Fall ist, soll er sich neu verbinden.
Sollte der erste Fall zu aufwändig sein, würde schon reichen, wenn sich der PC einfach jede Stunde oder so neu mit dem WLAN verbindet.

Habt ihr eine Idee wie man das umsetzen kann?

Danke vorab :)
 
Das beste wäre dem schlechten WLAN auf den Grund zu gehen.

Also Firmwareupdates des APs oder Routers und der WLAN-Karte machen. Aufstellort des Routers prüfen, etc.

Oder ganz auf WLAN verzichten.

Ein kleines Programm welches z.B. google-dns anpingt und im Zweifelsfall das WLAN oder das ganze System resettet klingt nach noch mehr Problemen.
 
  • Gefällt mir
Reaktionen: elefant
Danke für deine Antwort.
Leider kann ich jedoch auf den Router nicht zugreifen und mich nur über WLAN einloggen.
 
yxy schrieb:
Danke für deine Antwort.
Leider kann ich jedoch auf den Router nicht zugreifen und mich nur über WLAN einloggen.
nadann würde ich was skripten.
simples bash script welches google-dns anpingt, wenn keine antwort dann 'nmcli radio wifi off' 'nmcli radio wifi on' und dieses script als cronjob alle x minuten oder x stunden laufen lassen.
 
  • Gefällt mir
Reaktionen: Raijin
yxy schrieb:
Am elegantesten wäre natürlich, wenn der PC automatisch z.B. alle 10 min prüfen würde ob er mit dem WLAN verbunden ist und ob er Internet empfängt.
Am elegantesten wäre es, den PC per Kabel zu verbinden, weil man damit die offensichtlich unzuverlässige WLAN-Verbindung eliminiert.


yxy schrieb:
Leider kann ich jedoch auf den Router nicht zugreifen und mich nur über WLAN einloggen.
Und warum geht es nur per WLAN? Ich meine Kabel geht immer, es ist nur eine Frage des Aufwands und des Nutzens. Letzterer ist offensichtlich, weil das WLAN instabil ist, ersteres wiederum wird gerne auch überschätzt. Man kann beispielsweise flache LAN-Kabel problemlos hinter den meisten Fußleisten verstecken, sie unter Türen hindurch und sogar unter Teppichen entlang verlegen und bumms, das war's. "Kann nicht" ist daher in den meisten Fällen eher ein "Will nicht".

chris_2401 schrieb:
simples bash script welches google-dns anpingt, wenn keine antwort dann 'nmcli radio wifi off' 'nmcli radio wifi on' und dieses script als cronjob alle x minuten oder x stunden laufen lassen.
Hm.. Interessant.. Ich hätte es mit ifup bzw. ifdown oder ifconfig wlan0 down gemacht, ist aber lange her, dass ich so ein Skript geschrieben habe. Eine kurze Suche bei google brachte, dass deine Variante die geläufigere ist.
 
chris_2401 schrieb:
nadann würde ich was skripten.
simples bash script welches google-dns anpingt, wenn keine antwort dann 'nmcli radio wifi off' 'nmcli radio wifi on' und dieses script als cronjob alle x minuten oder x stunden laufen lassen.
Hört sich gut an. Habe mal etwas zusammengemurkst (hab 0 Erfahrung mit BASH).
Würde das so gehen?:
Bash:
while true;
do
  ping -c1 google.com
  if [ $? -eq 0 ]
  then
    nmcli radio wifi off
    nmcli radio wifi on
  fi
sleep 10m
done
Ergänzung ()

Raijin schrieb:
Und warum geht es nur per WLAN?

Router gehört mir nicht und steht außerhalb der Wohnung. Habe als Mieter nur die WLAN Zugangsdaten erhalten.
Ergänzung ()

Gibt es auch eine Möglichkeit anzugeben, mit welchem Netz er sich wieder verbinden soll (es könnte ja immernoch passieren, dass er zwar das WLAN einschaltet aber sich nicht mehr mit dem Netz verbindet, oder)?
 
Zuletzt bearbeitet:
dein skript sieht auf den ersten blick nicht schlecht aus.
ich würde da keine schleife und kein sleep einbauen, sondern das skript via cronjob alle 10 minuten aufrufen.
 
Vor allem würde ich einen Zähler einbauen, der bei jedem Timeout einen hochzählt. Bei x Fehlern kann man dann tätig werden und die Verbindung resetten. Ansonsten läuft man Gefahr, auch bei sporadisch auftretendem Paketverlust - zB wenn eine kurzfristige Störung in der Nähe auftaucht - ständig das Interface neuzustarten. Nicht jeder einzelne verloren gegangene Ping deutet auf eine zusammengebrochene Verbindung hin. Wenn das WLAN fremdverwaltet wird, könnte sich sonst der dortige Admin darüber beschweren, dass im Log alle paar Minuten eine Login-Message des Geräts auftaucht.

Darüber hinaus weiß ich nicht wie flott das nmcli Command reagiert. Evtl. sollte man zwischen off und on auch noch ein paar Sekunden warten, um etwaige Fehler im Kommando bzw. dem WLAN-Interface zu vermeiden, was weiß ich, sowas wie "Interface not ready" oder so. Da mag ich mich aber auch irren und es kann sein, dass es direkt hintereinander zuverlässig funktioniert, ich würde aber einfach auf Nummer sicher gehen - an den 5 Sekunden Delay soll es ja nicht scheitern.


Ein Skript als Cronjob könnte daher so aussehen:

Bash:
errors=0
maxerrors=5
pingcount=10
pingdelay=5
resetdelay=5



for i in {1..$pingcount}
do
  ping -c1 google.com
  if [ $? -eq 0 ]
  then
     errors=errors+1
  fi
  sleep $pingdelay
done

if [ $errors -ge $maxerrors ]
then
    nmcli radio wifi off
    sleep $resetdelay
    nmcli radio wifi on
    logger "Wifi Interface resetted"
fi

In diesem Beispiel wird das Skript bei Ausführung 10 Pings im Abstand von 5 Sekunden absetzen. Wenn 5 oder mehr davon fehlschlagen, wird das WLAN abgeschaltet und nach 5 Sekunden wieder eingeschaltet. Die Parameter kann man anhand der Variablen steuern wie man möchte. Ich habe das Skript aber nicht getestet, sondern nur hier im Editor bearbeitet, also keine Garantie auf Fehlerfreiheit. Am Ende habe ich noch ein logger-Kommando eingefügt, damit man sich im syslog anschauen kann wann und wie oft das überhaupt passiert ist.

Das ganze legt mal als cronjob - sozusagen der Taskplaner von Linux - an und ruft das Skript zB alle 10 Minuten einmal auf. (crontab -e und dann */10 * * * * /pfad/zum/skript.sh)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: chris_2401
Super, das hört sich gut an. Vielen Dank an euch :).

Vielleicht noch eine Frage am Rande: Könnte man auf die Art auch ein Skript erstellen, das z.B. auf eine Eingabe durch den Benutzer wartet. Wenn diese z.B. 2 Tage lang nicht stattfindet startet es den Rechner neu. Damit wäre auch der Fall der Fälle abgedeckt, dass trotzdem was schief läuft.
 
Ein cronjob läuft im Hintergrund nach dem definierten Zeitplan. Entweder immer zur selben Zeit oder eben nach einem Intervall. Benutzereingaben sind da nicht vorgesehen und auch nicht zielführend, weil das Skript dann noch liefe und auf eine Eingabe wartet, wenn es beim nächsten Mal erneut aufgerufen werden würde.

Ein Reboot wie du ihn beschreibst ist aber generell nicht wirklich sinnvoll. Wenn du im Urlaub bist oder krank im Bett liegst, wird der PC dann alle 2 Tage neugestartet - nicht weil es einen Fehler gab, sondern weil du einfach nicht da warst....
 
Zurück
Oben