Linux Befehle

Aus Freifunk Halle
Wechseln zu: Navigation, Suche

Hier findest du eine kleine Übersicht von nützlichen Befehlen für die Konsole (= Kommandozeile) typischer Freifunk-Firmwares.

Unter Windows kann man den SSH-Clienten PuTTY benutzen, um eine Konsole zu öffnen und mit WinSCP können Dateien innerhalb der Verzeichnisse bearbeitet werden. Benutze dazu das Protokoll SCP.

Unter Linux öffnet man eine Konsole mit dem Befehl ssh root@IP-Adresse-des-Freifunkrouters und kopiert Dateien mit dem Befehl scp, siehe dazu den Absatz mit den ausführlichen Beispielen.

Arbeiten auf der Kommandozeile von Routern

Die Kommandozeile ist ein Eingabebereich für die Steuerung des Routers das im Textmodus abläuft. Damit eröffnen sich für den WRT Möglichkeiten jenseits der Grenzen der Weboberfläche.


Auf der Kommandozeile

Hat man sich schließlich per SSH eingeloggt, lassen sich zahlreiche Befehle nutzen.

Informationen zum Freifunknetz

Die Funktion batctl

In der ersten Zeile Anzeige der B.A.T.M.A.N.-ADV Version

batctl o

Traceroute für B.A.T.M.A.N. advanced operates on layer 2.

batctl tr <MAC_address|bat-host_name|host_name|IP_address>

Ping für B.A.T.M.A.N. advanced operates on layer 2.

batctl p <MAC_address|bat-host_name|host_name|IP_address>

Übersetzung für B.A.T.M.A.N. advanced operates on layer 2.

batctl t <MAC_address|bat-host_name|host_name|IP_address>

Statistik für B.A.T.M.A.N. advanced operates on layer 2.

batctl s

Zeigt alle Gateways mit aktueller Bandbreite im Freifunknetz

batctl gwl

Auflisten aller Nutzer im Freifunknetz

batctl tg

Anzahl aller WIFI Nutzer im gesamten Netzwerk anzeigen

batctl tg |grep W |wc -l

Auflistung localer Nutzer

batctl tl

Anzahl localer Clients anzeigen

batctl tl |grep W |wc -l

Anpassen der Einstellungen in OpenWrt

UCI ist das Kommandozeilentool, welches in OpenWRT genutzt wird, um Einstellungen auszulesen oder zu ändern. Über UCI lassen sich alle Einstellungen, die auch über die Konfigurationsoberfläche möglich sind, sowie einige weitere Einstellungen vornehmen.

Einstellungen anzeigen

Alle gesetzten Einstellungen auflisten:

uci show

Eine bestimmte Einstellung suchen:

uci show|grep Suchwort

Eine bestimmte Einstellung anzeigen:

uci show [Einstellung]

Beispiel:

uci show autoupdater.settings.enabled

Oder für eine Einstellungsgruppe:

uci show autoupdater.settings

Einstellungen setzen

uci set [Einstellung]=[Wert]

Beispiel:

uci set autoupdater.settings.enabled=1

Wichtig: Wenn du Einstellungen via UCI gesetzt hast, müssen diese via uci commit am Ende aktiviert werden!

Einstellungen sichern

Bevor man an Einstellungen herum fummelt kann es sinnvoll sein, diese zunächst zu sichern um sie problemlos wieder herzustellen. Dies lässt sich für alle Einstellungen via uci export oder auch nur für einen Abschnitt machen, wie im folgenden Beispiel:

uci export network > network.uci

Und der Import geht dann so:

cat network.uci | uci import

Einstellungen von Gluon ändern

Gluon ist eine OpenWrt-basierte Freifunk-Firmware, die von vielen, aber nicht allen Communities im Freifunk-Umfeld benutzt wird.

Bitte beachte, dass diese deutschen Anleitungen veraltet sein können, die aktuelle Dokumentation (auf Englisch) findet sich im GitHub Wiki des Gluon-Projektes.


Autoupdater Branch festlegen

Wenn der Router nach dem Reboot wieder oben ist könnt ihr den Branch für den Autoupdater noch festlegen:

uci set autoupdater.settings.enabled='1'
uci set autoupdater.settings.branch='stable'
uci commit autoupdater

Das Update kann man dann manuell anstoßen.

autoupdater -f 

Das stable Release ist immer die jüngste stabile Version der Firmware für Produktivsysteme. Seit der Version 0.5 ist der Autoupdater mit dem stable Branch automatisch bei Installation aktiviert, so dass die Router sich automatisch aktuell halten. Sollte dies nicht gewünscht sein, so muss dies explizit deaktiviert werden.

