freifunk:ssh

Dies ist eine alte Version des Dokuments!


Administration eines Freifunk-Knotens via SSH

Zur Administration unseres bzw. unserer Freifunk-Knoten verwenden wir die SSH1), da uns hier der volle Zugriff auf den Router gestattet, Konfigurationen im laufenden Betrieb vorzunehmen, Parameter abzufragen oder auch zusätzlich Programm zu starten. Viele hilfreiche Informationen rund um die SSH sind hier in Djangos WIKI im Kapitel Secure Shell zu finden.


Da aktuell das WIKI bei ffmuc.net nicht zur Verfügung steht, findet sich hier eine Ansammlung gängiger Abfragen bzw. Konfigurationsschritte.

Für den Zugriff benötigen wir natürlich ein entsprechendes SSH-Schlüsselpaar, welches wir uns zunächst erstellen.

 $ ssh-keygen -b 4096 -t rsa -C django@nausch.org -f ~/.ssh/id_rsa4096_ff
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/django/.ssh/id_rsa4096_ff.
Your public key has been saved in /home/django/.ssh/id_rsa4096_ff.pub.
The key fingerprint is:
44:8b:1a:de:ad:be:ef:23:af:65:b7:e6:1a:bf:98:3d django@nausch.org
The key's randomart image is:
+--[ RSA 4096]----+
|      ...        |
|     o.o .       |
|    +.o o        |
|  ..+= .         |
|   ooo  S        |
|    + .+oF       |
|   +.. .         |
|  .  *E          |
|    ++=o         |
+-----------------+

Um nun nicht jedes mal beim Aufruf einer SSH-Verbindung zu einem unserer Knoten, Parameter wie user und die doch sehr langen IPv6-Adressen angeben zu müssen, hinterlegen dwir die entsprechenden Daten in der Konfigurationsdatei unseres lokalen SSH-Clients auf unserem Admin-Rechners. Dies hat darüber hinaus auch noch zusätzlich den Vorteil, dass z.B. von einem Netz aus, bei dem es „nur“ IPv4-Adressen Verwendung finden wir keinen zusätzlichen Sprunghost angeben müssen. Dies erleichtert die Arbeit doch ungemein, vor allem dann wenn Dateien von und zum Router kopiert werden müssen. Hintergrundinformationen zur Clientkonfiguration sind im Kapitel Client Konfiguration bei der Secure Shell zu finden.

So ist z.B. in nachfolgendem Konfigurationsbeispiel der Router ff_pliening_gbw_od direkt erreichbar und der Router ff_pliening_gbw_od-e nur über den Sprunghost mit Namen jumphost, der natürlich auch eine entsprechende Konfiguration aufweist.

~/.ssh/config
Host jumphost
     Hostname 217.92.13.131
     Port 22
     User adminuser
     ForwardAgent yes
     Protocol 2
     IdentityFile ~/.ssh/id_ed25519
 
Host ff_pliening_gbw_od
     Hostname [2001:608:a01:106:822a:a8ff:feea:fae3]
     Port 22
     User root
     Protocol 2
     IdentityFile ~/.ssh/id_rsa4096_ff
 
Host ff_pliening_gbw_od-e
     Hostname [2001:608:a01:106:822a:a8ff:feea:fae3]
     Port 22
     User root
     Protocol 2
     IdentityFile ~/.ssh/id_rsa4096_ff
     ProxyCommand  ssh -q -W %h:%p jumphost

Wir können somit, wenn wir uns z.B. in einem IPv4-only Netzwerk aufhalten, ganz einfach durch den nachfolgenden Aufruf den Knoten ff_pliening_gbw_od erreichen.

 $ ssh ff_pliening_gbw_od-e

Ebenso können wir so direkt Dateien auf den Knoten in das /tmp-Verzeichnis kopieren, da sich der SCP-Aufruf entsprechend vereinfacht, Bsp.:

 $ scp firmware ff_pliening_gbw_od-e:/tmp

