freifunk:ssh

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
freifunk:ssh [03.06.2019 17:07. ] – [Ändern von Konfigurationsdaten] djangofreifunk:ssh [05.06.2020 12:56. ] (aktuell) – Seite gelöscht, da nunmehr im ffmuc-WIKI gepflegt! django
Zeile 1: Zeile 1:
-====== Administration eines Freifunk-Knotens via SSH ====== 
-Zur Administration unseres bzw. unserer Freifunk-Knoten verwenden wir die **SSH**(([[https://de.wikipedia.org/wiki/Secure_Shell|**S**ecure **SH**ell]])), 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 [[https://dokuwiki.nausch.org/doku.php/centos:ssh_c7|Secure Shell]] zu finden. 
- 
-<WRAP center round tip 50%> \\ 
-Da aktuell das WIKI bei ffmuc.net nicht zur Verfügung steht, findet sich hier eine Ansammlung gängiger Abfragen bzw. Konfigurationsschritte. </WRAP> 
- 
-===== Vorbereitungen ===== 
-==== SSH-Key ==== 
-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 
- 
-<code>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         | 
-+-----------------+</code> 
- 
-==== SSH-Clientconfig ==== 
-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 [[centos:ssh_c7#client_konfiguration|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. 
- 
-<file bash ~/.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 
-</file> 
- 
-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**. 
- 
- 
- 
-===== Abfrage von Konfigurationsdaten ===== 
-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 
-<code>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' 
-</code> 
- 
-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 
-<code>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</code> 
- 
-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 
-<code> 
-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 
- 
- 
-</code> 
- 
- 
- 
-==== Gluon Release ==== 
-   # cat /lib/gluon/release 
- 
-  v2019.0.3 
- 
-==== Gluon Version ==== 
-   # cat /lib/gluon/gluon-version 
- 
-  v2018.2.1+ 
- 
-==== SSID ==== 
-Wollen wir wissen welche SSID(([[https://de.wikipedia.org/wiki/Service_Set#SSID,_ESSID_und_BSSID|Service Set Identifier]])) (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' 
- 
- 
-===== Netzwerks- und Zustandsabfragen mit batctl ===== 
- 
-''**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 **[[https://downloads.open-mesh.org/batman/manpages/batctl.8.html|Manpage]]** findet man viele Beispiele und Erklärungen dazu.  
- 
-===== Ändern von Konfigurationsdaten ===== 
-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 **[[#ssh-clientconfig|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 . 
- 
- 
- 
- 
- 
-==== Kontaktdaten ==== 
-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 [[https://map.ffmuc.net/#!/en/map/30b5c25662b1|Karte von Freifunk München]] werden die geänderten Daten dann auch entsprechend ausgegeben. 
-{{ :freifunk:ff_001.png?nolink&350 |Bild: Bildschirmhardcopy des betreffenden Freifunk-Knotens auf der Karte}} 
- 
-==== Knoten-/Host-Name ==== 
-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 [[https://map.ffmuc.net/#!/en/map/30b5c25662b1|Karte von Freifunk München]] werden die geänderten Daten nach ein paar Minuten dann auch entsprechend ausgegeben. 
-{{ :freifunk:ff_002.png?nolink&650 |Bild: Bildschirmhardcopy des betreffenden Freifunk-Knotens auf der Karte}} 
- 
-==== Geodaten für die Kartenanzeige ==== 
-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 **[[https://map.ffmuc.net|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. {{:freifunk:ff_003.png?nolink&100|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. 
-{{ :freifunk:ff_004.png?nolink&600 |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.: 
-<code>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</code> 
-Nach kurzer Zeit wird dann der Router auf der Karte an der neuen gewünschten Stelle angezeigt. 
-{{ :freifunk:ff_005.png?nolink&600 |Bild: FReifunkkarte mit Anzeige der gewählten Nodes}} 
- 
- 
-==== (zusätzlichen) SSH-Key hinterlegen ==== 
-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' 
- 
- 
-  
-==== Reboot des Knoten in den Konfigurationsmodus ==== 
-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 
- 
-==== Kanal ==== 
-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 
- 
-==== Bandbreitenbegrenzung ==== 
-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 
  
  • freifunk/ssh.1559581625.txt.gz
  • Zuletzt geändert: 03.06.2019 17:07.
  • von django