8.1 imon-Server imond

Unterabschnitte

- 8.1.1 Least-Cost-Routing - Funktionsweise
- 8.1.2 Zur Berechnung der Onlinekosten

# 8.1 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 und anderen ü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 einem 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 Laufwerken

Admin- 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. Password- Eingabe 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 in der Datei /etc/rc.d/rc322.masq nötig.

Die Befehle

             enable/disable/dialmode   dial/hangup   route   reboot/halt

können durch die Konfigurationsvariablen IMOND_XXX global ein- oder abgeschaltet werden (s. Kapitel ``Konfiguration'').

Mit einem Unix/Linux-Rechner (oder einem Windows-Rechner in der DOS-Box) 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.

##
8.1.1 Least-Cost-Routing - Funktionsweise

imond konstruiert aus der Konfigurationsdatei /etc/imond.conf (welche wiederum beim Booten aus den Konfigurationsvariablen ISDN_CIRC_x_TIMES 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, also die enstprechenden Variablen ISDN_CIRC_x_ROUTE den Wert '0.0.0.0' haben.

Wenn die dazugehörigen Variablen ISDN_CIRC_x_TIMES folgendermaßen aussehen:

            ISDN_CIRC_1_TIMES='Mo-Fr:09-18:0.0388:N Mo-Fr:18-09:0.0248:Y
                          Sa-Su:00-24:0.0248:Y'

            ISDN_CIRC_2_TIMES='Mo-Fr:09-18:0.019:Y Mo-Fr:18-09:0.049:N
                          Sa-Su:09-18:0.019:N Sa-Su:18-09:0.049:N'

            ISDN_CIRC_3_TIMES='Mo-Fr:09-18:0.08:N Mo-Fr:18-09: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  ch-int
            Mo-Fr 09-18 ippp0   no        010280192306 Addcom      0.0388   60
            Mo-Fr 18-09 ippp0   yes       010280192306 Addcom      0.0248   60
            Sa-Su 00-24 ippp0   yes       010280192306 Addcom      0.0248   60
            Mo-Fr 09-18 ippp1   yes       019160       Compuserve  0.019   180
            Mo-Fr 18-09 ippp1   no        019160       Compuserve  0.049   180
            Sa-Su 09-18 ippp1   no        019160       Compuserve  0.019   180
            Sa-Su 18-09 ippp1   no        019160       Compuserve  0.049   180
            Mo-Fr 09-18 isdn2   no        0221xxxxxxx  Firma       0.08     90
            Mo-Fr 18-09 isdn2   no        0221xxxxxxx  Firma       0.03     90
            Sa-Su 00-24 isdn2   no        0221xxxxxxx  Firma       0.03     90

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  9 10 11 12 13 14 15 16 17 18 19 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.0190    180
          5   Compuserve               no      ippp1   0.0490    180
          6   Compuserve               no      ippp1   0.0190    180
          7   Compuserve               no      ippp1   0.0490    180
          8   Firma                    no      isdn2   0.0800     90
          9   Firma                    no      isdn2   0.0300     90
         10   Firma                    no      isdn2   0.0300     90

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 Channels, 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:59 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  9 10 11 12 13 14 15 16 17 18 19 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.0490    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.

## 8.1.2 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) ü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 90 Sekunden auf 4 Minuten (Stand Juni 00). Deshalb ist die Definition von

            ISDN_CIRC_3_CHARGEINT='90'
            ISDN_CIRC_3_TIMES='Mo-Fr:09-18:0.08:N Mo-Fr:18-09: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.

Hier ist ein Tipp, wie verschieden lange Taktzeiten dennoch richtig berücksichtigt werden können (auch wichtig für ISDN_CIRC_x_CHARGEINT): Man definiert einfach 2 Circuits, einen für tagsüber mit ISDN_CIRC_1_CHARGEINT='90' 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.

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 :-).

Das Fli4l-Team
23. Februar 2006