Hier wird nun ohne manuelle Umwege Datei firmware in das /tmp-Verzeichnis des Routers ff_pliening_gbw_od.

Zur Abfrage von Konfigurationsparametern bemühen wir den Befehl uci. Ohne Eingabe von zusätzlichen Parametern, werden die zur Verfügung stehenden Optionen ausgegeben.

 # uci
Usage: uci [<options>] <command> [<arguments>]

Commands:
	batch
	export     [<config>]
	import     [<config>]
	changes    [<config>]
	commit     [<config>]
	add        <config> <section-type>
	add_list   <config>.<section>.<option>=<string>
	del_list   <config>.<section>.<option>=<string>
	show       [<config>[.<section>[.<option>]]]
	get        <config>.<section>[.<option>]
	set        <config>.<section>[.<option>]=<value>
	delete     <config>[.<section>[[.<option>][=<id>]]]
	rename     <config>.<section>[.<option>]=<name>
	revert     <config>[.<section>[.<option>]]
	reorder    <config>.<section>=<position>

Options:
	-c <path>  set the search path for config files (default: /etc/config)
	-d <str>   set the delimiter for list values in uci show
	-f <file>  use <file> as input instead of stdin
	-m         when importing, merge data into an existing package
	-n         name unnamed sections on export (default)
	-N         don't name unnamed sections
	-p <path>  add a search path for config change files
	-P <path>  add a search path for config change files and use as default
	-q         quiet mode (don't print error messages)
	-s         force strict mode (stop on parser errors, default)
	-S         disable strict mode
	-X         do not use extended syntax on 'show'

Die Ausgabe aller Konfigurationsparameter kann mitunter doch sehr umfänglich werden. Bsp.:

 # uci show |wc -l
674

In aller Regel wird man geziehlt nach einzelnen Parametern suchen, wie z.B. hier nach den hinterlegten Kontaktdaten.

 # uci show | grep contact
gluon-node-info.@owner[0].contact='django@nausch.org'

Alle Parameter einer Section kann man durch Angabe der Section anwählen.

 # uci show gluon-node-info
gluon-node-info.@location[0]=location
gluon-node-info.@location[0].share_location='1'
gluon-node-info.@location[0].altitude='504'
gluon-node-info.@location[0].latitude='48.198680689'
gluon-node-info.@location[0].longitude='11.798007488'
gluon-node-info.@owner[0]=owner
gluon-node-info.@owner[0].contact='django@nausch.org'
gluon-node-info.@system[0]=system

Alle Werte sind hierbei im Verzeichnis /etc/config/ abgelegt. So kann man auch z.B. die gluon-node-info sich auch direkt in der zugehörigen Konfigurationsdatei ansehen.

  # less /etc/config/gluon-node-info
config location
	option share_location '1'
	option altitude '504'
	option latitude '48.198680689'
	option longitude '11.798007488'

config owner
	option contact 'django@nausch.org'

config system

 # cat /lib/gluon/release
v2019.0.3
 # cat /lib/gluon/gluon-version
v2018.2.1+

Wollen wir wissen welche SSID2) (WLAN-Kennung) unser Freifunkknoten ausstrahlt, bedienen wir uns folgendem Aufruf.

 # uci show | grep -i mesh_id
 wireless.mesh_radio0.mesh_id='ffmuc-uml_ost-mesh'

Da es sich hier um einen Router der nur ein 2,4 GHz WLAN ausstrahlt, wird auch nur eine Zeile ausgegeben. Im nachfolgenden Beispiel handelt es sich um ein Routermodell der sowohl ein 2,4 GHz wie auch ein 5 GHz WLAN verwendet - wir sehen dies an der Ausgabe von zwei Konfigurationswerten.

 # uci show | grep -i mesh_id
wireless.mesh_radio0.mesh_id='ffmuc-uml_ost-mesh'
wireless.mesh_radio1.mesh_id='ffmuc-uml_ost-mesh'

