Die Shell des Routers

Auf dem Freifunkrouter läuft ja bekanntlich ein OpenWrt System. Hier gibt es viele der üblichen Kommandos die man aus der Linux/Unix Welt kennt. Wer bereits Erfahrung mit der Shell (oder auf Deutsch: Kommandozeile) auf unix-artigen Systemen hat wird sich auf OpenWrt leicht zurechtfinden.

Hinweis

Man muss die Shell nicht unbedingt verwenden. Vieles ist auch über die LuCI Weboberfläche zu bewerkstelligen. Einige Dinge lassen sich aber nur auf der Shell erledigen. Oder zumindest einfacher und schneller.

Im Folgenden sollen einige wichtige und nützliche Kommandos vorgestellt werden.

Hinweis

Die meisten Kommandos haben eine eingebaute Hilfe die angezeigt wird, wenn man dem Kommando -h oder --help anhängt.

Bewegen im Dateisystem

Wie unter Linux üblich gibt es ein Rootverzeichnis, das / heisst. Alle weiteren Verzeichnisse sind Unterverzeichnisse davon.

Den Inhalt des aktuellen Ordners kann man mit ls anzeigen.

Um sich im Dateisystem zu bewegen wird cd verwendet:

Kommando Beschreibung
cd .. Eine Ebene nach oben wechseln
cd / Ins Rootverzeichnis wechseln
cd <verzeichnis> Ins Verzeichnis <verzeichnis> wechseln, z.B.
cd /etc/config wechselt ins Verzeichis /etc/config

Dateien anzeigen und editieren

Standardmässig ist vi als Editor auf dem Router installiert. Für Hilfe zur Benutzung von vi siehe:

Dateien bearbeiten im OpenWrt Wiki

Als Alternative zu vi ist auch nano empfehlenswert. Dieser ist nicht per Default installiert sondern muss nachinstalliert werden. Entweder direkt von Meshkit mit ins Firmwareimage bauen lassen (siehe Pakete) oder nachinstallieren (Pakete installieren).

Will man eine Datei nur anzeigen, dann kann hierfür auch cat verwendet werden, z.B. cat /etc/banner.

uci

Die Konfiguration von OpenWrt erfolgt in der Regel über Konfigurationsdateien in /etc/config, die das Unified Configuration Format verwenden. Diese Dateien können direkt bearbeitet werden. Es ist aber auch möglich, uci zu verwenden, um Einstellungen in diesen Files zu verändern.

Kommando Beschreibung
uci show zeigt alle uci Konfigurationseinstellungen
uci show freifunk zeigt alle Einträge in /etc/config/freifunk
uci show freifunk.contact zeigt alle Einträge der Sektion contact in /etc/config/freifunk
uci get freifunk.contact.nickname Zeigt die Option nickname aus der Section contact in /etc/config/freifunk
uci set freifunk.contact.nickname=’freifunker’ Setzt die Option nickname aus der Section contact in /etc/config/freifunk auf ‘freifunker’
uci changes zeigt alle gemachten, aber noch nicht committeten Änderungen
uci commit schreibt die gemachten Änderungen in allen Konfigurationsdateien
uci –help Hilfe anzeigen

Netzwerkprobleme debuggen

nslookup

Sagt uns ob die Namensauflösung für einen Rechner funktioniert.

Beispiel:

root@freifunk:~# nslookup google.com
Server:    127.0.0.1
Address 1: 127.0.0.1 localhost

Name:      google.com
Address 1: 2a00:1450:4001:c02::65 fa-in-x65.1e100.net
Address 2: 173.194.70.101 fa-in-f101.1e100.net

aber:

root@freifunk:~# nslookup domaindieesnichtgibt.de
Server:    127.0.0.1
Address 1: 127.0.0.1 localhost

nslookup: can't resolve 'domaindieesnichtgibt.de': Name or service not known

ping und ping6

Sendet ICMP echo requests an einen Rechner und zeigt die Paketlaufzeit, sofern der angepingte Rechner antwortet.

Beispiel:

root@freifunk:~# ping google.de
PING google.de (173.194.32.255): 56 data bytes
64 bytes from 173.194.32.255: seq=0 ttl=52 time=51.953 ms
64 bytes from 173.194.32.255: seq=1 ttl=52 time=51.293 ms
[...]

Für IPv6 verwendet man dementsprechend ping6:

root@freifunk:~# ping6 google.de
PING google.de (2a00:1450:4016:803::1017): 56 data bytes
64 bytes from 2a00:1450:4016:803::1017: seq=0 ttl=55 time=135.781 ms
64 bytes from 2a00:1450:4016:803::1017: seq=1 ttl=55 time=132.964 ms

