Hallo Leute,
hier mal eine etwas längere Mail, in der ich zum großen Rundumschlag im 2,4 Ghz Band ausholen will. Alles fing damit an, dass ich mich darüber ärgerte, dass Leute sich nicht an das imho einzig vernünftige Kanalnutzungsschema 1,6,11 halten, sondern zB auf Kanal 4 oder 8 rumfunken und damit zwei ansonsten überlappungsfreie Kanäle (1 und 6 bzw 6 und 11) stören. Wenn man einfach seinen Freifunkrouter mit "iwinfo radio0 scan" nach den für ihn sichtbaren WLANs fragt, sieht man oft etwas ähnliches wie:
Cell 02 - Address: <muss nicht auf einer öffentlichen mailingliste stehen> ESSID: "pstmst" Mode: Master Channel: 4 Signal: -63 dBm Quality: 47/70 Encryption: WPA PSK (TKIP)
Ich habe mir jetzt mal was geschrieben, was alle für mich ssh-zugänglichen router (disclaimer: es sind einige) nach ihrer WLAN Umgebung fragt und daraus eine übersichtliche csv-datei macht, die man zB mit libreoffice filtern, sortieren und durchsuchen kann. Meine Vorgehensweise will ich hiermit der Community zur Verfügung stellen, damit wir vielleicht gemeinsam ein gut nutzbares 2,4 GHz Band im Empfangsbereich der ffnw-router hinbekommen. Aber der Reihe nach.
Zunächst einmal will man alle FFNW-Router in der ssh-config haben, um nicht ständig root@<unmöglich zu merkende v6-addresse> eintippen zu müsen. Das unter geht gnu/linux und mit installiertem jq folgendermaßen:
wget -qO- http://srv11.ffnw.de/nodelist_api/nodes.json | jq '.nodes[]|select(.nodeinfo.hardware.model|contains("KVM")|not)|{Host: .nodeinfo.hostname, hostname: .nodeinfo.network.addresses|sort[0]}' | sed 's/"//g;s/Host:/Host/g;s/,//g;s/hostname: /\thostname /g;s/}/\t user root/g;s/{//g' > ~/.ssh/config.d/config-ffnw
und liefert uns nach wenigen Sekunden eine ~/.ssh/config.d/config-ffnw, die ungefähr so anfängt:
Host 10feed459b24 hostname 2a03:2260:1001:d000:12fe:edff:fe45:9b24 user root
Host ALSO hostname 2a03:2260:1001:9800:fa1a:67ff:fe3e:9b70 user root
damit ssh diese Datei auch einliest, muss lediglich in der Datei ~/.ssh/config die Zeile
Include ~/.ssh/config.d/*
stehen. Weiter will man parallel-ssh nutzen, um alle ssh-zugänglichen Router gleichzeitig fragen zu können. Am besten legt man sich hierfür auch ein Arbeitsverzeichnis an
mkdir ~/pssh cd ~/pssh mkdir myrouters cd myrouters
Nun gilt es, aus den mittlerweile fast 3000 Routern (Woohoo!) in der ~/.ssh/config.d/config-ffnw diejenigen herauszufiltern, auf die man selber Zugriff hat. vorweg:
grep Host ~/.ssh/config.d/config-ffnw | awk '{print $2}' > tmphostfile
Fall 1: der eigene öffentliche rsa-key liegt auf den routern: super! hier muss nur noch mit ssh-add unser eigener privater rsa-SChlüssel aktiviert werden und dann geht es auch schon los: parallel-ssh -O strictHostKeyChecking=No -h tmphostfile exit | grep -i success | awk '{print $4}' > host-file
Fall 2: auf den routern gibt es universal-passwort. Das ist eigentlich suboptimal und es sollte besser mit rsa-schlüsseln gearbeitet werden (wie man seinen public-key auf router geschoben bekommt, die bislang nur per Passwort zugänglich sind, beschreibe ich gerne auf Anfrage) das funktioniert, wie in Fall 1, allerdings muss man hier parallel-ssh die Option -A mitgeben, also:
parallel-ssh -O strictHostKeyChecking=No -A -h tmphostfile exit | grep -i success | awk '{print $4}' > host-file
Jetzt kommt einmal die Frage nach dem Paswort. Blind eingeben und enter.
Das kann durchaus ein paar Minuten dauern und beschäftigt die cpu auch merklich. vielleicht sieht jemand eine Möglichkeit (ssh-optionen?), wie man das noch entschlacken kann. Am Ende sollte jedenfalls eine host-file stehen, die genau diejenigen router enthält, wo man selbst ssh Zugriff hat. Bis hierher war alles nur Vorbereitung
Nun ist es an der Zeit, die router nach ihrer WLAN umgebung zu fragen:
parallel-ssh -h host-file -o TMP_DIR "iwinfo radio0 scan" grep -C2 Channel TMP_DIR/* | sed ':a;N;$!ba;s/,//g;s/([^ ]* [0-9]{2} - )/\1,/g;s/\n/,/g;s/[^,]* *[^:]: //g;s/--,/\n/g;s/-Cell [0-9]* - //g;s/TMP_DIR///g' | grep -vP '(mesh|freifunk)' > wifi.csv
mit Hilfe dieser Tabelle kann man sich nun an die Arbeit machen und versuchen, die Betreiber der Störsender ausfindig zu machen und freundlich zu fragen, ob es vielleicht möglich wäre ... u get the idea
ein cooles firmware-feature wäre wohl, wenn die router auf der statuspage auskunft über mögliche "Störsender" geben könnten. Gibt es das evtl schon?
LG Lorenz