batctl bietet unter anderem eine komfortable Möglichkeit, das batman-adv-Kernelmodul zu konfigurieren, um Debugging-Informationen wie Originatortabellen sowie Übersetzungstabellen und das Debug-Protokoll anzuzeigen. In der zugehörigen Manpage findet man viele Beispiele und Erklärungen dazu.

Möchte man einzelne Konfigurationsparameter ändern, verwenden wir wiederum den Befehl uci gefolgt von der Option set. Mit unter hat es sich als zweckmäßig erwiesen vor umfangreichen Änderung eine Sicherheitskopie der bestehenden Konfiguration anzufertigen. Um dieses z.B. auf einer lokalen Admin-Workstation oder in einen passenden sicheren Cloudspeicher zu kopieren oder um es bei temporären Änderung anschließend wieder einfach wiederherstellen zu wollen.

 # uci export network > /tmp/network.uci

Zum Wiederherstellen (restore) geht man dann wie folgt vor.

 # cat /tmp/network.uci | uci import

Will man die gesicherte Konfiguration lokal speichern, kopiert man die zuvor erstellte Sicherungskopie einfach auf den lokalen Rechner. Da wir über die lokale Konfigurationsdatei unsere Freifunkknoten definiert haben, können wir einfach den Host über den definierten Namen ansprechen, in diesem Konfigurationsbeispiel kopieren wir die Sicherungskopie vom Knoten ff_pliening_gbw_od auf den lokalen Rechner ins aktuelle lokale Verzeichnis, repäsentiert durch den Punkt ..

 $ scp ff_pliening_gbw_od:/tmp/network.uci .

Im folgenden Beispiel wollen die die hinterlegten Kontaktinformationen abändern. Zunächst fragen wir ab, welche Informationen hier in diesem Konfigurationsbeispiel hinterlegt ist.

 # uci show gluon-node-info.@owner[0].contact
gluon-node-info.cfg02c290.contact='django@nausch.org'

Hier ändern wir nun die eMail-Adresse unseren Wünschen entsprechend ab.

 # uci set gluon-node-info.@owner[0].contact='django@it.piratenpartei-bayern.de'
 # uci commit

Fragen wir nun erneut den geänderten Parameter ab, werden uns die aktualisierten Daten ausgegeben.

 # uci show gluon-node-info.@owner[0].contact
gluon-node-info.cfg02c290.contact='django@it.piratenpartei-bayern.de'

Auf der Karte von Freifunk München werden die geänderten Daten dann auch entsprechend ausgegeben. Bild: Bildschirmhardcopy des betreffenden Freifunk-Knotens auf der Karte

In folgendem Konfigurationsbeispiel wollen wir den Knotennamen oder auch Hostname genannt, abändern. Auch hier fragen wir zunächst ab, welcher Wert gesetzt ist.

 # uci show | grep hostname
system.@system[0].hostname='ff_pliening_gbw_ug'

Diesen Wert ändern wir nun in einen etwas sprechenderen Namen ab.

 # uci set system.@system[0].hostname='ff_pliening_gänsbrunnenweg_ug'
 # uci commit

Fragen wir nun erneut den geänderten Parameter ab, werden uns die aktualisierten Daten ausgegeben.

 # uci show | grep hostname
system.@system[0].hostname='ff_pliening_gänsbrunnenweg_ug'

Auf der Karte von Freifunk München werden die geänderten Daten nach ein paar Minuten dann auch entsprechend ausgegeben. Bild: Bildschirmhardcopy des betreffenden Freifunk-Knotens auf der Karte

Möchte man die im Router hinterlegten Geodaten abändern, da z.B. ein vorhandener Router seinen Aufstellungsort geändert hat, oder weil man zu besseren Darstellung auf der Karte, geht man wie folgt vor.

