Online-Hilfe

Kommandozeilenschnittstelle (CLI)

Der Router verfügt über eine Kommandozeilen-Schnittstelle (CLI, Command Line Interface) zur Konfiguration aus dem lokalen Netz oder aus der Ferne mit Telnet oder SSH.

Über die CLI wird zeilenweise ein Parameter nach dem anderen eingegeben und im geöffneten Profil gespeichert. Die Änderungen am Profil werden damit im laufenden Profil noch nicht wirksam. Das Profil muss noch aktiviert, d.h. zum laufenden Profil werden, damit die Änderungen der Konfiguration wirksam werden.

Aktivieren der CLI

Bevor ein Zugriff auf den Router mit Telnet oder SSH möglich ist, muss dies im Menü Administration auf der Seite CLI entsprechend konfiguriert werden. Dazu muss der Zugang über Telnet oder SSH aktiviert werden und bei aktiver Firewall eine entsprechende Ausnahmeregel vorhanden und aktiv sein. Eine geeignete Firewall-Regel ist im Menü Netzfilter auf der Seite IP-Filter mit der Beschreibung Local access to command line via SSH vorbereitet und muss nur noch auf aktiv gesetzt werden.

Syntax

Die Syntax eines Parameters setzt sich aus den Sektionen sowie dem Parameter, jeweils getrennt durch einen Punkt zusammen. Die Sektionen entsprechen der Menüstruktur im Web-Interface. Der Parameter Kommandozeile via SSH aktivieren im Menü Administration auf der Seite CLI hat beispielsweise folgende Syntax:
> administration.cli.ssh_active
Dabei entsprechen die beiden Sektionen vor dem Parameter dem Menü und der Seite im Web-Interface.