Neustart im Configmode

Manchmal ist es Notwendig in den Configmode zu starten. Dies beinhaltet die Weboberfläche des Systems zum ersten Einrichten eines Freifunk-Routers. Für gewöhnlich hält man ein paar Sekunden lang die Reset Taste gedrückt. Folgende Ausführung würde den gleichen Effekt erzielen:

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

Routernamen ändern

Wenn ihr bspw. den *Namen* des Router ändern möchtet geht dies wie folgt in der SSH Shell:

uci set system.@system[0].hostname='FF-OB-SAMPLE-01'  << Name anpassen
uci commit system

Danach ist ein Reboot erforderlich.

Kontaktdaten ändern

uci set gluon-node-info.@owner[0]='owner'
uci set gluon-node-info.@owner[0].contact='Mustermann muster@freifunk-ruhrgebiet.de 02453434434'  << Daten anpassen
uci commit gluon-node-info

Geodaten ändern

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='51.484943'   << anpassen
uci set gluon-node-info.@location[0].longitude='6.880250'  << anpassen 
uci commit gluon-node-info

Bandbreitenbegrenzung ändern

Alt:

uci set gluon-simple-tc.mesh_vpn='interface'
uci set gluon-simple-tc.mesh_vpn.ifname='mesh-vpn'
uci set gluon-simple-tc.mesh_vpn.enabled='1'
uci set gluon-simple-tc.mesh_vpn.limit_ingress='50000'  << download anpassen
uci set gluon-simple-tc.mesh_vpn.limit_egress='10000'   << upload anpassen
uci commit gluon-simple-tc

Neu:

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='16000' << download anpassen
uci set simple-tc.mesh_vpn.limit_egress='1000' << upload anpassen
uci commit simple-tc

Bandbreitenbegrenzung zeitgesteuert ändern

Folgende Cronjobs anlegen:

vi /usr/lib/micron.d/speedlimit

Für tägliche Limits von 07 bis 1700 Uhr:

0 7 * * * uci set simple-tc.mesh_vpn.enabled='1' && uci set simple-tc.mesh_vpn.limit_ingress='2000' && uci set simple-tc.mesh_vpn.limit_egress='500' && /etc/init.d/fastd restart
0 17 * * * uci set simple-tc.mesh_vpn.enabled='0' && /etc/init.d/fastd restart

Für werktägliche Limits von 07 bis 1700 Uhr (ungetestet):

0 7 * * 1-5 uci set gluon-simple-tc.mesh_vpn.enabled='1' && uci set gluon-simple-tc.mesh_vpn.limit_ingress='2000' && uci set gluon-simple-tc.mesh_vpn.limit_egress='500' && uci commit gluon-simple-tc && reboot
0 17 * * 1-5 uci set gluon-simple-tc.mesh_vpn.enabled='0' && uci commit gluon-simple-tc && reboot

Hier wird jeweils ein Limit von 2Mbits down und 0.5 MBits up gesetzt.

Achtung! Jeder Scriptaufruf führt ein commit und damit einen Schreibvorgang auf dem Rom aus. Dies kann sich negativ auf die Lebensdauer des Gerätes auswirken. Ein Reboot ist nötig, damit die Beschränkung aktiv oder inaktiv wird.

Mesh VPN aktivieren

Mesh VPN bezieht sich auf das Meshen mit anderen Routern über das Internet. Es ist auch Voraussetzung für die Internetfreigabe der Clients am eigenen Knoten.

uci set fastd.mesh_vpn.enabled=1
uci commit fastd
/etc/init.d/fastd start

Sofern noch kein Schlüssel generiert wurde, muss das ebenfalls geschehen:

/etc/init.d/fastd generate_key mesh_vpn
18fa75d1808692f04770bedf30c42dac24585d331560c545d70dd27f22a05648

Dieser Schlüssel muss dann in der jeweiligen Domäne angemeldet werden.

Meshing über WAN-Schnittstelle (Mesh on wan) aktivieren

Wenn du die WAN-Schnittstelle nicht nur für einen Internetzugang verwenden möchtest, sondern über diese auch das Meshing-Protokoll aktivieren willst, um z.B. andere, evtl. langsamere Freifunk-Router mit dem Freifunk-Netz zu versorgen, gehst du wie folgt vor:

uci set network.mesh_wan.auto=1
uci commit network
/etc/init.d/network restart

Meshing über WAN-Schnittstelle deaktivieren