Auf der Karte sucht man den gewünschten Kartenausschnitt und wählt das PIN-Icon rechts oben am Bildschirm an. Bild: PIN-Icon zur Auswahl der Koordinaten auf der Freifunkkarte
Mit dem erscheinenden Fadenkreuz markieren wir dann die Stelle an dem der vorhandene Knoten zukünftig in der Karte erscheinen soll. In der linken Bildschirmhälfte erscheinen dann die Koordinaten und in dem Rahmen Uci auch direkt die benötigten Befehle zum Ändern der Konfiguration. Bild: Bildschirmhardcopy der Freifunkkarte mit ausgewählten Geo-Koordinaten Die Befehle aus dem Rahmen Uci kopieren wir dann einfach und fügen diese in unserem Shell-Fenster ein, mit dem wir die SSH-Verbindung mit unserem Freifunk-Knoten halten. Bsp.:

uci set gluon-node-info.@location[0]='location'; uci set gluon-node-info.@location[0].share_location='1';uci set gluon-node-info.@location[0].latitude='48.198675325';uci set gluon-node-info.@location[0].longitude='11.798149645';uci commit gluon-node-info

Nach kurzer Zeit wird dann der Router auf der Karte an der neuen gewünschten Stelle angezeigt. Bild: FReifunkkarte mit Anzeige der gewählten Nodes

Möchte man auf einem Router einen zweiten Admin für den Backupfall einen Zugriff gewähren, ist es notwendig dessen SSH-Publickey auf dem Knoten zu hinterlegen. Da wir unseren Knoten, auf denen wir mittels SSH zugreifen ausreichend in unserer lokalen SSH-Clientkonfigurationsdatei ~/.ssh/config ausreichend hinterlegt haben, brauchen wir keine IP-Adressen und User angeben, sondern können direkt auf die betreffenden Nodes so zugreifen.

Wir kopieren nun den Publickey des zweiten Admins in die Datei /etc/dropbear/authorized_keys und gehen dabei wie folgt vor:

 $ cat ~/.ssh/id_rsa_piraten.pub | ssh ff_pliening_gbw_ug 'cat >> /etc/dropbear/authorized_keys'

Möchte man seinen WLAN-Router erneut in den Konfigurationsmodus versetzen, um dann mit dem Browser seiner Wahl auf die GUI via http://192.168.1.1 zuzugreifen, verwendet man folgenden Aufruf.

 # uci set "gluon-setup-mode.@setup_mode[0].enabled=1"
 # uci commit
 # reboot

Normalerweise funkt unser Freifunk-WLAN-Router auf Kanal 6. Ist dieser Kanal schon durch andere WLAN überbelegt bzw. haben wir zur Versorgung einer Halle mehrere Router am Start, kann es zweckmäßig sein, den vorbelegten Kanal 6 zu wechseln.

Im folgenden Konfigurationsbeispiel wechseln wir zum Kanal 1.

 # uci set wireless.radio0.channel=1

Dieser Befehl ändern „nur“ den Kanal bis zum nächsten Neustart/reboot des Routers. Wollen wir die Kanaländerung resetfest machen führen wir nachfolgende Befehle aus.

 # uci set gluon-core.@wireless[0].preserve_channels=1
 # uci commit
 # wifi

Möchte man nicht seinen kompletten Internetanschluss zur Anbindung des Freifunk-Knotens vor Ort zur Verfügung stellen kann es neben einer zeitlichen Begrenzung auch eine Traffic-/Bandbreitenbegrenzung zweckmäßig sein. In Nachfolgendem Beispiel beschreiben die Parameter ingress den Down- und egress den Upstream. Mit der Option enabled kann man die Bandbreitenbegrenzung einschalten in dem man den Wert auf 1 setzt, der Wert 0 deaktiviert wieder die Begrenzung der Bandbreite.

 # uci set simple-tc.mesh_vpn='interface'
 # uci set simple-tc.mesh_vpn.ifname='mesh-vpn'
 # uci set simple-tc.mesh_vpn.enabled='1'
 # uci set simple-tc.mesh_vpn.limit_ingress='25000'
 # uci set simple-tc.mesh_vpn.limit_egress='5000'
 # uci commit

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
  • freifunk/ssh.1559581625.txt.gz
  • Zuletzt geändert: 03.06.2019 17:07.
  • von django