Die verfügbaren Sektionen und Parameter hängen vom jeweiligen Gerät und den installierten Einsteckkarten ab. Mit Hilfe der Autovervollständigung durch die Tabulator-Taste können diese bequem angezeigt werden. Ein Druck auf die Tabulator-Taste zeigt alle verfügbaren Sektionen der ersten Ebene an (entspricht den Menüs im Web-Interface). Die Eingabe des/der ersten Anfangsbuchstaben einer Sektion gefolgt von der Tabulator-Taste vervollständigt die Sektion und ein weiterer Druck auf die Tabulator-Taste zeigt alle verfügbaren Sektionen der nächsten Ebene an (entspricht den Seiten dieses Menüs im Web-Interface). Ein weiterer Druck auf die Tabulator-Taste zeigt mögliche weitere Sektionen oder die verfügbaren Parameter an. Bei Listen wird automatisch die geöffnete eckige Klammer ([) ausgegeben. Wenn diese durch einen Punkt ersetzt wird, gibt ein weiterer Druck auf die Tabulator-Taste die verfügbaren Listen-Funktionen aus.

Zeilen, die mit einer Raute # beginnen, werden ignoriert und können als Kommentare verwendet werden.

Siehe dazu auch die Seite Befehlsreferenz.

Aktivieren eines Profils

Wird ein Profil mit der CLI wie im Folgenden beschrieben verändert, werden die Änderungen erst wirksam, wenn das Profil aktiviert wird, d.h. zum laufenden Profil wird.
Beispiel für das Aktivieren des geöffneten Profils:
> administration.profiles.activate
>

Beispiel für das Aktivieren des Profils "Profile_2":
> administration.profiles.activate=Profile_2
>

Auslesen von Werten

Der aktuelle Wert eines Parameters wird durch Eingabe des Parameters gefolgt von der Eingabe-Taste angezeigt. Wird nur die übergeordnete Sektion angegeben, so werden alle darunterliegenden Parameter ausgegeben. Beispiel:
> administration.cli.ssh_active
1
> administration.time
administration.time.timezone=Regensburg
administration.time.ntp_peer=ptbtime1.ptb.de

Eingeben von Werten

Ein neuer Wert wird einem Parameter durch Eingabe des Parameters gefolgt von einem Gleichheitszeichen und dem neuen Wert übergeben. Beispiel:
> administration.cli.telnet_active=1
>

Umbenennen von Einträgen

Ein Eintrag, wie der Name eines Profils oder Containers, kann durch Eingabe des alten Namens und des neuen Namens, getrennt durch ein Leerzeichen, umbenannt werden. Beispiel für das Umbenennen des Profils "quick_start_profile" in "new_profile":
> administration.profiles.rename=quick_start_profile new_profile
>

Bearbeiten von Listen

Neben festen Parametern verfügt der Router auch über endlos erweiterbare Listen, wie beispeielsweise die der angelegten Benutzer. Die einzelnen Einträge einer Liste werden der Reihe nach durchnummeriert und sind über diese Positionsnummer ansprechbar. Beispielsweise wird der Benutzername des zweiten Eintrags der Benutzer-Liste ausgegeben durch den Befehl:
> administration.users.user[2].username
=Name

Auch hier wird mit der Tabulator-Taste die Befehlszeile vervollständigt. Wenn mehr als ein Eintrag vorhanden ist, werden dabei auch die vorhandenen Einträge angezeigt. Der Eintrag last bezieht sich immer auf den letzten Eintrag der Liste.

Ausgabe der Listengröße

Mit dem Parameter size wird die Anzahl der Listeneinträge ausgegeben. Beispiel für die Anzahl der Benutzer:
> administration.users.user.size
3

Hinzufügen eines Listeneintrags

Mit dem Parameter add wird einer Liste ein Eintrag am Ende hinzugefügt. Ab Version 2.6 können durch die Angabe einer Anzahl auch mehrere Listeneinträge mit einem Befehl hinzugefügt werden. Beispiel für das Hinzufügen eines weiteren Benutzers:
> administration.users.user.add
Beispiel für das Hinzufügen von sieben weiteren Benutzern:
> administration.users.user.add=7

Löschen eines Listeneintrags

Mit dem Parameter delete=[x] wird der Eintrag mit der Nummer [x] in der Liste gelöscht. Mit delete=all werden alle Einträge in der Liste gelöscht. Mit delete=last wird der letzte Eintrag gelöscht. Beispiel für das Löschen des Eintrags Nr. 3 in der Liste der Benutzer:
> administration.users.user.delete=3

Verschieben eines Listeneintrags nach oben

Mit dem Parameter sort_up=[x] wird der Eintrag mit der Nummer [x] in der Liste um eine Position nach oben (auf die Position [x-1]) geschoben. Beispiel für das Verschieben des Eintrags Nr. 3 in der Liste der Benutzer nach oben:
> administration.users.user.sort_up=3

Verschieben eines Listeneintrags nach unten

Mit dem Parameter sort_down=[x] wird der Eintrag mit der Nummer [x] in der Liste um eine Position nach unten (auf die Position [x+1]) geschoben. Beispiel für das Verschieben des Eintrags Nr. 3 in der Liste der Benutzer nach unten:
> administration.users.user.sort_down=3

Kopieren eines Listeneintrags

Mit dem Parameter copy=[x] wird der Eintrag mit der Nummer [x] in der Liste kopiert. Dabei wird ein identischer Listeneintrag ans Ende der Liste angehängt. Beispiel für das Kopieren des Eintrags Nr. 3 in der Liste der Benutzer:
> administration.users.user.copy=3

Listen innerhalb von Listen

Manche Funktionen des Routers erfordern Listen innerhalb von Listen. Die Bearbeitung erfolgt analog zu den übergeordneten Listen auf der entsprechenden untergeordneten Sektionsebene. Beispiel für die Abfrage des Verbindungs-Check-Intervalls vom Interface auf Position 2 der WAN-Kette auf Position 1:
> wan.wans.wan_chain[1].interface[2].check_interval
10

Multiline-Werte

Es besteht auch die Möglichkeit, mehrzeilige Werte innerhalb der CLI einzugeben. Dies ist beispielsweise erforderlich, um Zertifikate, Schlüssel oder Texte für E-Mails und SMS hochzuladen. Diese Werte müssen dann mit -----BEGIN[ID]----- beginnen und mit -----END[ID]----- enden. [ID] kann beliebig gewählt werden, muss aber für BEGIN und END gleich sein. Beispiel für den Text der Meldung 1:
> events.messages.message[1].text
-----BEGIN text-----Message 1 Text-----END text-----

Anzeigen von Status-Informationen

Die im Menü Status des Web-Interface angezeigten Informationen können auch über die CLI ausgelesen werden. Status-Informationen können auch in Meldungen als Aktualwerte eingefügt werden. Beispiel für die Anzeige der Spannung an Eingang 1 der LTE-Karte in Slot 2:
> status.lte2.input_voltage_1
12.25 V

Anzeigen von Log-Dateien

Bei der Anzeige der Log-Dateien werden die anzuzeigenden Logs durch Kommata getrennt als Indices der Endlosliste view übergeben. Werden keine Log-Dateien angegeben, werden alle Log-Dateien ausgegeben. Es werden jeweils die letzten 10 Zeilen der ausgewählten Log-Dateien ausgegeben. Beispiel:
> status.log.view[deviced,cli]
2016-06-16 11:36:54 [clid] Started
2016-06-16 13:37:06 [deviced] Remove device node /dev/ttyUSB3
2016-06-16 13:37:07 [deviced] Turning on modem in slot 2
2016-06-16 13:37:19 [deviced] USB: detected Gemalto PLS8 application port
2016-06-16 13:37:19 [deviced] Add device node /dev/ttyUSB2
2016-06-16 13:56:34 [clid] Reconfiguring
2016-06-16 13:56:34 [clid] Starting SSH server for CLI
2016-06-16 14:07:10 [deviced] Turning off modem in slot 2
2016-06-16 14:07:10 [deviced] USB: detected Gemalto PLS8 application port
2016-06-16 14:07:10 [deviced] Remove device node /dev/ttyUSB2
2016-06-16 14:07:12 [deviced] Turning on modem in slot 2
2016-06-16 14:07:24 [deviced] USB: detected Gemalto PLS8 application port
2016-06-16 14:07:24 [deviced] Add device node /dev/ttyUSB3

Filtern der Log-Datei-Ausgabe

Zur Filterung der ausgegebenen Log-Dateien steht das Programm grep zur Verfügung. Die in grep verfügbaren Parameter werden durch den Parameter -h angezeigt. Sie können auch kombiniert werden.
Beispiel für das Anzeigen aller neuen Log-Meldungen sobald sie auftreten (der Modus kann mit Esc wieder verlassen werden):
> status.log.view[]=grep -f
Beispiel für das Anzeigen aller neuen Anmeldungen am Web-Interface:
> status.log.view[httpd]=grep -f -e logged -e Authentication

Anzeigen der Ereignis-abhängigen Informationen

In einer interaktiven CLI-Sitzung können alle verfügbaren Parameter zu den Ereignis-abhängigen Informationen durch die Autovervollständigung (mit der Tabulator-Taste, siehe Syntax oben) angezeigt werden:
> events.info[
event_id
username
successful
remotehost
sender
message
modem
link_name
changed_to

Diese Ereignis-abhängigen Informationen können nur von dem Ereignis verwendet werden, das die Meldung oder ASCII-Konfiguration ausgelöst hat. Dort können sie einzeln durch Angabe eines Parameters oder alle in der Form Parameter=Wert aufgelistet werden:
> events.info[username]
insys

> events.info
event_id=4
username=insys
remotehost=192.168.1.2:58608
successful=yes

Um in einer ASCII-Konfiguration Ereignis-abhängigen Informationen auszuwerten, muss diese ein Lua-Skript enthalten.

Debugging

Manuelles Auslösen einer Aktion

Das manuelle Auslösen einer Aktion dient zum Testen ihrer Wirkung ohne erst abwarten zu müssen, bis das konfigurierte Ereignis eintritt. Je nach Aktion müssen zuerst gewisse Parameter gesetzt werden, mit denen dann die Aktion ausgeführt wird. Beispiel für das Schließen von Ausgang 1 der Karte in Slot 3:
> help.debug.output.output=3.1
> help.debug.output.change=close
> help.debug.output.submit

Mit dem ersten Parameter wird der zu setzende Ausgang festgelegt. Mit dem zweiten Parameter wird die auszuführende Aktion festgelegt. Mit dem dritten Parameter wird die entsprechende Aktion am gewählten Ausgang ausgelöst.

Analyse der Netzwerkverbindungen

Die zum Debugging verfügbaren Befehle werden dem Parameter tool als Wert übergeben. Dafür stehen die sechs Programme ping, ping6, traceroute, traceroute6, nslookup und tcpdump zur Verfügung. Dahinter wiederum werden die eigenen Parameter des Debugging-Werkzeugs übergeben. Die Syntax des Debugging-Werkzeugs wird durch den Parameter -h angezeigt. Die Ergebnisse werden sofort angezeigt. Die Ausführung der Befehle kann mit Esc oder Strg + C sofort abgebrochen werden. Beispiel für das Versenden von 3 Pings hintereinander an die Adresse 192.168.1.111:
> help.debug.tool=ping -c3 192.168.1.111
> PING 192.168.1.111 (192.168.1.111): 56 data bytes
64 bytes from 192.168.1.111: seq=0 ttl=64 time=2.369 ms
64 bytes from 192.168.1.111: seq=1 ttl=64 time=1.373 ms
64 bytes from 192.168.1.111: seq=2 ttl=64 time=1.370 ms

Ausführen eines AT-Befehls

Der zum Ausführen von AT-Befehlen erforderliche Befehl at_command wird dem Parameter tool als Wert übergeben. Dahinter folgt das verwendete Modem und dahinter wiederum wird der AT-Befehl übergeben. Die Ergebnisse werden sofort angezeigt. Beispiel für das Identifizieren des Modem-Chipsatzes in Slot 2:
> help.debug.tool=at_command lte2 ati
ati
Cinterion
PLS8-E
REVISION 01.090

OK

Abkürzungen

Zur Reduzierung des Eingabeaufwands stehen zusätzlich zur Autovervollständigung Abkürzungen für eine (teilweise) Wiederholung des letzten Befehls zur Verfügung. Mit dem : (Doppelpunkt) werden alle Sektionen des letzten Befehls bis zum letzten Punkt ersetzt. Mit dem . (Punkt) wird je eine Sektion des letzten Befehls an der Stelle des Punkts ersetzt. Beispiele:
> wan.wans.wan_chain[1].interface[2].check_interval
=10

> :check_interval
=10

> ....check_interval
=10

> ...interface[2].check_interval
=10

Lua-Modus

Zum Ausführen von Lua-Skripten auf dem Router können diese in ASCII-Konfigurationsdateien oder im CLI übergeben werden. Neben dem üblichen Funktionsumfang (siehe Lua 5.3 Reference Manual) stehen im Lua-Modus folgende Befehle zur Verfügung: cli, cli_log, lua_log, netmask_to_cidr, cidr_to_netmask, ip_in_net, sleep
Um die Funktion des Routers durch Lua-Befehle nicht versehentlich zu beeinträchtigen, sind folgende Befehle nicht verfügbar: dofile, loadfile, os.execute, os.getenv, os.remove, os.rename, os.setlocale, os.tmpname
Darüber hinaus sind folgende Bibliotheken nicht enthalten: io, coroutine, debug, package

Der Lua-Modus wird mit -----LUA----- betreten und verlassen. Der Lua-Modus ermöglicht die Ausführung komplexer Lua-Skripte.

Die Lua-Funktion "require" ermöglicht es, innerhalb eines Lua-Skripts weitere Lua Bibliotheken zu laden und auszuführen. Diese Dateien können wie eine reguläre ASCII-Konfigurationsdatei auf den Router geladen werden, müssen jedoch die Dateiendung ".lua" haben. Außerdem muss zu Beginn der Datei der Lua-Modus mit -----LUA----- betreten werden. Beim Aufruf von "require" wird nur der Dateiname ohne die Dateiendung übergeben.

Mit dem Befehl cli werden innerhalb von Lua Befehle an das CLI übergeben. Beispielsweise setzt folgender Befehl den Standort auf "Regensburg":
> cli("administration.hostnames.location=Regensburg")
Die Ausgabe eines Parameters ist zum Beispiel mit folgendem Befehl möglich:
> print(cli("administration.hostnames.location"))
Regensburg

Mehrzeilige Werte wie Zertifikate oder Meldungstexte müssen in einem CLI-Aufruf übergeben werden. Entweder wird ein mehrzeiliger Text in [[ und ]] gefasst oder Zeilenumbrüche werden durch das Steuerzeichen \n ersetzt. Beispiel:
> cli("events.messages.message[1].text=-----BEGIN TEXT-----Hello, \nThis email was sent from my Smart Device-----END TEXT-----")
> cli([[events.messages.message[1].text=-----BEGIN TEXT-----
Hello,
This email was sent from my Smart Device
-----END TEXT-----]])

Mit dem Befehl cli_log erfolgt ein Eintrag in das CLI-Log. Beispielsweise wird mit folgendem Befehl die Zeichenfolge "abc" in das CLI-Log geschrieben:
> cli_log("abc")

Mit dem Befehl lua_log erfolgt ein Eintrag in das Lua-Log. Das Lua-Log wird erst erzeugt, wenn Einträge durch diesen Befehl erfolgen. Der Router selbst schreibt keine Einträge in dieses Log. Beispielsweise wird mit folgendem Befehl die Zeichenfolge "xyz" in das Lua-Log geschrieben:
> lua_log("xyz")

Mit dem Befehl ip_in_net kann abgefragt werden, ob sich eine bestimmte IP-Adresse in einem Netzwerk befindet. Beispielsweise kann man mit folgendem Befehl prüfen, ob sich die IP-Adresse 192.168.1.13 im Netzwerk 192.168.1.0 befindet (die Angabe des Netzwerks kann im CIDR-Format oder mit Netzmaske erfolgen):
> print(ip_in_net("192.168.1.13","192.168.1.0/24"))
true

oder alternativ mit Netzmaske:
> print(ip_in_net("192.168.1.13","192.168.1.0","255.255.255.0"))
true

Mit dem Befehl cidr_to_netmask erfolgt die Umrechnung einer CIDR-Notation in eine Netzmaske. Beispiel:
> print(cidr_to_netmask("24"))
255.255.255.0

Mit dem Befehl netmask_to_cidr erfolgt die Umrechnung einer Netzmaske in CIDR-Notation. Beispiel:
> print(netmask_to_cidr("255.255.255.0"))
24

Mit dem Befehl sleep lässt sich die Ausführung des Lua-Skripts um die im Argument angegebene Anzahl von Sekunden anhalten. Beispielsweise kann man mit folgendem Befehl die Ausführung um 0,7 Sekunden verzögern:
> sleep(0.7)

Beenden der CLI-Sitzung

Die CLI-Sitzung wird beendet durch die Eingabe von exit gefolgt von der Eingabe-Taste.

Zurück zur Übersicht