uci set network.mesh_wan.auto=0
uci commit network
/etc/init.d/network restart

Private WLAN

Es ist möglich ein privates WLAN anzulegen, das mit dem WAN-Port gebridged und separat zum Mesh Netzwerk ist. Bitte beachte, dass Mesh on Wan nicht zeitgleich aktiviert werden sollte. Effekt: Dieses private WLAN ist nun Teil des am WAN-Port anliegenden Heimnetzes. Gibt man ihm die gleichen Zugangsdaten (SSID & Passwort) wie dem bestehenden Heim-WLAN, so wird dieses effektiv erweitert. Zeitgleich fungiert der Router als Freifunk-Router. Freifunk und privates Netz bleiben dabei voneinander getrennt.

Das private WLAN kann im Config-Modus aktiviert werden, alternativ auch über die Konsole wie folgt:

uci set wireless.wan_radio0=wifi-iface
uci set wireless.wan_radio0.device=radio0
uci set wireless.wan_radio0.network=wan
uci set wireless.wan_radio0.mode=ap
uci set wireless.wan_radio0.encryption=psk2
uci set wireless.wan_radio0.ssid="$SSID"
uci set wireless.wan_radio0.key="$KEY"
uci set wireless.wan_radio0.disabled=0
uci commit wireless
wifi

Bitte ersetze $SSID mit dem Namen deines Heimnetzwerks und $KEY mit deinem bisher üblichen Key (der vom privaten Router). Bei einem Dualband-Gerät (das 2.4 und 5 Ghz für WLAN verwendet), gibt es neben radio0 auch radio1; letzteres sollte genauso konfiguriert werden.

Zum deaktivieren des Ganzen wie folgt vorgehen:

uci set wireless.wan_radio0.disabled=1
grep radio1 /etc/config/wireless
if [ $? ]; then # disable auch das 5GHz radio
   uci set wireless.wan_radio1.disabled=1
fi
uci commit wireless
wifi

Meshing on LAN

Eigentlich wird nur der WAN Anschluss zum Betreiben eines Freifunk Routers benötigt. Die anderen Ports jedoch bleiben ungenutzt. Das Meshing ist über diese (meist gelben) LAN Ports abgeschaltet. Diese sind für Clients, neben WLAN, eine zusätzliche Verbindungsmethode. Man kann diese Ports jedoch auch dafür benutzen um mit weiteren Routern zu "meshen":

uci set network.client.ifname='bat0'
uci set network.mesh_lan=interface
uci set network.mesh_lan.ifname="$(cat /lib/gluon/core/sysconfig/lan_ifname)"
uci set network.mesh_lan.mesh=bat0
uci set network.mesh_lan.proto=batadv
uci set network.mesh_lan.auto=1
uci commit network
reboot

Nur 2015.1.x:

# activate
uci set network.client.ifname="bat0"
uci set network.mesh_lan.auto=1
uci commit network
/etc/init.d/network restart
# deactivate
uci set network.client.ifname="bat0 $(cat /lib/gluon/core/sysconfig/lan_ifname)"
uci set network.mesh_lan.auto=0
uci commit network
/etc/init.d/network restart


Testen (funktioniert nur, wenn auch ein Kabel eingesteckt ist):

batctl if

sollte nun u.A. eth1: active anzeigen

ubus call network.interface.mesh_lan status

Sollte "up": true anzeigen

Abrufen an welchen Ports Kabel eingesteckt sind

swconfig dev switch0 show | grep 'link:'

Gateways im Router an-/abschalten

uci set fastd.mesh_vpn_backbone_peer_<<COMMUNITY-NAME>>_vpn<<NR-DES-GATEWAYS>>.enabled=0/1
uci commit
/etc/init.d/fastd restart

<<COMMUNITY-NAME>> muss durch das Kürzel eurer Community ersetzt werden, z.B. ffnord

<<NR-DES-GATEWAYS>> wird durch die Zahl des Gateways ersetzt (i.d.R. 0-3)

Clientnetz zeitgesteuert an-/abschalten

vi /usr/lib/micron.d/wifioff
i (um den Schreibmodus zu aktivieren)

Für tägliche Abschaltung von 21 bis 7 Uhr:

0 21 * * *  uci set wireless.ibss_radio0.disabled='1'; uci set wireless.mesh_radio0.disabled='1'; uci set wireless.client_radio0.disabled='1'; uci set wireless.wan_radio0.disabled='1';uci set wireless.ibss_radio1.disabled='1'; uci set wireless.mesh_radio1.disabled='1'; uci set wireless.client_radio1.disabled='1'; uci set wireless.wan_radio1.disabled='1';wifi
0  7 * * *   uci set wireless.ibss_radio0.disabled='0'; uci set wireless.mesh_radio0.disabled='0'; uci set wireless.client_radio0.disabled='0'; uci set wireless.wan_radio0.disabled='0';uci set wireless.ibss_radio1.disabled='0'; uci set wireless.mesh_radio1.disabled='0'; uci set wireless.client_radio1.disabled='0'; uci set wireless.wan_radio1.disabled='0';wifi
ESC dann :wq
Erläutertung:
wireless.ibss - wird nur benötigt, wenn Mesh via IBSS aktiv ist
wireless.mesh - wird nur benötigt, wenn Mesh via 802.11s aktiv ist
wireless.client - schaltet das Client Netz ab
wireless.wan - wir benötigt, wenn eine private WLAN SSID ausgestrahlt wird
radio0 - 2,4GHz WLAN Modul
radio1 - 5GHz WLAN Modul

Fastd Uplink sofort für ein paar Stunden ausschalten

Manchmal braucht man die gesamte Bandbreite für eine Zeit für sich. In dem Fall braucht man nicht gleich den Stecker zu ziehen, sondern mit diesem Script kann man direkt von seinem Rechner aus auf der Konsole den Uplink für eine Zeit ausschalten:

SECONDS=3600 # one hour
ssh root@your:ipv6::addr:ess '(/etc/init.d/fastd stop && sleep '$SECONDS' && /etc/init.d/fastd start)&'

Statusseite partiell ausblenden - Privacy (2016.1.x)

Nachbarknoten (alles)

chmod -x /lib/gluon/status-page/www/cgi-bin/interfaces

Nachbarknoten (dBm)

chmod -x /lib/gluon/status-page/www/cgi-bin/dyn/stations

Statistik (alles)

chmod -x /lib/gluon/status-page/www/cgi-bin/dyn/statistics

WAN auf allen Netzwerkports

 uci set network.client.ifname=bat0
 uci set network.wan.ifname='eth0 eth1'
 uci commit network

Achtung! Je nach Router sind auch andere Befehle notwendig. Zuerst sollte man mit

 uci show network.client.ifname
 uci show network.wan.ifname

sich den Altzustand anzeigen lassen und notieren. Der WDR4300 hat z.B. statt eth0 und eth1 die Interface eth0.1 und eth0.2. Zur Änderung werden folglich folgende Befehle benötigt.

 uci del_list network.client.ifname=eth0.1
 uci add_list network.wan.ifname=eth0.1

Danach die Änderung erneut prüfen. Und mit

 uci commit 

bestätigen.

ReBroadcast Mesh-on-WAN/LAN abschalten (Default on 2016.2.x)

With this option set incoming multicast payload frames on <iface> are not being rebroadcasted on <iface> again.
This option should be set on links which are known to be transitive and symmetric only, for instance point-to-point wifi longshots or wired links.
-- Linus Lüssing

uci set network.mesh_wan.mesh_no_rebroadcast='1'
uci set network.mesh_lan.mesh_no_rebroadcast='1'
uci commit network
reboot && exit

Weiterleitungs-Kosten des Mesh-Hop (Knoten) festlegen (2011.0.0 <= batman-adv < 2014.1.0)

A higher hop penalty will make it more unlikely that other nodes will choose this node as intermediate hop towards any given destination.
EX: Mobile nodes could choose a value of 255 (maximum value) to avoid being chosen as a router by other nodes.

1. Anzeigen (Default: 15)

cat /sys/class/net/bat0/mesh/hop_penalty 

2. Temporär ändern, z.B. 100

echo 100 > /sys/class/net/bat0/mesh/hop_penalty

3. Persistent abspeichern, z.B. 100

uci set batman-adv.bat0.hop_penalty='100'
uci commit batman-adv
# reboot oder Schritt 2. zum Anwenden

Sendeleistung reduzieren

Mögliche Werte:

iwinfo phy0 txpower

Sendeleistung z.B. auf 12dBm reduzieren:

uci set wireless.radio0.txpower=12
uci commit
wifi

Hinweis: seit 2016.2.3 ist dort ein ungelöster Bug, weshalb das z.Z keine Wirkung hat. Workaround:

iw phy0 set txpower fixed 1200 # $wert mal 1000

POE Passthrough auf TP-Link CPE

Ab Gluon 2016.2:

uci set system.poe_passthrough=gpio_switch
uci set system.poe_passthrough.name='PoE Passthrough'
uci set system.poe_passthrough.gpio_pin='20'
uci set system.poe_passthrough.value='1'
uci commit system

