Subsections


3.17 Circuit-Konfiguration


3.17.1 Circuits allgemein

Der fli4l-Router erlaubt ab Version 4.0, Verbindungen nach ``außen'' flexibel über so genannte ``Circuits'' zu konfigurieren. Der Begriff ``Circuit'' kommt aus dem Englischen und bedeutet in diesem Zusammenhang so viel wie ``Leitung''. Seine Verwendung in fli4l entstammt dem Wählen und Auflegen von ISDN-Verbindungen, das seit der ersten fli4l-Version möglich ist; da ISDN ein leitungsvermittelnder (``circuit-switched'') Dienst ist, hat sich der Begriff etabliert und wird heute in allen anderen Verbindungs-Situationen verwendet, auch wenn es meistens nicht mehr um leitungsvermittelnde, sondern um paketvermittelnde Dienste geht. Auch in dieser Dokumentation wird der Begriff des Circuits durchgängig verwendet.

Ein konfigurierter Circuit erlaubt es dem fli4l-Router, irgendeine Form der Verbindung zwischen dem Router und einem anderen Netzwerk-Kommunikationspartner herzustellen. Meistens, aber nicht immer, geht es dabei um die Herstellung einer Internet-Anbindung. Im Folgenden wird eine kurze Übersicht darüber gegeben, welche Circuit-Typen der fli4l-Router beherrscht (die meisten davon werden jedoch von anderen Paketen angeboten, dies ist aber entsprechend in der Tabelle vermerkt).

Table 3.10: Verfügbare Circuit-Typen
Typ Paket OPT Beschreibung
       
route base - Mit Hilfe von route-Circuits können Routen in andere Netze konfiguriert werden. Dies entspricht im Wesentlichen der Funktionalität der Variablen IP_ROUTE_% (siehe IP_ROUTE_N), geht jedoch etwas darüber hinaus. Intern werden alle per IP_ROUTE_% konfigurierte Routen in route-Circuits abgebildet.
dhcp dhcp_client OPT_DHCP_CLIENT Mit Hilfe von dhcp-Circuits lassen sich IPv4- und IPv6-Adressinformationen von einem DHCP-Server ermitteln. Dies ist vor allem dann sinnvoll, wenn der fli4l nicht selbsttätig eine Internet-Verbindung aufbaut, sondern sich hinter einem anderen Router befindet, der dies für einen erledigt, etwa hinter einem Kabelmodem.
isdn isdn OPT_ISDN Mit Hilfe von isdn-Circuits ist eine Einwahl in ein anderes Netz (z.B. ein Firmennetz) über ISDN möglich.
ppp ppp (+ diverse) OPT_PPP (+ diverse) Mit Hilfe von ppp-Circuits ist eine Einwahl ins Internet oder ein Firmennetz über eine Reihe diverser Kanäle mit Hilfe des Point-to-Point-Protokolls (PPP) möglich. Mehr dazu ist in Abschnitt 4.17.1 zu finden.
     

Alle Circuits werden der Übersichtlichkeit halber in der Datei circuits.txt konfiguriert. Die Anzahl der konfigurierten Circuits wird dabei in der Variable CIRC_N festgehalten:

CIRC_N

Diese Variable gibt die Anzahl der konfigurierten Circuits an.

Standard-Einstellung: CIRC_N='0'

Beispiel: CIRC_N='4'

Darüber hinaus besitzt jeder Circuit, egal von welchem Typ, einige allgemeine Attribute. Zuerst operiert jeder Circuit auf einer Netzwerk-Schnittstelle. Je nach Circuit-Typ ist diese Schnittstelle statisch vorhanden (dies gilt z.B. für Ethernet-Schnittstellen wie ``eth0''), oder sie wird dynamisch beim Einwählen erzeugt (das ist z.B. bei den ``pppX''-Schnittstellen von ppp-Circuits der Fall), oder sie wird von einem anderen Circuit erzeugt und hier nur referenziert (das ist z.B. bei DHCPv6-over-PPPoE der Fall). Auf Grund dieser verschiedenen Möglichkeiten gibt es keine einheitliche Variable zur Angabe der Schnittstelle, stattdessen kümmert sich jeder Circuit-Typ selbst um die Konfiguration der Schnittstelle (und einige wie ppp verbieten die Angabe einer Schnittstelle gänzlich, da sie automatisch erzeugt und verwaltet wird).

Weitere allgemeine Attribute werden über die folgenden Variablen konfiguriert.

CIRC_x_NAME

