8. imond/imonc - imon-Server imond |
imond ist ein netzwerkfähiges Server-Programm, welches bestimmte Anfragen beantwortet oder auch Kommandos zur Steuerung des Routers entgegennehmen kann.
Ausserdem steuert imond das Least-Cost-Routing. Dazu verwendet er eine Konfigurationsdatei /etc/imond.conf, welche beim Booten automatisch aus den ISDN_CIRC_x_XXX-Variablen der Datei config/isdn.txt über ein Shell-Script erzeugt wird.
imond läuft permanent als Daemon und horcht gleichzeitig auf TCP/IP-Port 5000 und Device /dev/isdninfo.
Folgende Kommandos sind über den TCP/IP-Port 5000 möglich:
Admin-Befehle:addlink ci-index Channel zum Circuit hinzufügen (Channel-Bundling) adjust-time seconds Ändert die Uhrzeit des Routers um die angegebenen Sekunden delete filename pw Löscht die Datei auf dem Router hup-timeout #ci-index [value] Anzeigen bzw. Setzen des HUP-Timeout für ISDN-Circuits removelink ci-index Zusätzlichen Channel wieder entfernen reset-telmond-log-file Löschen der telmond-Protokolldatei reset-imond-log-file Löschen der imond-Protokolldatei receive filename #bytes pw Eine Datei auf den Router übertragen. Dazu quittiert imond den Befehl mit eienm ACK (0x06). Danach wird die Datei in 1024er- Blöcken übertragen, die imond auch jeweils mit einem ACK bestätigt. Als letztes übermittelt imond noch ein OK. send filename pw Wenn das Passwort stimmt und die Datei existiert, liefert imond ein OK #bytes. Anschliessend überträgt imond die Datei in 1024er Blöcken, die jeweils mit einem ACK (0x06) bestätigt werden müssen. Als letztes liefert imond noch ein OK. support pw Liefert den Status/Konfiguration vom Router sync Synchronisiert den Cache von gemounteten LaufwerkenAdmin- oder User-Befehle:
dial Wählt den Provider an (Default-Route-Circuit) dialmode [auto|manual|off] Liefert bzw. setzt den Dialmode disable Hängt ein und setzt dialmode auf "off" enable Setzt dialmode auf "auto" halt Fährt den Router sauber herunter hangup Hängt ein reboot Reboot vom i4l-Router! route [ci-index] Setzen Default-Route auf Circuit X (0=automatisch)User-Befehle:
channels Ausgabe Anzahl der verfügbaren ISDN-Kanäle charge #channel-id Ausgabe der Online-Kosten für einen Channel chargetime #channel-id Online-Zeit unter Berücksichtigung des Taktes circuit [ci-index] Ausgabe eines Circuit-Namens circuits Ausgabe Anzahl der Default-Route-Circuits cpu Liefert die Auslastung der CPU in Prozent date Ausgabe Datum/Uhrzeit device ci-index Liefert das Device des Circuits driverid #channel-id Ausgabe Driver-Id für Channel X help Ausgabe Hilfe inout #channel-id Ausgabe der Richtung (incoming/outgoing) imond-log-file Ausgabe imond-Protokolldatei ip #channel-id Ausgabe der IP is-allowed command Ausgabe, ob Befehl konfiguriert/gültig ist Mögliche Befehle: dial|dialmode|route|reboot| imond-log|telmond-log|mgetty-log is-enabled Ausgabe, ob dialmode auf off (0) oder auto (1) links ci-index Ausgabe Anzahl momentaner Channel 0, 1 oder 2 0 heisst: Kein Channel-Bundling möglich log-dir imond|telmond|mgetty Liefert das Logverzeichnis mgetty-log-file Ausgabe mgetty-Protokolldatei online-time #channel-id Ausgabe Online-Zeit der akt. Verbindung in hh:mm:ss pass [password] Abfrage, ob Password nötig bzw. Passwordeingabe 1 Userpassword gesetzt 2 Adminpassword gesetzt 4 imond befindet sich im Admin-Modus phone #channel-id Ausgabe Telefonnummer/Name des "Gegners" pppoe Liefert die Anzahl der pppoe-Devices (also 0 oder 1) quantity #channel-id Liefert die übertragenen Datenmengen (in Byte) quit Beenden der Verbindung zu imond rate #channel-id Ausgabe Übertragungsraten (incoming/outgoing in B/sec) status #channel-id Ausgabe Status für Channel X telmond-log-file Ausgabe telmond-Protokolldatei time #channel-id Ausgabe Summe Online-Zeiten, Format hh:mm:ss timetable [ci-index] Ausgabe der Zeittabelle für LC-Routing uptime Ausgabe der Uptime des Routers in Sekunden usage #channel-id Ausgabe Art der Verbindung, mögliche Antworten: Fax, Voice, Net, Modem, Raw version Ausgabe der Protokoll- und Programm-Version
Der TCP/IP-Port 5000 ist nur vom maskierten LAN aus erreichbar. Standardmäßig wird ein Zugriff von aussen über die Firewall-Konfiguration abgeblockt.
Imond unterstützt zwei Benutzerebenen: den User- und den Admin-Modus. Für beide Ebenen kann ein Passwort gesetzt werden mittels IMOND_PASS bzw. IMOND_ADMIN_PASS. Dadurch werden die imon-Clients von imond gezwungen, eine Password-Abfrage durchzuführen und anschließend das Password an imond zu übertragen. Solange dieses Password nicht übermittelt wurde, nimmt imond nur die beiden Kommandos "pass" und "quit" entgegen. Alle anderen werden mit einem Fehler zurückgewiesen.
Möchte man das weiter einschränken, z.B. den Zugriff nur von nur einem PC erlauben, muss die Firewall-Konfiguration geändert werden. Das geht im Moment leider noch nicht über die Standard-Konfigurationsdatei config/base.txt. In diesem Fall ist eine Änderung im rootfs-Image nötig, nämlich in rootfs/etc/rc.d/masq. Wie das geht: siehe src/README.
Die Befehle
enable/disable/dialmode dial/hangup route reboot/halt
können durch die Konfigurationsvariablen IMOND_XXX global ein- oder abgeschaltet werden (Kapitel "imond-Konfiguration").
Mit einem Unix/Linux-Rechner kann man das Ganze leicht ausprobieren:
Nach Eingabe von
telnet fli4l 5000 # oder entsprechender Name des fli4l-Routers
kann man direkt die oben aufgeführten Kommandos eingeben und sich die Ausgabe anschauen.
Zum Beispiel bekommt man mit "help" die Hilfe angezeigt, mit "quit" wird die Verbindung zum imond abgebaut.
imond konstruiert aus der Konfigurationsdatei /etc/imond.conf (welche wiederum beim Booten aus den Konfigurationsvariablen ISDN_CIRC_x_TIMES (siehe Package ISDN) usw. erstellt wird), eine zeitabhängige Tabelle (Time-Table). Diese umfasst eine komplette Kalenderwoche im 1-Stunden-Raster (168 Stunden = 168 Bytes). Die Tabelle setzt sich jedoch lediglich aus Circuits zusammen, für die eine Default-Route definert ist.
Mit dem imond-Kommando "timetable" kann man sich diese Tabelle anschauen.
Hier ein Beispiel:
Nehmen wir an, dass 3 Circuits definiert wurden, nämlich:
CIRCUIT_1_NAME='Addcom' CIRCUIT_2_NAME='Compuserve' CIRCUIT_3_NAME='Firma'
wobei lediglich die ersten beiden Circuits mit Default-Routen belegt sind (ISDN_CIRC_x_ROUTE='0.0.0.0').
Wenn die dazugehörigen Variablen ISDN_CIRC_x_TIMES (siehe Package ISDN) folgendermaßen aussehen:
ISDN_CIRC_1_TIMES='Mo-Fr:08-18:0.0388:N Mo-Fr:18-08:0.0248:Y Sa-Su:00-24:0.0248:Y' ISDN_CIRC_2_TIMES='Mo-Fr:08-18:0.018:Y Mo-Fr:18-08:0.048:N Sa-Su:08-18:0.018:N Sa-Su:18-08:0.048:N' ISDN_CIRC_3_TIMES='Mo-Fr:08-18:0.08:N Mo-Fr:18-08:0.03:N Sa-Su:00-24:0.03:N'
dann wird daraus folgende Datei /etc/imond.conf:
#day hour device defroute phone name charge ChInt Mo-Fr 08-18 ippp0 no 010280182306 Addcom 0.0388 60 Mo-Fr 18-08 ippp0 yes 010280182306 Addcom 0.0248 60 Sa-Su 00-24 ippp0 yes 010280182306 Addcom 0.0248 60 Mo-Fr 08-18 ippp1 yes 018160 Compuserve 0.018 180 Mo-Fr 18-08 ippp1 no 018160 Compuserve 0.048 180 Sa-Su 08-18 ippp1 no 018160 Compuserve 0.018 180 Sa-Su 18-08 ippp1 no 018160 Compuserve 0.048 180 Mo-Fr 08-18 isdn2 no 0221xxxxxxx Firma 0.08 80 Mo-Fr 18-08 isdn2 no 0221xxxxxxx Firma 0.03 80 Sa-Su 00-24 isdn2 no 0221xxxxxxx Firma 0.03 80
imond erstellt dann im Speicher folgende Time-Table - hier die Ausgabe über das imond-Kommando "timetable":
0 1 2 3 4 5 6 7 8 8 10 11 12 13 14 15 16 17 18 18 20 21 22 23 -------------------------------------------------------------------------- Su 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 Mo 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 Tu 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 We 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 Th 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 Fr 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 Sa 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
No. Name DefRoute Device Ch/Min ChInt 1 Addcom no ippp0 0.0388 60 2 Addcom yes ippp0 0.0248 60 3 Addcom yes ippp0 0.0248 60 4 Compuserve yes ippp1 0.0180 180 5 Compuserve no ippp1 0.0480 180 6 Compuserve no ippp1 0.0180 180 7 Compuserve no ippp1 0.0480 180 8 Firma no isdn2 0.0800 80 8 Firma no isdn2 0.0300 80 10 Firma no isdn2 0.0300 80
Für den Circuit 1 (Addcom) sind also drei Zeitbereiche (1-3) eingetragen, für Circuit 2 (Compuserve) vier Zeitbereiche (4-7) und für den letzen drei Zeitbereiche (8-10).
In der Time-Table werden jeweils die Indices ausgegeben, welche für die jeweilige Stunde gültig sind. Hier tauchen lediglich die Indices 2-4 auf, da alle anderen keine LC-Default-Routen sind.
Sieht man in der Tabelle irgendwo Nullen, gibt es Lücken in den ISDN_CIRC_X_TIMES-Werten. Dann existiert zu diesen Zeiten keine Default-Route, Internet-Zugang abgeknipst!
Beim Programmstart ermittelt imond zunächst den Wochentag und die aktuelle Stunde. Anschließend wird dann über die Time-Table der Index ermittelt und damit dann auch der entsprechende Circuit. Auf diesen wird dann die Default-Route gesetzt.
Bei Zustandsänderungen der ISDN-Channel, z.B. Wechsel von online nach offline - jedoch spätestens nach 1 Minute - geht das Spiel von neuem los: Zeit ermitteln, Lookup in Tabelle, Default-Route-Circuit ermitteln.
Ändert sich der aktuell verwendete Circuit, z.B. montags um 18:00 Uhr, wird die alte Default-Route gelöscht, eine vielleicht bestehende Verbindung beendet (sorry...) und anschließend die Default-Route auf den neuen Circuit gesetzt. Dies kann von imond bis zu 60 Sekunden später bemerkt werden, also wird spätestens um 18:00:58 umgeschaltet.
Bei Circuits, die keine Default-Route belegen, ändert sich überhaupt nichts. Hier wird der Inhalt von ISDN_CIRC_x_TIMES lediglich zur Berechnung der Telefonkosten verwendet. Diese können dann relevant sein, wenn man über den Client imonc das LC-Routing temporär ausschaltet und einen Circuit manuell wählt.
Man kann sich jedoch auch die Tabellen für andere Zeitbereich-Indices (im Beispiel von 1 bis 10) anschauen, auch die der "Non-LC-Default-Route-Circuits".
Kommando:
timetable index
Beispiel:
telnet fli4l 5000 timetable 5 quit
Die Ausgabe sieht dann so aus:
0 1 2 3 4 5 6 7 8 8 10 11 12 13 14 15 16 17 18 18 20 21 22 23 -------------------------------------------------------------------------- Su 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Mo 5 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0 0 0 5 5 5 5 5 5 Tu 5 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0 0 0 5 5 5 5 5 5 We 5 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0 0 0 5 5 5 5 5 5 Th 5 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0 0 0 5 5 5 5 5 5 Fr 5 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0 0 0 5 5 5 5 5 5 Sa 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 No. Name DefRoute Device Ch/Min ChInt 5 Compuserve no ippp1 0.0480 180
Alles klar?
Mit dem imond-Kommando "route" kann das LC-Routing ein- und ausgeschaltet werden. Bei Angabe eines positiven Circuit-Indices (1...N) wird die Default-Route auf den angegebenen Circuit gelegt. Ist der Index 0, wird das LC-Routing wieder aktiviert und der Circuit automatisch ausgewählt.
Zur Berechnung der Onlinekosten:
Das ganze Modell zur Berechnung der Onlinekosten funktioniert nur korrekt, wenn der Zeittakt für einen Circuit (Variable ISDN_CIRC_x_CHARGEINT (siehe Package ISDN)) über die ganze Woche konstant ist. Dies ist im Normalfall bei Internet-Providern die Regel. Wählt man sich jedoch über die Telekom (ich meine nicht T-Online!) z.B. in sein Firmennetz ein, gilt das als ganz normales Telefongespräch. Und da wechselt ab 18:00 der Takt von 80 Sekunden auf 4 Minuten (Stand Juni 00). Deshalb ist die Definition von
ISDN_CIRC_3_CHARGEINT='80' ISDN_CIRC_3_TIMES='Mo-Fr:08-18:0.08:N Mo-Fr:18-08:0.03:N Sa-Su:00-24:0.03:N'
eigentlich nicht ganz korrekt. Es sind zwar abends umgerechnet auf die Minute 3 Pfennig (4 Minuten kosten 12 Telekom-Pfennige), jedoch ist der Takt falsch. Deshalb können bei der Kostenanzeige Differenzen zu den tatsächlichen Zahlen auftreten.
Vielleicht wird das später mal gefixed. Ich halte den Fehler im Moment für nicht ganz so tragisch, obwohl es jedoch bei häufiger Nutzung zu einem Problem werden kann: Bei längerer Idle-Zeit wird dann wahrscheinlich abends nicht der ganze Zeittakt von 4 Minuten ausgenutzt und deshalb das Ganze etwas teurer werden ...
Mittlerweile hat mir jemand einen Tip gegeben, wie verschieden lange Taktzeiten doch richtig berücksichtigt werden (auch wichtig für ISDN_CIRC_x_CHARGEINT): Man definiere einfach 2 Circuits, einen für tagsüber mit ISDN_CIRC_1_CHARGEINT='80' und den anderen mit ISDN_CIRC_2_CHARGEINT='240'. Natürlich muss man dann auch noch ISDN_CIRC_x_TIMES entsprechend wählen, damit tagsüber Circuit 1 und abends Circuit 2 verwendet wird. Ein schöner Trick ...
Wie gesagt: Bei Nutzung von Verbindungen zu Internet-Providern gibt es das Problem nicht, weil dort der Zeittakt immer konstant ist und lediglich die Kosten pro Minute wechseln (oder gibt es sowas doch??? Ich traue T-* alles zu :-).
«« 7. Anbindung von PCs im LAN | Home | 8. imonc/imond - Windows-Client imonc.exe »» |