Nützliche Befehle für Freifunkfirmware und OpenWRT

Befehl Beschreibung
ls Verzeichnisinhalt listen
cd Verzeichnis wechseln
cp Kopieren
rm Datei/Verknüpfung/Link löschen
vi Textdateieditor (verlassen mit ESC,!,q,RETURN). Befehlsübersicht
date Anzeigen und Einstellen des Datums und der Uhrzeit
uptime zeigt die Gerätelaufzeit seit dem letzten Neustart an
df -h Speicherauslastung der Dateisysteme anzeigen
free Arbeitsspeicherauslastung anzeigen
top Systemauslastung/Prozesse anzeigen (wird mit "q" wieder beendet). Manpage
logread System-Logs anzeigen
ip Das "Schweizer Messer" zur Netzwerkkonfiguration. Wesentliche Varianten: ip link show, ip address show, ip route show. Manpage
mtr Paketverfolgung und Anzeige der Zwischenstationen. Eine Kombination aus ping und traceroute. Manpage
horst Ein kleines Programm, welches u.a. die empfangenen WLAN-Netzwerkpakete mit der dazugehörigen Signalstärke anzeigt. Muss ggf. per opkg nachinstalliert werden.
opkg Paketmanagement. Dokumentation
busybox Kombi-Binary für alle wesentlichen Utilities. Die Manpage ist lesenswert; sollten Symlinks fehlen, per busybox cmd aufrufen.

nützliche One-Liner

Befehl Beschreibung
arp | grep br-batman | wc -l Gibt die der ARP-Tabelle bekannte Zahl an MAC-Adressen auf dem br-batman Device zurück.
arp | sort -n ARP-Tabelle, erhöhte Lesbarkeit.
ip a | grep inet | sort Filtert die ip a Ausgabe nach IP-Adressen.
Enter, dann ~ (Tilde), dann . (Punkt) Remoteterminal hängt? Diese Sequenz bringt dich zurück.

ausführliche Beispiele

  • Befehl um Verzeichnis zu wechseln
cd /VERZEICHNIS
  • Befehl um eine Datei über http in das aktuelle Verzeichnis auf den Router zu laden
wget http://SERVER/VERZEICHNIS/DATEI
  • Befehl um Dateien zu übertragen
scp datei1 datei2 user@server:/zielverzeichnis/

scp benutzerx@server1:datei1 datei2 benutzery@server2:

scp user@server:/verzeichnis/datei /lokales/zielverzeichnis/
  • Befehle um auf FF-Router neue Firmware zu übertragen ( -n Konfiguration überschreiben; bitte beachten, das der FF-Router danach einen kalt Start braucht; also Strom aus und wieder an )
ssh root@ff-router

cd /tmp

wget <link zum image>

sysupgrade -nv <heruntergeladenes image>

oder

ssh root@ff-router

scp benutzerx@server1:datei.bin /tmp/

cd /tmp

sysupgrade -nv datei.bin

  • Befehl zum entpacken von Tar-Archiven im aktuellen Verzeichnis
tar -xf *.tar
  • Befehl zum installieren von Paketen aus dem aktuellen Verzeichnis
opkg install PAKET.ipk
  • Befehl zum erzeugen eines Links
ln -s /verzeichnis/datei /verzeichnis/link
  • Befehl zum anzeigen der eigenen IP-Adressen <Schnittstelle kann optional angegeben werden eth0 wlan0 ...>
ip addr show wlan0
  • Welche Nachbarn hat der Router
wget -q -O - http://127.0.0.1:2006/neigh
  • Welchen Weg nehmen Daten zum Ziel
traceroute www.freifunk.net
  • Kombination aus ping und traceroute zum Beenden q drücken
mtr www.freifunk.net
  • ändern des Standard-Editors auf „nano“
export EDITOR=/usr/bin/nano
  • systemweit dauerhaftes Ändern des Standard-Editors auf „nano“ als root
echo 'export EDITOR=/usr/bin/nano' >> /etc/profile ;exit
  • dauerhaftes Ändern des Standard-Editors auf „nano“ als user
echo 'export EDITOR=/usr/bin/nano' >> ~/.bashrc ; exit
  • crontab als root bearbeiten
crontab -e
  • Zwangs-Reboot des Routers zu einer bestimmten Zeit erzwingen

crontab als root bearbeiten und neue Zeile einfügen, zB. ( für täglich 4 Uhr):

    0 4 * * * sync ; reboot