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).
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:
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.
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'
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'
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'
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'
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'
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'
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'
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'
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'
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:
Y oder J: | Im angegebenen Zeitraum wird der Circuit aktiviert, unabhängig von den anfallenden Kosten. |
L: | Im angegebenen Zeitraum wird der Circuit aktiviert, wenn er zu den günstigsten Circuits gehört. (`L' steht für `Least cost', also ``niedrigste Kosten''.) |
N: | Der angegebene Zeitbereich dient nur zum Berechnen von Kosten, der Circuit wird in diesem Zeitraum jedoch nicht aktiviert. Dies kann sinnvoll sein, wenn der Circuit manuell aktiviert wird, etwa wenn es sich um einen Circuit zur Verbindung mit einem Firmennetz handelt, der nur bei Bedarf hinzugeschaltet wird. |
Der Typ kann weggelassen werden, in diesem Fall wird `L' angenommen.
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.
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'
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'
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'
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'
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'
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'
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.
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'
Jeder Circuit hat, während der Router läuft, einen der folgenden 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:
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.
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:
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.
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'
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.
Diese Variable gibt die Anzahl der konfigurierten Circuit-Klassen an.
Standard-Einstellung: CIRC_CLASS_N='0'
Beispiel: CIRC_CLASS_N='2'
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'
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:
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
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:
Einige Anmerkungen zum Algorithmus:
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:
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.
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=''
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'
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'