Jeder Circuit hat einen Namen. Dieser Name kann aus Buchstaben, Ziffern und dem Bindestrich (`-') bestehen und hilft dabei, den Circuit in der Web-GUI, in Protokollen etc. zu identifizieren. Der Name muss unter allen Circuits und Circuit-Klassen (siehe CIRC_CLASS_x_NAME) eindeutig sein.

Beispiel: CIRC_x_NAME='DSL-Telekom'

CIRC_x_TYPE

Jeder Circuit hat einen Typ. Dieser Typ bestimmt, wie das Wählen und Auflegen funktioniert. Intern entscheidet der Typ, welches Skript zum Wählen und Auflegen verwendet wird.

Es sind immer nur die Typen der aktivierten Pakete verfügbar. Wenn Sie also z.B. einen dhcp-Circuit verwenden möchten, dann müssen Sie das Paket dhcp_client herunterladen und DHCP mit OPT_DHCP_CLIENT='yes' aktivieren. Andernfalls bekommen Sie bei der Verwendung des Typs ``dhcp'' beim Bauen der Installationsarchive eine Fehlermeldung.

Beispiel: CIRC_x_TYPE='dhcp'

CIRC_x_ENABLED

Die Variable CIRC_x_ENABLED aktiviert einen Circuit zur Konfigurationszeit. Damit der Circuit überhaupt Beachtung findet, muss diese Variable auf 'yes' gesetzt werden. Gilt hingegen CIRC_x_ENABLED='no', dann wird der Circuit auf dem fli4l nicht konfiguriert. Auch kann zur Konfigurationszeit der Circuits nicht mit seinem Namen angesprochen werden, etwa in Firewall-Regeln.

Standard-Einstellung: CIRC_x_ENABLED='no'

Beispiel: CIRC_x_ENABLED='yes'

CIRC_x_DIALMODE

Jeder Circuit kann einen individuellen initialen Wählmodus erhalten, der dann über diese Variable konfiguriert werden kann.

Standard-Einstellung: CIRC_x_DIALMODE='auto'

Beispiel: CIRC_x_DIALMODE='manual'

CIRC_x_NETS_IPV4_y

Ein Circuit ist nur dann sinnvoll, wenn er auch zu einer Netzanbindung führt. Dazu ist es in der Regel notwendig, dass Routen konfiguriert werden, sobald eine erfolgreiche Einwahl stattgefunden hat. Welche IPv4-Netze über den Circuit geroutet werden, kann über diese Variablen festgelegt werden.

Im häufigsten Fall der Circuit-Nutzung, der Internet-Anbindung, muss die Default-Route über den Circuit gehen. Dazu muss das Netz 0.0.0.0/0 in die Liste eingetragen werden.

Nur in Ausnahmefällen müssen keine Netze angegeben werden, etwa bei Server-Circuits, bei denen keine Routen zurück zu den Clients installiert werden sollen.

Standard-Einstellung: CIRC_x_NETS_IPV4_N='0'

Beispiel 1:

    CIRC_x_NETS_IPV4_N='1'
    CIRC_x_NETS_IPV4_1='0.0.0.0/0'

Beispiel 2:

    CIRC_x_NETS_IPV4_N='2'
    CIRC_x_NETS_IPV4_1='10.15.16.0/24'
    CIRC_x_NETS_IPV4_2='10.16.0.0/16'

CIRC_x_NETS_IPV6_y

Hier werden analog zu CIRC_x_NETS_IPV4_y IPv6-Netze angegeben, die nach der Einwahl über den Circuit geroutet werden sollen. Diese Variablen können nur bei aktivierter IPv6-Unterstützung (Paket ipv6, OPT_IPV6='yes') verwendet werden.

Im häufigsten Fall der Circuit-Nutzung, der Internet-Anbindung, muss die Default-Route über den Circuit gehen. Dazu muss das Netz ::/0 in die Liste eingetragen werden.

Nur in Ausnahmefällen müssen keine Netze angegeben werden, etwa bei Server-Circuits, bei denen keine Routen zurück zu den Clients installiert werden sollen.

Standard-Einstellung: CIRC_x_NETS_IPV6_N='0'

Beispiel 1:

    CIRC_x_NETS_IPV6_N='1'
    CIRC_x_NETS_IPV6_1='::/0'

Beispiel 2:

    CIRC_x_NETS_IPV6_N='2'
    CIRC_x_NETS_IPV6_1='2001:db8:1::/48'
    CIRC_x_NETS_IPV6_2='2001:db8:2::/48'

CIRC_x_PROTOCOLS

In der Regel werden die Layer-3-Protokolle, die von einem Circuit unterstützt werden (IPv4 oder IPv6) aus den konfigurierten Netzen (CIRC_x_NETS_IPV4_y und CIRC_x_NETS_IPV6_y, siehe oben) abgeleitet. In manchen Fällen werden jedoch keine Netze angegeben, weil keine Routen aufgebaut werden sollen. Dies ist beispielsweise bei Server-Circuits der Fall. In solchen Fällen ist es nötig, die zu verwendenden Layer-3-Protokolle explizit einzustellen. Dazu wird in dieser Variable eine Liste von Protokollen notiert, die durch Leerzeichen voneinander getrennt sind. Erlaubte Protokolle sind ipv4 und ipv6.

Standard-Einstellung: abgeleitet aus CIRC_x_NETS_IPV4_y und CIRC_x_NETS_IPV6_y

Beispiel: CIRC_x_PROTOCOLS='ipv4 ipv6'

CIRC_x_UP

Ist CIRC_x_UP='yes', dann wird der entsprechende Circuit beim Booten aktiviert. Je nach Wählmodus kann dies bereits beim Booten zu einer Einwahl führen, oder die Einwahl kann später über die GUI oder das fli4lctrl-Programm veranlasst werden. Bei CIRC_x_UP='no' muss der Circuit erst mit Hilfe der GUI oder mit dem fli4lctrl-Programm aktiviert werden, bevor eine Einwahl gestartet werden kann.

Falls Circuits aktiviert werden, die sich in einem oder mehreren gerouteten Netzen überlappen, ist dies ein Fehler, der bereits beim Versuch, das Installationsarchiv zu bauen, von mkfli4l gemeldet wird.3.9

Diese Einstellung ist nur relevant mit OPT_CIRCD='no'.

Standard-Einstellung: CIRC_x_UP='no'

Beispiel: CIRC_x_UP='yes'

CIRC_x_PRIORITY

Diese Variable gibt die Priorität des Circuits an. Höhere Werte bedeuten eine niedrigere Priorität. Prioritäten dienen dazu, Circuits nach Eignung zu gruppieren: Bei der Auswahl von Circuits3.10 werden alle Circuits prioritätsweise abgearbeitet. Nur wenn in der höchsten Prioritätsklasse keine Circuits in Frage kommen, kommen die Circuits der nächstniedrigeren Prioritätsklasse zum Zuge. Mehr zum Auswahlalgorithmus des cird finden Sie im Abschnitt ``Das Programm circd''.

Diese Einstellung ist nur relevant mit OPT_CIRCD='yes'.

Standard-Einstellung: CIRC_x_PRIORITY='1'

Beispiel: CIRC_x_PRIORITY='2'

CIRC_x_TIMES

Ist OPT_CIRCD='yes', dann enthält diese Variable eine Zeitspezifikation, die angibt, wann der Circuit aktiviert werden soll und wann nicht, und wie viel der Circuit bei einer erfolgreichen Einwahl pro Minute kostet. Dadurch wird es möglich, zu verschiedenen Zeiten verschiedene Circuits zu verwenden (Least-Cost-Routing). Dabei kontrolliert der Dämon-Prozess circd das Aktivieren und Deaktivieren der Circuits.

Der Inhalt der Variablen ist wie folgt aufgebaut:

    CIRC_x_TIMES='W1-W2:hh-hh:Kosten:Typ [W1-W2:hh-hh:Kosten:Typ [...]]'

Jedes Feld besteht aus vier Unterfeldern, die mit Hilfe eines Doppelpunkts (':') voneinander getrennt sind:

Standard-Einstellung: CIRC_2_TIMES='Mo-Su:00-24:0.0:N'

Beispiel 1:

    CIRC_1_TIMES='Mo-Fr:09-18:0.049:N Mo-Fr:18-09:0.044:L Sa-Su:00-24:0.039:Y'

Beispiel 2 für diejenigen, die eine Flatrate nutzen:

    CIRC_2_TIMES='Mo-Su:00-24:0.0:Y'


Wichtig: Wenn die Zeitbereiche aller aktivierten Circuits mit einer Default-Route zusammengenommen nicht die komplette Woche beinhalten, gibt es zu diesen Lückenzeiten keine Default-Route. Damit ist dann das Surfen im Internet zu diesen Zeiten ausgeschlossen!

Und noch eine letzte Bemerkung: Feiertage werden wie Sonntage behandelt.

CIRC_x_CHARGEINT

Mit dieser Variable wird der Zeittakt in Sekunden angegeben. Dieser wird dann für die Kosten-Berechnung verwendet.

Die meisten Provider rechnen minutengenau ab. In diesem Fall ist der Wert '60' richtig. Bei Providern mit sekundengenauer Abrechnung setzt man die Variable entsprechend auf '1'.

Diese Variable ist nur möglich bzw. sinnvoll bei Circuits, die tatsächlich Kosten verursachen. Bei Circuits, die keine Einwahl im herkömmlichen Sinne durchführen (route, dhcp), ist diese Einstellung nicht möglich.

Standard-Einstellung: CIRC_x_CHARGEINT='0'

Beispiel: CIRC_x_CHARGEINT='60'

CIRC_x_HUP_TIMEOUT

Hier kann die Zeit in Sekunden angegeben werden, nach welcher die Verbindung beendet werden soll, wenn kein Datenverkehr mehr über den Circuit läuft. Dabei steht ein Timeout von '0' für ``kein Timeout'', d.h. der Router legt nicht auf und wählt sich nach einem Zwangsauflegen auch sofort wieder neu ein.

Momentan wird ein Hangup-Timeout > 0 nur für ppp-Circuits unterstützt.

Diese Eigenschaft unterscheidet generell zwischen ``normalen'' Circuits, die sich bei der fli4lctrl dial-Operation sofort einwählen (Hangup-Timeout gleich null), und ``dial-on-demand''-Circuits, die nach der fli4lctrl dial-Operation nur bereit für eine (kommende) Einwahl sind (Hangup-Timeout größer null). Mehr Informationen hierzu finden sich in den Abschnitten ``Circuit-Zustände'' und ``Das Programm fli4lctrl''.

Standard-Einstellung: CIRC_x_HUP_TIMEOUT='0'

Beispiel: CIRC_x_HUP_TIMEOUT='600'

CIRC_x_USEPEERDNS

Hiermit wird festgelegt, ob die vom Provider bei der Einwahl übergebenen DNS-Namensserver für die Dauer der Verbindung in die Konfigurationsdatei des lokalen DNS-Servers (dnsmasq) eingetragen werden sollen.

Sinnvoll ist die Nutzung dieser Option also nur bei Circuits, die entsprechende Informationen liefern. Dies betrifft i.d.R. Internet-Anbindungen via PPP und DHCP-Circuits.

Diese Option bietet den Vorteil, immer mit den am nächsten liegenden DNS-Namensservern arbeiten zu können, sofern der Provider die korrekten IP-Adressen übermittelt - dadurch geht die Namensauflösung schneller.

Im Falle eines Ausfalls eines DNS-Servers beim Provider werden in der Regel die übergebenen DNS-Server-Adressen sehr schnell vom Provider korrigiert.

Trotz allem ist vor jeder ersten Einwahl die Angabe eines gültigen Namensservers in DNS_FORWARDERS zwingend erforderlich, da sonst die erste Anfrage nicht korrekt aufgelöst werden kann. Außerdem wird beim Beenden der Verbindung die originale Konfiguration des lokalen Namensservers wieder hergestellt.

Standard-Einstellung: CIRC_x_USEPEERDNS='no'

Beispiel: CIRC_x_USEPEERDNS='yes'

CIRC_x_WAIT

In der Regel wird das Wählen eines Circuits im Hintergrund durchgeführt. Will man jedoch beim Booten sicherstellen, dass sich ein Circuit erfolgreich eingewählt hat, kann man diese Variable auf die Anzahl der maximal zu wartenden Sekunden setzen. Bei `0' wird nicht gewartet.

Ein Wert größer null kann bei ppp-Circuits (d.h. wenn CIRC_x_TYPE='ppp' gesetzt ist) nur verwendet werden, wenn es sich um keinen Dial-on-demand-Circuit handelt, wenn also CIRC_x_HUP_TIMEOUT='0' gesetzt ist (bzw. die Variable gar nicht definiert wird). Der Grund hierfür ist, dass ein Warten auf einen Dial-on-demand-Circuit wenig Sinn hat, weil der Wählvorgang erst bei entsprechender Netzwerkaktivität erfolgt.

Standard-Einstellung: CIRC_x_WAIT='0'

Beispiel: CIRC_x_WAIT='15'

CIRC_x_DEBUG

Mit dieser Variable können zusätzliche Debug-Ausgaben eingeschaltet werden. Dies ist Circuit-spezifisch und hat nicht zwangsläufig bei jedem Circuit-Typ sichtbare Auswirkungen.

Standard-Einstellung: CIRC_x_DEBUG='no'

Beispiel: CIRC_x_DEBUG='yes'

CIRC_x_DEPS

Mit dieser Variable können Abhängigkeiten zwischen Circuits spezifiziert werden. Ein Circuit A, der von einem Circuit B abhängig ist, kann nur dann online gehen, wenn Circuit B ebenfalls online ist. Dies ist insbesondere dann nützlich, wenn Circuit A über seine Netzanbindung Infrastruktur zur Verfügung stellt, die Circuit B benötigt, etwa wenn Circuit A eine IPv4-Internetanbindung herstellt und Circuit B einen 6in4-Tunnel aufbaut.

Standard-Einstellung: CIRC_x_DEPS=''

Beispiel 1: CIRC_x_DEPS='internet'

Gelegentlich muss nicht der gesamte Circuit mit all seinen konfigurierten Layer-3-Protokollen online sein, damit eine Abhängigkeit erfüllt ist, sondern nur ein bestimmtes Protokoll, z.B. IPv4 oder IPv6. In diesem Fall kann man das Protokoll hinter dem Circuit angeben, mit einem Schrägstrich abgetrennt. Das folgende Beispiel zeigt eine Abhängigkeit zu einem Tag oder Circuit namens ``internet'', wobei es ausreicht, wenn dessen IPv4-Anbindung online ist. Dies ist z.B. für 6in4-Tunnel völlig ausreichend, denn die IPv6-Konnektivität spielt bei 6in4 naturgemäß keine Rolle (schließlich stellt ein 6in4-Tunnel gerade eine IPv6-Anbindung über eine IPv4-Anbindung her).

Beispiel 2: CIRC_x_DEPS='internet/ipv4'

CIRC_x_CLASS_y

Mit diesen Variablen können einem Circuit Klassen zugeordnet werden. Durch Klassen sich Circuits logisch gruppieren, es wird somit eine Abstraktion geschaffen, die auf vielfältige Weise ausgenutzt werden kann. Eine mögliche Anwendung ist die Nutzung innerhalb von Abhängigkeiten zwischen Circuits (CIRC_x_DEPS, siehe oben), wenn mehrere Circuits eine Abhängigkeit erfüllen können.

Jede hier angegebene Klasse muss via CIRC_CLASS_x_NAME definiert werden. Ist dies nicht der Fall, wird eine Fehlermeldung ausgegeben.

Standard-Einstellung: CIRC_x_CLASS_N='0'

Beispiel:

    CIRC_1_NAME='DHCP-LAN'
    CIRC_1_TYPE='dhcp'
    CIRC_1_ENABLED='yes'
    CIRC_1_DHCP_DEV='eth0'
    CIRC_1_NETS_IPV4_N='1'
    CIRC_1_NETS_IPV4_1='0.0.0.0/0'
    CIRC_1_CLASS_N='1'
    CIRC_1_CLASS_1='internet-v4'

    CIRC_2_NAME='DSL-Telekom'
    CIRC_2_TYPE='ppp'
    CIRC_2_ENABLED='yes'
    CIRC_2_PPP_TYPE='ethernet'
    CIRC_2_PPP_USERID='anonymer'
    CIRC_2_PPP_PASSWORD='surfer'
    CIRC_2_PPP_ETHERNET_TYPE='kernel'
    CIRC_2_PPP_ETHERNET_DEV='eth1'
    CIRC_2_NETS_IPV4_N='1'
    CIRC_2_NETS_IPV4_1='0.0.0.0/0'
    CIRC_2_CLASS_N='1'
    CIRC_2_CLASS_1='internet-v4'

    CIRC_3_NAME='IPv6-Tunnel'
    CIRC_3_TYPE='tun6in4-he'
    CIRC_3_ENABLED='yes'
    CIRC_3_NETS_IPV6_N='1'
    CIRC_3_NETS_IPV6_1='::/0'
    CIRC_3_CLASS_N='1'
    CIRC_3_CLASS_1='internet-v6'
    CIRC_3_DEPS='internet-v4'

In diesem Beispiel ist ein 6in4-HE-Tunnel (siehe Paket ipv6) abhängig von einem Circuit der Klasse ``internet-v4''. Ob das zur Laufzeit dann die DSL- (siehe Paket dsl) oder DHCP-Anbindung (siehe Paket dhcp_client) ist, ist egal - sobald einer der beiden Circuits online ist, kann der Tunnel ebenfalls online gehen.

CIRC_x_BUNDLE

Ist CIRC_x_BUNDLE nicht leer und referenziert es einen anderen gültigen Circuit, dann wird der referenzierende Circuit Teil eines so genannten ``Bündels''. Gebündelte Circuits bilden zusammen eine logische Verbindung. Dies wird momentan nur vom Paket ppp unterstützt, siehe Abschnitt ``Multilink PPP''.

Beispiel: CIRC_x_BUNDLE='internet-mp'


3.17.2 Circuit-Zustände

Jeder Circuit hat, während der Router läuft, einen der folgenden Zustände:

Table 3.11: Circuit-Zustände
Zustand Interner Name Beschreibung
     
inaktiv inactive Ein Circuit ist inaktiv, wenn er nicht zur Einwahl herangezogen werden kann.
aktiv active Ein Circuit ist aktiv, wenn er zur Einwahl herangezogen werden kann.
bereit ready Ein Circuit ist bereit, wenn er sich bei Netzwerk-Aktivität automatisch einwählt (``dial-on-demand'').
online online Ein Circuit ist online, wenn die Verbindung erfolgreich aufgebaut werden konnte und die Netzwerk-Anbindung erfolgt ist.
ausgefallen failed Ein Circuit ist ausgefallen, wenn festgestellt wurde, dass die Verbindung über diesen Circuit nicht funktioniert. Dieser Zustand entspricht fast komplett dem Zustand inaktiv, mit dem einzigen Unterschied, dass ein ausgefallener Zustand von circd ignoriert wird (siehe hierzu den Abschnitt ``Das Programm circd''). Dieser Zustand ist somit vor allem für einen automatisierten Fallback-Mechanismus gedacht.
   

Die Übergänge zwischen diesen Zuständen werden teilweise mit fli4lctrl durchgeführt, teilweise erfolgen sie automatisch. Ihre Bedeutung ist wie folgt:

Table 3.12: Circuit-Zustandsübergänge
Zustandsübergang Beschreibung
   
inaktiv aktiv Ein Circuit wird aktiviert und kann sich je nach Wählmodus manuell oder automatisch einwählen. Zu diesem Zeitpunkt können noch keine Daten über den Circuit transportiert werden.

Dieser Zustandsübergang kann in allen Wählmodi erfolgen. Er wird durch fli4lctrl up ausgelöst.

aktiv bereit Ein aktiver Circuit wird in den Zustand bereit versetzt, in dem eine Einwahl auf Grund von Netzwerk-Aktivität möglich ist. Zu diesem Zeitpunkt können noch keine Daten über den Circuit transportiert werden. In der Regel werden bei diesem Zustandsübergang Hintergrundprozesse gestartet, die für die folgenden Zustandsübergänge verantwortlich sind.

Im Wählmodus auto erfolgt dieser Zustandsübergang direkt nach dem Übergang inaktiv aktiv oder bereit aktiv. Im Wählmodus manual muss dieser Zustandsübergang explizit durch fli4lctrl dial ausgelöst werden. Im Wählmodus off ist dieser Zustandsübergang nicht möglich.

bereit online Über den Circuit im Zustand bereit findet eine Einwahl statt. Nach deren erfolgreichem Abschluss können Daten über den Circuit transportiert werden, sofern für den Circuit entsprechende zu routende Netze (siehe CIRC_x_NETS_IPV4_y und CIRC_x_NETS_IPV6_y) konfiguriert sind.

Je nach Hangup-Timeout erfolgt dieser Zustandsübergang direkt nach dem Zustandsübergang aktiv bereit (Hangup-Timeout = 0), oder er wird durch eine Netzwerk-Aktivität ausgelöst (Hangup-Timeout > 0).

online bereit Die Wählverbindung wird beendet und die Netzwerk-Anbindung abgebaut. Danach können keine Daten mehr über den Circuit transportiert werden.

Je nach Hangup-Timeout wird dieser Zustandsübergang entweder explizit vom Benutzer via fli4lctrl hangup angefordert (Hangup-Timeout = 0), oder er erfolgt automatisch nach einer gewissen Zeitspanne der Netzwerk-Inaktivität (Hangup-Timeout > 0).

bereit aktiv Ein Circuit im Zustand bereit wird wieder in den Zustand aktiv versetzt. Danach ist eine automatische (Wieder-)Einwahl auf Grund von Netzwerkaktivität nicht mehr möglich. In der Regel werden bei diesem Zustandsübergang Hintergrundprozesse beendet, die beim Zustandsübergang aktiv bereit gestartet wurden.

Im Wählmodus manual erfolgt dieser Zustandsübergang direkt nach dem Übergang online bereit. Im Wählmodus auto muss dieser Zustandsübergang explizit durch fli4lctrl hangup ausgelöst werden. (Auf Grund der Semantik vom Wählmodus auto wird sofort wieder in den Zustand bereit gewechselt, siehe die Beschreibung von aktiv bereit weiter oben.)

aktiv inaktiv Ein Circuit wird deaktiviert und kann künftig nicht mehr zur Einwahl herangezogen werden.

Dieser Zustandsübergang kann in allen Wählmodi erfolgen. Er wird durch fli4lctrl down ausgelöst.

 

Nicht jeder Circuit unterscheidet effektiv zwischen bereit und online. So fallen diese Konzepte z.B. bei DHCP zusammen, weil es dort nicht möglich ist, einen Hangup-Timeout > 0 zu konfigurieren.


3.17.3 Wählmodus (DIALMODE)

Der Wählmodus steuert, ob und auf welche Art und Weise der fli4l-Router für die Einwahl verantwortlich ist. Der Wählmodus ist zum einen eine globale Eigenschaft, die das generelle Wählverhalten des fli4l kontrolliert. Es gibt drei Varianten:

Table 3.13: Verfügbare Wählmodi
Wählmodus Beschreibung
   
off In diesem Modus sind alle Circuits inaktiv oder aktiv. Der fli4l wählt weder von alleine (Netzwerkaktivität, circd etc.) noch auf Benutzerwunsch (fli4lctrl dial, WebGUI etc.).
manual In diesem Modus können aktive Circuits auf explizite Benutzeranfrage (via fli4ctrl dial oder über die WebGUI) in den Zustand online wechseln. Sowohl bei fli4lctrl hangup als auch bei einem konfigurierten Hangup-Timeout > 0 und entsprechend langer Netzwerk-Inaktivität wird aufgelegt, der Circuit wechselt dabei wieder in den Zustand aktiv.

In diesem Wählmodus ignoriert circd die Zeitspezifikationen und schaltet keine Circuits um.

auto In diesem Modus werden aktive Circuits automatisch in den Zustand bereit versetzt. Je nach konfiguriertem Hangup-Timeout wechselt ein solcher Circuit entweder sofort (Hangup-Timeout = 0) oder erst bei Bedarf (Hangup-Timeout > 0) in den Zustand online, nämlich wenn Netzwerk-Aktivität verzeichnet wird. Bei einem konfigurierten Hangup-Timeout > 0 wird bei entsprechend langer Netzwerk-Inaktivität aufgelegt, der Circuit wechselt dabei wieder in den Zustand bereit. Der Befehl fli4lctrl dial steuert hierbei nicht direkt die Einwahl, sondern nur, ob der Circuit bereit oder nicht bereit (d.h. nur aktiv) ist. Bei externen Verbindungsabbrüchen oder beim expliziten Auflegen wird danach gleich wieder eine erneute Einwahl versucht.

In diesem Wählmodus schaltet circd je nach Zeitspezifikation die Circuits automatisch um. Ausgefallene Circuits werden dabei jedoch ignoriert.

 

Sowohl im Wählmodus manual als auch im Wählmodus auto muss ein Circuit via fli4lctrl up aktiviert werden, bevor er (automatisch oder manuell via fli4lctrl dial) in den Zustand bereit wechseln kann.

Zum anderen ist der Wählmodus eine lokale Eigenschaft, die pro Circuit verwaltet wird. Der effektive Wählmodus ist dann das Minimum beider Wählmodi, mit der Ordnung off < manual < auto. Damit lässt sich z.B. erreichen, dass Circuits generell automatisch (z.B. ins Internet), einige Circuits (z.B. in die Firma) aber nur manuell gewählt werden; ein schnelles Auflegen aller Circuits ist weiterhin durch das Ändern des globalen Wählmodus auf off einfach zu realisieren.

Der lokale Wählmodus eines jeden Circuits ist, sofern nicht explizit via CIRC_x_DIALMODE anders konfiguriert, initial ``auto'', so dass anfangs nur der globale Wählmodus eine Rolle spielt.

DIALMODE

Mit dieser Variable wird der initiale globale Wählmodus beim Booten festgelegt. Eine Änderung ist im Nachhinein mit Hilfe des fli4lctrl-Programms, der WebGUI oder dem imon-Client möglich.

Standard-Einstellung: DIALMODE='auto'

Beispiel: DIALMODE='manual'


3.17.4 Circuit-Klassen

Circuit-Klassen bieten eine Möglichkeit, ``artverwandte'' Circuits zu gruppieren. Wenn man z.B. mehrere Möglichkeiten der Anbindung des Routers ans Internet hat, so ist doch all diesen Circuits die Default-Route gemeinsam, d.h. dass CIRC_x_NETS_IPV4_y='0.0.0.0/0' (für IPv4) bzw. CIRC_x_NETS_IPV6_y='::/0' (für IPv6) gilt. Dies kann man ``herausmultiplizieren'' und daraus eine eigene Klasse definieren, die man z.B. sinnigerweise ``Internet'' nennt:

CIRC_CLASS_N='1'
CIRC_CLASS_1_NAME='Internet'
CIRC_CLASS_1_NETS_IPV4_N='1'         # Circuits dieser Klasse installieren die
CIRC_CLASS_1_NETS_IPV4_1='0.0.0.0/0' # Default-Route für IPv4...
CIRC_CLASS_1_NETS_IPV6_N='1'
CIRC_CLASS_1_NETS_IPV6_1='::/0'      # ...und für IPv6

Ein Circuit kann dieser Klasse ``Internet'' mit Hilfe der Variable CIRC_x_CLASS_y zugeordnet werden.

Neben Routen können auch Firewall-Regeln in einer Klasse sinnvoll sein. So kann z.B. eine Port-Weiterleitung zentral für alle Internet-Circuits in der Klasse ``Internet'' konfiguriert werden:

# Fortsetzung von oben
CIRC_CLASS_1_PF_PREROUTING_N='1'
CIRC_CLASS_1_PF_PREROUTING_1='tmpl:http DNAT:@web-server'
CIRC_CLASS_1_PF_FORWARD_N='1'
CIRC_CLASS_1_PF_FORWARD_1='tmpl:http @web-server ACCEPT'

Diese Regeln sind dann für alle Circuits gültig, die zur Klasse ``Internet'' gehören.

CIRC_CLASS_N

Diese Variable gibt die Anzahl der konfigurierten Circuit-Klassen an.

Standard-Einstellung: CIRC_CLASS_N='0'

Beispiel: CIRC_CLASS_N='2'

CIRC_CLASS_x_NAME

Jede Circuit-Klasse hat einen Namen. Dieser Name kann aus Buchstaben, Ziffern und dem Bindestrich (`-') bestehen. Der Name muss unter allen Circuits (siehe CIRC_x_NAME) und Circuit-Klassen eindeutig sein.

Beispiel: CIRC_CLASS_x_NAME='Internet'


3.17.5 Das Programm fli4lctrl

Das Programm fli4lctrl ist der Zugang zum Circuit-System über die Kommandozeile. Es kann verwendet werden, um die Zustandsübergänge der Circuits herbeizuführen und um den Wählmodus zu verändern. Die möglichen Befehle lauten:

Table 3.14: fli4lctrl-Befehle
Kommando Beschreibung
   
up <Circuit> Der Circuit wird vom Zustand inaktiv in den Zustand aktiv überführt. Im Wählmodus auto schließt sich unmittelbar ein dial <Circuit> an, s.u.
dial <Circuit> Der Circuit wird vom Zustand aktiv in den Zustand bereit überführt. Bei einem Hangup-Timeout = 0 folgt unmittelbar ein Wählvorgang mit dem Ziel, den Circuit in den Zustand online zu überführen. Bei einem Hangup-Timeout > 0 wird nicht sofort gewählt, sondern auf entsprechende Netzwerk-Aktivität gewartet.

Im Wählmodus off wird das Kommando ignoriert.

autodial <Circuit> Der Circuit wird genauso wie beim Befehl fli4lctrl dial vom Zustand aktiv in den Zustand bereit versetzt, aber nur, wenn der effektive Wählmodus des Circuits auto ist. In allen anderen Fällen wird der Befehl ignoriert.
dial Es findet die Initiierung der Einwahl auf allen aktiven Circuits statt.
hangup <Circuit> Der Circuit wird von den Zuständen online und bereit in den Zustand aktiv überführt. Im Wählmodus auto erfolgt anschließend ein dial <Circuit>.
hangup Es findet ein Auflegen aller Circuits statt, die in den Zuständen bereit oder online sind.
down <Circuit> Der Circuit wird von allen anderen Zuständen in den Zustand inaktiv überführt, unabhängig vom Wählmodus.

Falls der Circuit vorher im Zustand bereit oder online war, wird vorher ein hangup <Circuit> ausgeführt, s.o.

fail <Circuit> Der Circuit wird von allen anderen Zuständen in den Zustand ausgefallen überführt, unabhängig vom Wählmodus.

Falls der Circuit vorher im Zustand bereit oder online war, wird vorher ein hangup <Circuit> ausgeführt, s.o.

dialmode global <Wählmodus> Der angegebene Wählmodus wird global eingestellt. Pro Circuit wird der effektive Wählmodus als Minimum des globalen und lokalen (s.u.) Wählmodus bestimmt. Folgende Zustandsübergänge finden statt:

  • Ein effektiver Moduswechsel * off impliziert ein hangup auf allen Circuits in den Zuständen bereit oder online (dies entspricht somit einem fli4lctrl hangup).
  • Ein effektiver Moduswechsel * manual impliziert ein hangup auf allen Circuits im Zustand bereit. Circuits im Zustand online legen nicht auf; hier greift der neue Wählmodus erst nach dem nächsten Auflegen.
  • Ein effektiver Moduswechsel * auto impliziert ein dial auf allen aktiven Circuits (dies entspricht somit einem fli4lctrl dial).
dialmode local <Circuit> <Wählmodus> Der angegebene Wählmodus wird lokal für den Circuit eingestellt. Für die sich daraus ergebenden Zustandsänderungen siehe oben.
 

Table 3.15: fli4lctrl-Statusbefehle
Kommando Beschreibung
   
status <Circuit> Es wird der aktuelle Zustand des zugehörigen Circuits ausgegeben.
status Der aktuelle Online-Status des Routers wird ausgegeben. Der Rückgabecode ist 0, falls der Router online ist, und 1, falls er offline ist oder ein Fehler aufgetreten ist. Wann genau der Router online ist, wird im Abschnitt Wann ist mein Router online? erläutert.
dialmode global Der aktuelle globale Wählmodus wird zurückgegeben.
dialmode local <Circuit> Der aktuelle lokale Wählmodus für den angegebenen Circuit wird zurückgegeben.
dialmode effective <Circuit> Der aktuelle effektive Wählmodus für den angegebenen Circuit wird zurückgegeben.
list states Eine Liste aller Circuits mit den zugehörigen Zuständen wird ausgegeben.
list dialmodes Eine Liste aller Circuits mit den zugehörigen lokalen und effektiven Wählmodi wird ausgegeben.
list classes Eine Liste aller Circuits mit den zugehörigen Klassen wird ausgegeben.
list deps Eine Liste aller Circuits mit den zugehörigen Abhängigkeiten wird ausgegeben. Erfüllte Abhängigkeiten werden entsprechend markiert.
show Ein Alias für list states.
 

Zu beachten ist, dass statt des Identifikators eines Circuits (z.B. ``circ1'') alternativ auch

verwendet werden kann.


3.17.6 Das Programm circd

Der circd ist ein Dämon, der anhand von Zeit-Spezifikationen Circuits automatisch im Hintergrund umschaltet. Dabei werden neben der Zeit- und Kosten-Spezifikation (CIRC_x_TIMES) auch die Priorität eines Circuits (CIRC_x_PRIORITY) sowie dessen Zustand (ausgefallen oder nicht) berücksichtigt.

Für einen beliebigen Zeitpunkt funktioniert das Auswählen wie folgt:

  1. Zuerst werden alle Circuits gesucht, die für den betreffenden Zeitpunkt aktiviert sind (Typ `Y').
  2. Aus dieser Menge werden zuerst all jene betrachtet, die zur höchsten verwendeten Prioritätsklasse gehören (deren CIRC_x_PRIORITY-Wert also am niedrigsten ist).
  3. Aus dieser Menge werden alle Circuits entfernt, die nicht nutzbar sind, die also im Zustand ausgefallen sind.
  4. Wenn die resultierende Menge nicht leer ist, ist der Algorithmus beendet, und die resultierenden Circuits werden ausgewählt. Wenn die resultierende Menge leer ist, werden die Schritte 2 und 3 für die nächst niedrigere Prioritätsklasse wiederholt.
  5. Falls alle via `Y' aktivierten Circuits nicht nutzbar sind, werden alle Circuits gesucht, die für den betreffenden Zeitpunkt als LCR-Circuits vorgemerkt sind (Typ `L').
  6. Aus dieser Menge werden zuerst all jene betrachtet, die zur höchsten verwendeten Prioritätsklasse gehören (deren CIRC_x_PRIORITY-Wert also am niedrigsten ist).
  7. Aus dieser Menge werden alle Circuits entfernt, die nicht nutzbar sind, die also im Zustand ausgefallen sind.
  8. Aus dieser Menge werden diejenigen Circuits bestimmt, die am wenigsten kosten.
  9. Wenn die resultierende Menge nicht leer ist, ist der Algorithmus beendet, und die resultierenden Circuits werden ausgewählt. Wenn die resultierende Menge leer ist, werden die Schritte 6 bis 8 für die nächst niedrigere Prioritätsklasse wiederholt.
  10. Falls danach immer noch keine Circuits übrig bleiben, wird kein Circuit ausgewählt.

Einige Anmerkungen zum Algorithmus:


3.17.7 Wann ist mein Router online?

Was auf den ersten Blick trivial erscheint, ist auf den zweiten Blick eine recht knifflige Frage: Wann ist ein fli4l-Router ``online''? Ist nur ein Circuit definiert, ist die Frage relativ einfach zu beantworten: Der Router ist genau dann online, wenn der Circuit im Zustand online ist. Bei mehreren Circuits, die verschiedene Netze routen, sich teilweise gegenseitig ausschließen und auch u.U. keine Wählverbindung eingehen ist die Frage schon schwieriger zu beantworten. Auch einige auf der Hand liegende Ansätze liefern nicht immer die gewünschte Antwort:

  1. Der Router ist online, wenn mindestens ein Circuit online ist. Diese Regelung ist ungünstig, weil bereits die Existenz einer einzigen Route den Router in den Zustand online versetzt, da Routen intern über Circuits abgewickelt werden. Und ein Router ohne Routen ist nicht sehr interessant...
  2. Der Router ist online, wenn alle Circuits online sind. Diese Regelung ist immer dann falsch, wenn sich Circuits gegenseitig ausschließen, wenn also beispielsweise zwei DSL-Circuits konfiguriert werden, die beide eine Internet-Anbindung herstellen und deshalb nicht parallel aktiviert werden können.
  3. Der Router ist online, wenn alle Dialup-Circuits online sind. Diese Regelung ist besser als Regelung 1, weil sie Route-Circuits ausschließt, aber auch sie löst nicht das Problem der sich ausschließenden Circuits.
  4. Der Router ist online, wenn mindestens ein Dialup-Circuit online ist. Dies versetzt den Router in den Zustand online, wenn z.B. zwar eine Wählverbindung in die Firma besteht, aber die Internet-Verbindung inaktiv ist. Das kann gewünscht sein, muss aber nicht.
  5. Der Router ist online, wenn ein Circuit mit Default-Route online ist. Diese Regelung entspricht dem Zustand vor fli4l 4.0. Dies versetzt den Router in den Zustand offline, wenn eine Wählverbindung in die Firma besteht, aber die Internet-Verbindung inaktiv ist. Das kann gewünscht sein, muss aber nicht.
  6. Der Router ist online, wenn für jedes konfigurierte, zu routende Netz ein Circuit online ist. Auch diese Regelung versetzt den Router in den Zustand offline, wenn eine Wählverbindung in die Firma besteht, aber die Internet-Verbindung inaktiv ist. Das kann gewünscht sein, muss aber nicht.

Anstatt nun eine feste Regel vorzugeben und im Zweifelsfall genau das zu tun, was der Benutzer nicht erwartet, wurde ein zweistufiges Verfahren gewählt. Der Standard-Fall wählt die rückwärtskompatible Regelung 5. Alternativ kann über die Variable CIRC_ONLINE eine Menge von Circuits (oder Circuit-Schlagwörtern) spezifiziert werden, die für die Online-Bewertung berücksichtigt werden sollen. Sollen also sowohl Internet- als auch Firma-Anbindungen berücksichtigt werden, und werden die entsprechenden Circuits mit den Schlagwörtern ``internet'' und ``firma'' gekennzeichnet, so ist bei CIRC_ONLINE='internet firma' der Router online, wenn der ``internet''- oder der ``firma''-Circuit (oder beide) online sind; bei CIRC_ONLINE='internet' hat der Router den Zustand offline, wenn keine Internet-Verbindung aktiv ist, unabhängig davon, ob eine Verbindung zur Firma besteht oder nicht.

CIRC_ONLINE

Diese Variable beinhaltet eine Liste von Circuits (oder Schlagwörtern), die bei der Bestimmung des Online-Zustands des Routers berücksichtigt werden. Ist die Variable vorhanden und die Liste nicht leer, ist der Router genau dann online, wenn mindestens ein Circuit aus der Liste online ist bzw. wenn mindestens ein Schlagwort aus der Liste aktiv ist. Ist die Liste leer oder die Variable nicht vorhanden, greift die rückwärtskompatible Regelung, nach welcher der Router online ist, wenn die Default-Route aktiv ist.

Standard-Einstellung: CIRC_ONLINE=''

3.17.8 Sonstige Einstellungen

IP_DYN_ADDR

Wird eine Verbindung mit dynamischer Adressvergabe verwendet, ist IP_DYN_ADDR auf `yes' zu stellen, ansonsten auf `no'. Die meisten Internet-Provider verwenden eine dynamische Adressvergabe.

Standard-Einstellung: IP_DYN_ADDR='yes'

OPT_CIRCUIT_STATUS

Diese Variable aktiviert einen Circuit-Status-Monitor auf der dritten fli4l-Console. Diese lässt sich mit der Tastenkombination Alt+F3 aktivieren, ein Wechseln zurück zur Login-Konsole wird mit Hilfe der Tastenkombination Alt+F1 bewerkstelligt. Der Monitor zeigt jeden Circuit mit Namen, Typ, Alias, Schnittstelle und Status an.

Standard-Einstellung: OPT_CIRCUIT_STATUS='no'

Beispiel: OPT_CIRCUIT_STATUS='yes'



Footnotes

... wird.3.9
In einer späteren Version ist angedacht, in einem solchen Fall den Datenverkehr für diese Netze gleichmäßig auf alle diese Circuits zu verteilen.
... Circuits3.10
durch den Hintergrundprozess circd
© 2001-2022 Das fli4l-Team - August 31, 2022