Bekommen wir eine Antwort vom Rechner, dann funktioniert die Kommunikation mit ihm. Wenn nicht dann kann uns traceroute und traceroute6 unter Umständen sagen, wo das Problem liegt.

traceroute und traceroute6

Mit traceroute kann die Route eines Pakets durchs Netz verfolgt werden.

Beispiel:

root@freifunk:~# traceroute openlab-indoor.ffa
traceroute to openlab-indoor.ffa (10.11.0.20), 30 hops max, 38 byte packets
1  kerberos.ffa (10.11.0.17)  4.165 ms  2.102 ms  1.234 ms
2  mid1.hirsch.ffa (10.11.63.22)  66.282 ms  62.849 ms  61.505 ms
3  openlab-balkon.ffa (10.11.0.21)  73.504 ms  94.929 ms  86.264 ms
4  openlab-indoor.ffa (10.11.0.20)  97.610 ms  83.681 ms  78.941 ms

Hier wird die Route zu einem anderen Knoten im Mesh-Netzwerk. Das Paket durchläuft die Router 1, 2, 3 um schliesslich bei 4 das Ziel zu erreichen.

Für IPv6 wird traceroute6 verwendet, das im Paket iputils-traceroute6 enthalten ist und u.U. erst noch installiert werden muss, siehe Pakete installieren.

iproute2

ip ist ein mächtiges Kommando zum Anzeigen und Verändern von IP-Konfiguration wie IP-Adressen und Routingeinträge. Es sollte dem älteren ifconfig vorgezogen werden.

Allgemeines:

  • durch den Parameter “-4” werden nur IPv4-Informationen angezeigt, durch “-6” ur IPv6-Informationen
  • Alle Kommandos können auch in Kurzschreibweise angegeben werden, z.b. ip a statt ip addr

Wichtige Kommandos sind:

Kommando Beschreibung
ip addr Zeigt die Konfiguration aller Netzwerkschnittstellen an
ip -4 addr show dev eth1 zeigt alle IPv4-Informationen zur Schnittstelle eth1 an.
ip addr add 1.2.3.4/32 dev eth1 Konfiguriert 1.2.3.4 mit der Netzmaske 32 als (weitere) IP-Adresse für eth1.
ip addr del 1.2.3.4/32 dev eth1 löscht die oben angelegte Adresse 1.2.3.4 auf eth1 wieder.
ip route show Zeigt alle Routen in der main-Routingtabelle.
ip route show table olsr Zeigt alle Routen in der olsr-Routingtabelle.
ip route add 192.168.100.0/24 via 192.168.2.1 dev eth1 Fügt eine Route zum Netzwerk 192.168.100.0/24 in die main-Routingtable ein. Der Gateway für dieses Netzwerk ist 192.168.2.1 und das Interface dafür eth1.
ip route del 192.168.100.0/24 via 192.168.2.1 dev eth1 Löscht die oben angelegte Route zu 192.168.100.0/24 wieder.
ip route add 192.168.100.0/24 via 192.168.2.1 dev eth1 table olsr Fügt eine Route zum Netzwerk 192.168.100.0/24 in die olsr-Routingtable ein. Der Gateway für dieses Netzwerk ist 192.168.2.1 und das Interface dafür eth1.
ip route del 192.168.100.0/24 via 192.168.2.1 dev eth1 table olsr Löscht die oben angelegte Route zu 192.168.100.0/24 wieder.
ip rule show zeigt alle Routingregeln (“ip rules”) an
ip –help zeigt die Hilfe zu ip an, das noch viel mehr kann als hier gezeigt.

ipcalc.sh

Ist ein nützliches kleines Kommando auf der OpenWrt Shell. Insbesondere kann damit die Startadresse (NETWORK) sowie die Endadresse (BROADCAST) eines gegebenen Netzwerks berechnet werden. Die Netzmaske wird sowohl in dotted decimal notation (NETMASK) als auch in der CIDR-Schreibweise (PREFIX) auegebenen. Damit ist ipcalc.sh auch sehr gut geeignet, um Netzmasken von der einen in die andere Notation umzuwandeln.

Beispiel: Angabe des Netzwerks in der CIDR-Notation:

root@freifunk:~# ipcalc.sh  10.11.0.1/18
IP=10.11.0.1
NETMASK=255.255.192.0
BROADCAST=10.11.63.255
NETWORK=10.11.0.0
PREFIX=18

Beispiel: Angabe des Netzwerks in der Dotted Decimal-Notation:

root@freifunk:~# ipcalc.sh  10.11.0.1 255.255.192.0
IP=10.11.0.1
NETMASK=255.255.192.0
BROADCAST=10.11.63.255
NETWORK=10.11.0.0
PREFIX=18