Logo
Menu
»Home
»Info
»Screenshots
»Dokumentation
»Howto's
»FAQ
»Download
»Plugins
»Kontakt
»Forum

SourceForge.net Logo

Diese Seite dokumentiert die Funktionen und Konfiguration des BS-Web-Interface. Informationen zu Skripten, Programmen und NVRAM-Parametern sind der Howto- und Info-Seite zu entnehmen.

Analog Telefon Adapter

Die Funktion analog Telefon Adapter ermöglicht es, die VoIP-Telefonfunktion mit einem analogen Endgerät zu nutzen, auch wenn der Router nicht per ADSL mit dem Internet verbunden ist. So kann der Router als "Telefon" verwendet werden wenn er im LAN nur mit Ethernet oder WLAN angebunden ist.

Um den Router als analog Telefon Adapter zu nutzen sind folgende Parameter zu beachten:

  1. Der Router muss über eine IP-Adresse aus dem LAN verfügen.

  2. Der Router muss das Standard-Gateway (den Router ins Internet) kennen.

  3. Die Konfiguration für den SIP-Account muss korrekt sein.

Bis Version 0.2.x

zu 1:
  • Die IP-Adresse und die Subnetzmaske werden im Menüpunkt KONFIGURATION→Netzwerk→LAN eingestellt.

zu 2:
  • Das Gateway wird unter Menüpunkt EXTRA→BS-Extra→LAN, im Abschnitt Network settings eingestellt.

zu 3:
  • Die Funktion analog Telefon Adapter wird im Menüpunkt EXTRA→BS-Extra→Analog telephone adapter konfiguriert.

  • Folgende SIP-Parameter sind zu setzen:

Parameter Bedeutung Beispiel
Telephone number Telefonnummer des SIP-Accounts 79824123
User name Benutzername des für den SIP-Account Hans-Wurst oder 79824123
Password Passwort für den SIP-Account
Proxy/Registrar IP IP-Adresse des SIP-Proxys 217.10.79.9 oder 217.72.200.89 oder 86.64.162.35
Proxy/Registrar Port UDP-Port des SIP-Proxys (Standard: 5060) 5060
Domain SIP-Domain sipgate.de oder sip.web.de oder ekiga.net
Voice Activity Detection (VAD) Sparachpausenerkennung (nützlich bei geringer Bandbreite)
Bandwidth Optimized Voice Compression Bandbreitenoptimierung (nützlich bei geringer Bandbreite)
Warning

Aus unerfindlichen Gründen dürfen die Felder in der normalen Telefonkonfiguration Telefonie→DSL Telefonie nicht leer sein!

Also in die Felder irgendwelche Zeichen eintragen, völlig egal was.

Danach, wenn alle ATA-Konfigurationen vorgenommen wurden, ausschalten und neu starten.

Beispielkonfiguration für Sipgate.de

Im folgenden Screenshot ist eine Sipgate Beispielkonfiguration abgebildet:

Zu beachten ist bei Sipgate, das der Benutzername gleich die Rufnummer ist.

Caution Ist unter KONFIGURATION→Telefonie→T-Net Anschluss eingestellt, dass ein "T-Net Anschluss" verwendet wird, aber kein analoger Telefonanschluss angeschlossen ist, können keine Rufe abgesetzt werden. Der Apparat kann dann nur angerufen werden.

Ab Version 0.3

Ab BS Version 0.3 ist die Telefon- respektive VoIP-Konfiguration nicht mehr zweigeteilt und es sind auch einige Optionen mehr verfügbar.

Beispielkonfigurationen


Sipgate

Subscriber: Sipgate Rufnummer
User name: Sipgate Rufnummer
Password: Sipgate Passwort
Proxy/Registrar Address: sipgate.de
Proxy/Registrar Port: 5060
Domain: sipgate.de




Carpo

Subscriber: Carpo Username
User name: Carpo Username
Password: Carpo Passwort
Proxy/Registrar Address: sip.carpo.de
Proxy/Registrar Port: 5060
Domain: carpo.de




SIPphone.com

Subscriber: SIPphone Username (Gizmo Project Name)
User name: SIPphone Username (Gizmo Project Name)
Password: SIPphone Passwort
Proxy/Registrar Address: 198.65.166.131
Proxy/Registrar Port: 5060
Domain: proxy01.sipphone.com




T-Online

Subscriber: VoIP-Rufnummer (032XXX)
User name: E-Mail-Alias (E-Mail Adresse mit @t-online.de)
Password: VoIP-Kennwort (Webkennwort)
Proxy/Registrar Address: 62.225.245.122
Proxy/Registrar Port: 5060
Domain: tel.t-online.de



Steuern verschiedener Funktionen per Telefon

Ab BS Version 0.2.1 kann der Router auch per Telefon gesteuert und konfiguriert werden. Es sind einige Standardfunktionen vorgegeben. Diese sind der folgenden Tabelle zu entnehmen.

Grundsätzlich beginnen Steuercodes mit "\#". Wurde der komplette Steuercode eingegeben, dauert es einige Sekunden bis der Router den Wahlvorgang als abgeschlossen ansieht. Um dies zu Beschleunigen kann der Steuercode mit "\#" beendet werden. Am Telefon ist anschließend "kein Anschluß unter dieser Nummer" zu hören. Nachdem der Hörer aufgelegt wird, beginnt der Router mit der Auswertung des Steuercodes und führt die entsprechende Aktion aus. Es ist auch möglich eigene Steuercodes zu definieren und Aktionen daran zu binden - dazu mehr im Howto.

Caution Steuercodes können nur eingeben werden, wenn das Freizeichen zu hören ist!

Die folgende Tabelle enthält alle vordefinierten Steuercodes. Das Symbol abheben bedeutet den Hörer abnehmen (Freizeichen wird vorausgesetz), das Symbol abheben bedeutet auflegen. Für Funktionen die auch bei der "Fritz!Box Fon" möglich sind, werden die selben Steuercodes (\#96*... oder \#99...) verwendet. BS-spezifische Codes beginnen mit \#77*.

Steuercode Bedeutung Eingabe
#77*0* SSH Server starten abheben \#77*0*\# auflegen
#77*1* SSH Server stoppen abheben \#77*1*\# auflegen
#77*2*IP-Adresse IP-Adresse setzen. Anstatt der Punkte "." werden Sterne "*" für die IP-Adresse verwendet. Die IP-Adresse 192.168.2.1 wird mit 192*168*2*1 angegeben. abheben \#77*2*192*168*2*1\# auflegen
(für 192.168.2.1)
#77*3*12345 Firewall öffnen (iptables -F) abheben \#77*3*12345\# auflegen
#77*4*12345 L2-Filter öffnen (ebtables -F) abheben \#77*4*12345\# auflegen
#77*5* LED Test abheben \#77*5*\# auflegen
#96*0* WLAN einschalten abheben \#96*0*\# auflegen
#96*1* WLAN ausschalten abheben \#96*1*\# auflegen
#96*4* Anrufmonitor einschalten abheben \#96*4*\# auflegen
#96*5* Anrufmonitor abschalten abheben \#96*5*\# auflegen
#96*7* Telnet einschalten abheben \#96*7*\# auflegen
#96*8* Telnet abschalten abheben \#96*8*\# auflegen
#990*15901590* Reboot abheben \#990*15901590*\# auflegen
#991*15901590* NVRAM Reset und Reboot abheben \#991*15901590*\# auflegen

Anrufmonitor

Ab BS Version 0.2.1 ist das Monitoring von Telefonanrufen über das Netzwerk möglich. Der Anrufmonitor ist für alle Diejenigen interessant, die über eingehende Anrufe via TV (siehe Bild), PC, Instant Messenger oder E-Mail benachrichtigt werden möchten.

Der Anrufmonitor kann über das Web-Interface BS-Extras→Additional functions→Call monitor oder per Telefon ein- und abgeschaltet werden.

Um den Anrufmonitor per Telefon einzuschalten ist der Steuercode \#96*4* einzugeben (siehe oben). Zum Abschalten muss \#96*5* eingegeben werden.

Funktionsweise

Der Anrufmonitor überwacht ständig die Telefonfunktion des Routers. Um eingehende Rufe zu signalisieren, läuft auf dem Router ein Server auf TCP-Port 1012 (standard). Eingehende Rufe werden allen Clients, die mit dem Server verbunden sind, mit einer einfachen textbasierten Nachricht signalisiert. Die Nachricht enthält unter anderem Datum und Uhrzeit (lokale Zeit des Routers), das Schlüsselwort "RING", die Rufnummer des Rufenden und die Information ob der Ruf über PSTN oder SIP eingeht.

Name Anmerkung
listen2fritz - für PC
- Benachrichtigung via IRC; E-Mails und Dreambox (Anzeige im TV)
- Auflösen der Rufnummer via LDAP und Onlinesuche
- http://www.gromeck.de/?id=listen2fritz
FRITZBox Call Monitor - für DBox2 (Anzeige im TV)
- Auflösen der Rufnummer via Textdatei oder Onlinesuche
- http://www.yadi.org/FRITZBoxCallMonitor/
ISDN-CAPI-WATCH - für PC
- Benachrichtigung via Popup und DBox2 (Anzeige im TV)
- http://www.scanny.de/

Plugins für das Web-Interface

Ab BS Version 0.3 können zusätzliche Plugins für des Web-Interface installiert werden. Jedes Plugin ist ein CGI-Skript. Ein CGI-Skript ist hier ein Shell-Skript, das dynamisch oder statisch HTML-Code erzeugt und Daten entgegennehmen, verarbeiten und ausgeben kann.

Plugins besitzen die Dateierweiterung .cgi und müssen unter /opt/webs gespeichert werden. Plugins müssen ausführbar sein!

Am Beispiel des Web-Shell Plugins wird der Aufbau eines Plugins erläutert. Das Web-Shell Plugin ermöglicht es, Shell-Befehle über ein Eingabefeld im Web-Interface auszuführen und die Ausgabe des Befehls wird angezeigt (siehe hier).

Aufbau eines Plugins

Name und Beschreibung

Das Plugin beginnt mit #!/bin/sh, damit es von der Shell ausgeführt wird. Hinter #NAME: wird der Name des Plugins angegeben. Dieser wird auf der Plugin-Web-Seite angezeigt. Ist im Plugin kein Name angeben, wird der Dateiname angezeigt. Mit #DESCRIPTION: wird die Beschreibung des Plugis angegeben. Diese wird auf der Plugins-Seite auf der rechten Seite angezeigt, wenn die Maus über den Link zum Plugin bewegt wird. Die Beschreibung kann auch HTML-Tags beinhalten.

#!/bin/sh
#NAME: Web-Shell
#DESCRIPTION: Execute a shell command via the web interface.

Parameter auswerten

Um Parameter für das Plugin zugänglich zu machen, wird das Skript /webs/cgi-bin/login.cgi benötigt. Dieses stellt jeden Parameter als Shell-Variable bereit.

. /webs/cgi-bin/login.cgi

HTML-Code ausgeben

Mit CGI-Skripten können beliebige Inhalte generiert und ausgegeben werden. Wie die Daten interpretiert werden sollen, wird mit dem Content-type angegeben. Für HTML ist text/html definiert, für JPEG-Dateien wird image/jpeg verwendet, für SVG nutzt man image/svg+xml usw. Der Content-type ist Teil des HTTP-Headers. Mit CGI-Skripten können also einige HTTP-Header-Felder an den Web-Browser übertragen werden. Der HTTP-Header endet mit einer leeren Zeile (zwei mal carriage return und new line - \r\n\r\n).

Content-type: text/html
Connection: close

Danach kann HTML-Code ausgeben werden, oder falls ein anderer Content-type verwendet wird die jeweis entsprechenden Daten.

<html>
<head>
[...]

HTML-Code oder auch andere Daten können auf verschiedene Weise erzeugt und ausgegeben werden. Bei statischen Inhalten eignen sich Here-Dokumente:

cat << EOF_HTML
[...] HTML-Code [...]
EOF_HTML

Für einzelne Zeilen ist der echo-Befehl kürzer.

echo '<pre style="margin:15px;">'

Verwenden des BS Styles

Wenn im HTML-Dokument folgendes Style Sheet eingefügt wird, kann die Optik des Plugins an die des BS Web-Interfaces angepasst werden.

<LINK rel="stylesheet" href="../../style.css" type="text/css">
<!--[if IE]><style type="text/css">@import url(../../ie.css);</style><![endif]-->

Als Vorlage für die Verwendung der CSS-Regeln und Klassen kann jedes Skript aus /webs/cgi-bin/ oder das Web-Shell Plugin verwendet werden.

Verwenden der BS JavaScript-Funktionen

Das BS Web-Interface nutzt JavaScript-Funktionen für die Hinweise auf der rechten Seite, zum prüfen einiger Eingabefelder zum ein- und ausblenden von Formularfeldern oder HTML-Elementen und für die Back-, Save-, usw. Buttons.

<SCRIPT language="JavaScript" src="../../js_fade.txt" type="text/JavaScript"></SCRIPT>
<SCRIPT language="JavaScript" src="../../js_menu.txt" type="text/JavaScript"></SCRIPT>

Beispiel-Plugins

Das Web-Shell Plugin ist gut als Vorlage für eigene Plugins geeignet. Es enthält alle relevanten Teile die ein Plugin enthalten muss. Es zeigt auch, wie Eingaben verarbeitet werden können und wie dynamisch HTML-Code generiert wird.

#!/bin/sh
#NAME: Web-Shell
#DESCRIPTION: Execute a shell command via the web interface.

HOME="../plugin.cgi"
. /webs/cgi-bin/login.cgi

if [ "$action" = "3" ]; then
  cmd=`echo $cmd|sed -e 's/+/ /g'|sed -e 's/%/\\\x/g'|sed -e 's/[\]x0[dD][\]x0[aA]//g'`
  cmd_html=`echo -e $cmd " "|sed -e 's/\"/\&quot;/g'`
fi

cat << EOF_HTML
Content-type: text/html
Connection: close

<html>
<head>
<SCRIPT language="JavaScript" src="../../js_fade.txt" type="text/JavaScript"></SCRIPT>
<SCRIPT language="JavaScript" src="../../js_menu.txt" type="text/JavaScript"></SCRIPT>
<LINK rel="stylesheet" href="../../style.css" type="text/css">
<!--[if IE]><style type="text/css">@import url(../../ie.css);</style><![endif]-->
<SCRIPT type="text/JavaScript">
function enter(event)
{
  if (event)
  {
   if(navigator.appName=="Netscape" && event.which == 13)
        subm(3);
   else if(event.keyCode==13)
        subm(3);
  }
  else
        return true;
}
</SCRIPT>
</HEAD>
<BODY onload="document.getElementById('cmd').focus();">
<DIV id=c_border>
<DIV id=c_pfad>Plugins / Web-Shell</DIV>
<DIV id=c_titel>Web-Shell</DIV>
EOF_HTML
if [ "$action" = "3" ]; then
  echo '<pre style="margin:15px;">'
  echo -e "Web-Shell> " $cmd
  eval `echo -e $cmd 2>&1`
  echo '</pre>'
fi

cat << EOF_HTML
<form id="xform" name="xform" method="post">
<input id="action" type="hidden" name="action" value="0">
<DIV id=c_std>
<table border="0" cellpaddig="0" cellspacing="2">
<tr onmouseover="i_showElem(1);" onmouseout="i_showElem(0);" >
<td width="80">Command:</td>
<td><input id="cmd" name="cmd" size="70" type="text" onkeypress="return enter(event);" value="
EOF_HTML
 echo $cmd_html
cat << EOF_HTML
"></td>
</tr></table></DIV>
</form>
<DIV id=c_leer></DIV>
<DIV id=c_foot></DIV>
</DIV>
<DIV id=c_verzoeg1></DIV>
<DIV id=c_verzoeg2></DIV>
</DIV>
<DIV id=t_Frame>
<DIV id=t_but1 onclick='window.location.href="$HOME";' onmouseover=rahmen(1,1) onmouseout=rahmen(0,1)>Back &lt;&lt;</DIV>
<DIV id=t_but4 onclick="subm(3);" onmouseover=rahmen(1,4) onmouseout=rahmen(0,4)>Run  &lt;&lt;</DIV>
</DIV>
<DIV id=i_Frame>
<DIV id=i_content>
<h2>Web-Shell</h2>
<p>Execute a shell command.</p>
</DIV>
<DIV id=i_content1>
<h2>Web-Shell</h2>
<p><b>Command</b></p>
<p>Enter the command to execute.</p>
</DIV>
</BODY></HTML>
EOF_HTML

a=0

NVRAM Tool

Das NVRAM Tool ist das zentrale Programm zum Speichern und Auslesen der Routerkonfiguration. Es ist seit der ersten BS-Version im Image enthalten und wurde seitdem mehrmals verändert und erweitert.

Funktionsweise

Das Tool verwaltet im Wesentlichen eine sogenannte NVRAM-table. Dies ist eine binäre Datenstruktur in der die zu speichernden Werte strukturiert im Flash Speicher des Routers abgelegt werden. Der NVRAM selbst ist ein 32kB großer Speicherbereich am Ende des Flashspeichers des Routers. Soll ein neuer Wert hinzugefügt werden, prüft das Tool zunächst ob der Parametername bereits vorhanden ist. Falls ja, wird der vorhandene Wert durch den neuen ersetzt und ggf. die gesamte Tabelle gedehnt bzw. geschrumpft.

Ab BS-Version 0.2.0 verwendet das Tool sogenannten shared memory. Dies ist ein Segment im schnellen Hauptspeicher (RAM) des Routers, in welches alle Werte zunächst zwischengespeichert werden. Erst durch ein nvram commit schreibt das Tool alle Werte aus dem shared memory in den Flash. Der Grund für diese Verfahrensweise ist der Geschwindigkeitsvorteil des shared memory. Da das Schreiben in den Flash im Vergleich dazu sehr lange dauert, macht es Sinn zunächst eine Reihe von Werten zu sammeln und anschließend erst permanent im Flash zu speichern.

Ab BS-Version 0.3.0 kann die NVRAM-table komprimiert werden. Dazu wird der shared memory zunächst auf ein Vielfaches des eigentlichen NVRAM vergrössert. Dies ist notwendig da die Daten im shared memory unkomprimiert gehalten und erst bei einem nvram commit komprimiert und in den NVRAM geschrieben werden. Beim Hinzufügen oder Ändern eines Werts prüft das Tool zunächst ob die "neue" komprimierte NVRAM-table inklusive des Hinzugefügten überhaupt in den NVRAM passen würde und weist dies ggf. mit einer Fehlermeldung zurück.

Bedienung

  1. Speichern von Werten

    • nvram set <Parametername>=<Wert>, z.B. nvram set telnet_start=0

    • nvram setfile <Parametername>=<Dateipfad>, z.B. nvram setfile custom_script=/tmp/custom_script.sh

    • ACHTUNG Um Werte permanent zu speichern ist ab BS-0.2.0 ein nvram commit nach dem Speichern abzusetzen.

  2. Auslesen von Werten

    • nvram get <Parametername>, z.B. nvram get ssh_start

    • nvram getfile <Parametername>=<Zieldateipfad>, z.B. nvram getfile custom_script=/tmp/custom_script.sh

  3. Löschen von Werten

    • nvram delete <Parametername>, z.B. nvram delete dhcp_start

  4. Reset der NVRAM-table

    • mittels nvram reset wird der NVRAM gelöscht und mit Leerdaten überschrieben, die NVRAM-table wird neu initialisiert und enthält keine Werte

    • ein Reset kann notwendig sein, wenn z.B. die NVRAM-table beschädigt oder noch gar nicht vorhanden ist

  5. Synchronisierung von shared memory und NVRAM (ab BS-0.2.0)

    • nvram commit

    • Schreibt alle Daten aus dem flüchtigen shared memory in den permanenten NVRAM

  6. Speichern der Konfiguration [ab BS-Version 0.1.2]

    • saveconfig <mode>=<smode> <key>=<enc-key> <file>=<target_file>, z.B. nvram saveconfig mode=3 key=secure file=/tmp/config.save

    • mode=2 heisst NVRAM-table sichern, mode=3 heisst kompletten NVRAM sichern, mode=1 wird ab BS-Version 0.3.0 nicht mehr unterstützt, da kein PSI-Tree mehr vorhanden ist

    • wird ein key angegeben, wird die Konfiguration RC4-verschlüsselt gespeichert, dient dem Schutz von Usernamen,Passwörtern etc.

  7. Laden der Konfiguration [ab BS-Version 0.1.2]

    • loadconfig <key>=<enc-key> <file>=<source_file>, z.B. nvram loadconfig key=secure file=/tmp/config.save

    • der Modus muss beim Laden nicht angegeben werden, da dieser in der Konfigurationsdatei mit gespeichert wird und somit automatisch erkannt wird

    • wurde beim Speichern ein key verwendet, muss dieser beim Laden natürlich auch wieder angegeben werden, sonst kommt eine Fehlermeldung

  8. Komprimierung [ab BS-Version 0.3.0]

    • Aktivieren der Kompression mittels nvram compression 1 oder nvram compression on

    • Deaktivieren der Kompression mittels nvram compression 0 oder ` nvram compression off`

    • Status der Kompression abfragen mit nvram compression status

    • ACHTUNG Um Änderungen an den Kompressionseinstellungen permanent zu speichern ist ein nvram commit notwendig.

  9. Informationen und Diagnose

    • nvram show, gibt die gesamte NVRAM-table aus

    • nvram showkeys, gibt alle gespeicherten Schlüsselwerte aus

    • nvram dump, gibt den gesamten NVRAM in ASCII-kodierter Form aus

    • nvram dumphex, gibt den gesamten NVRAM in als Hexdump aus

Technisches

Folgendes Schema zeigt den Aufbau der NVRAM-table:

Zur Verdeutlichung soll das Schlüssel-Wert-Paar test=BILLgates in eine leere NVRAM-table gespeichert werden. Danach haben die in der Abbildung gezeigten Felder folgende Werte:

  • key length = 4, key value = "test"

  • value length = 9, value = "BILLgates"

  • compression bit = 0

  • table length = 1 + 4 + 2 + 9 = 16 Byte

Reset Button

Der Reset Button wird durch das Programm reset_button überwacht (ab BS Version 0.3.2). Gestartet wird es durch das Startscript reset_button.sh.

Funktionsweise

Wird der Reset Button gedrückt, zählt das Programm die Sekunden, bis der Reset Button wieder losgelassen wird. Das Zählen wird durch das kurze Aufleuchten der roten Power LED signalisiert. Nachdem der Reset Button losgelassen wurde, wird ein Handler-Skript gerufen, diesem wird die Anzahl der "gedrückten" Sekunden übergeben. Im Standardfall wird das Skript /usr/bin/button_handler.sh aufgerufen. Die Funktionen des Standard-Handlers sind in der folgenden Tabelle dargestellt.

Reset-Button Funktionen

Dauer Aktion
3s-9s Reboot
10s-14s NVRAM reset (Standardkonfiguration wiederherstellen)+Reboot
15s-19s mini_fo löschen+Reboot (alle Daten in /opt/mini_fo werden gelöscht)
20s-24s JFFS-Partition löschen+Reboot (alle Daten in /opt werden gelöscht)
25s-29s mini_fo in tmpfs mounten+Reboot
30s-34s mini_fo in JFFS-Partition mounten+Reboot (Standard)
35s-… mini_fo abschalten+Reboot (wie vor BS-0.3.6)

NVRAM Parameter

Parameter Wert Bedeutung
rbutton_start 0 (aus) / 1 (an) Reset Button Überwachung starten
rbutton_handler <Handler-Skript> Mit diesem Parameter wird ein eigenes Skript angegeben welches statt des Standard-Handlers verwendet wird.

HTTP-Proxy

Funktionsweise

Seit BS Version 0.1 ist ein HTTP/1.0,SSL Proxy-Server namens stproxy enthalten. Ein Proxy (dt. Stellvertreter) ist ganz allgemein ein Server-Programm, welches die von einem Client gestellten Anfragen (Requests) stellvertretend für diesen zum eigentlichen Zielserver weiterleitet.

Im Normalfall wird ein Proxy verwendet um die Sicherheit zu erhöhen. Statt beispielsweise pauschal den TCP-Port 80 (HTTP) an einer Firewall zu öffnen, verwenden Administratoren gerne einen HTTP-Proxy, da dieser sicherstellt, das auch wirklich nur gültige HTTP-Requests versendet werden und nicht etwa ein anderes Protokoll über diesen Port getunnelt wird.

Anwendungsbeispiel

Im BS-Image ist der stproxy vor allem für die Nutzung des heimischen Anschlußes zum Surfen gedacht. Angenommen man hat auf der Arbeit einen Rechner der zwar eine Internetverbindung hat, die Firmenfirewall aber lediglich E-Mail-Verkehr gestattet. Dies bedeutet es werden mit großer Wahrscheinlichkeit die TCP-Ports 25 (SMTP) und 110 (POP) durchgelassen und alle anderen Verbindungen geblockt. Nun braucht man lediglich am heimischen DSL-Anschluß den stproxy auf z.B. Port 25 einstellen und gibt dem Browser auf der Arbeit als HTTP-Proxy seinen heimischen DNS-Namen, z.B. myproxy.dyndns.org:25. Sollte der dortige Browser eine solche Einstellung verbieten, dann einfach einen portablen Firefox auf dem USB-Stick mitgenommen.

Konfiguration

Der stproxy kann über das Webinterface aktiviert und konfiguriert werden. Folgende Parameter können dort festgelegt werden:

-HTTP-Proxy On/Off, 'stproxy' beim Hochfahren starten an/aus, Standard=aus
-Firewall proxy-port close/open, Proxy-Port über das WAN-Interface erreichbar nein/ja, Standard=nein
-Firewall admin-port close/open, Proxy Management Interface über WAN erreichbar nein/ja, Standard=nein
-Proxy-port, TCP Port Nummer für Proxy-Dienst, Standard=8080
-Admin-port, TCP Port Nummer für Management-Interface, Standard=6767
-DNS-server, IP-Adresse des DNS-Servers den 'stproxy' nutzen soll, Standard=127.0.0.1

Weiterhin besitzt der stproxy ein eigenes Webinterface (siehe Admin-port), welches zur Nutzerkonfiguration dient. Dort können entsprechende Nutzer und Passwörter konfiguriert werden die den Proxy nutzen dürfen. Der vorkonfigurierte Standard-Nutzer ist:

-Nutzername: stproxy
-Passwort: stproxy
-Rechte: Admin
-zulässiger IP-Bereich: 0.0.0.0, also von überall

ipt-SIP Modul

Allgemein

Das ipt-SIP-Modul ist ein iptables Firewall Modul, welches bei Bedarf dazu eingesetzt werden kann den Inhalt von SIP-Paketen zu manipulieren. Dies kann dann notwendig sein, wenn ein SIP-Server nicht mit dem im BS-Image enthaltenen VOIP-Client vodsl kommunizieren kann oder will. Dies tritt beispielsweise dann auf, wenn einer der beiden Kommunikationspartner SIP-Header/-Body Attribute verwendet, die der Gegenüber nicht akzeptiert. Das Modul wird mittels iptables konfiguriert und arbeitet in der mangle-table, d.h. Pakete werden durch das Modul verändert. Das Modul prüft zunächst, anhand der übergebenen Methode, ob es sich um ein SIP-Paket handelt und entfernt, manipuliert oder verändert dann den gewünschten Eintrag. Abschließend wird die SIP-Header Länge korrigiert und die UDP-Checksumme neu berechnet.

Bedienung

Das Modul wird mittels iptables konfiguriert und akzeptiert folgende Parameter:

  • --sip-method Suche diese SIP-methode <string> (z.B. INVITE oder SIP/2.0)

  • --sip-header Suche im SIP-header (flag)

  • --sip-body Suche im SIP-body (flag)

  • --sip-add <string> Füge <string> (Zeile) an den SIP-header oder -body an

  • --sip-remove <string> Entferne die angegebene Zeile (<string>) aus dem SIP-header oder -body (z.B. a=silenceSupp:Off)

  • --sip-replace <string> Ersetze die angegegebene Zeile in SIP-header oder -body durch die mit --sip-with <string> angegebene Zeile

  • --sip-with in Kombination mit --sip-replace <string>

Damit lassen sich folgende Funktionalitäten realisieren:

  1. Löschen von Attributen

    • z.B. iptables -t mangle -A OUTPUT -p udp --sport 5060 -j SIP --sip-method INVITE --sip-body --sip-remove 'a=silenceSupp:Off', löscht das Attribut für die Sprechpausenerkennung aus dem Sip-body in INVITE Paketen.

  2. Hinzufügen von Attributen

    • z.B. iptables -t mangle -A OUTPUT -p udp --sport 5060 -j SIP --sip-method INVITE --sip-body --sip-add 'a=quatsch:on', fügt ein sinnloses Attribut an INVITE Pakete an.

  3. Verändern von vorhandenen Attributen

    • z.B. iptables -t mangle -A OUTPUT -p udp --sport 5060 -j SIP --sip-method REGISTER --sip-header --sip-replace 'User-Agent: ' --sip-with 'User-Agent: Vodafone-Voip-Client 123', verändert den angegebenen User-Agent entsprechend.

Die entsprechenden Funktionalitäten lassen sich natürlich auch bei eingehenden Paketen realisieren, indem anstatt der OUTPUT- die INPUT-chain angegeben wird.

Anwendungsbeispiel

Als Anwendungsbeispiel soll der Arcor-Voip Fix aus dem BS-Image genommen werden, welcher als Shell-Funktion im firewall.sh-Skript enthalten ist.

setup_sip_arcor_fix()
{
  [ $voip_present -eq 0 ] && return

  if [ `nvram get ata_arcor_fix` = "1" ]; then
    echo "setup_sip_nat()" >>$DEBUG_FILE
    exec_cmd "iptables -t mangle -F OUTPUT"
    exec_cmd "modprobe ipt_SIP"


    IPT="iptables -t mangle -A OUTPUT -p udp --sport 5060 -j SIP"
    USER='User-Agent: DSL-EasyBox/DSL-EasyBox-10.02.506'
    ATTR_REPLACE='a=silenceSupp:off'
    ATTR1='a=ptime:20'
    ATTR2='a=sendrecv'
    methods_all="INVITE SIP/2.0 ACK BYE CANCEL REGISTER REFER NOTIFY OPTIONS SUBSCRIBE INFO"


    #go through each method
    for m in $methods_all
    do
      exec_cmd "$IPT --sip-method \"$m\" --sip-header --sip-replace 'User-Agent: ' --sip-with \"$USER\""
      exec_cmd "$IPT --sip-method \"$m\" --sip-body --sip-replace \"$ATTR_REPLACE\" --sip-with \"${ATTR1}%n${ATTR2}\""
    done
  fi
}

Die Funktion fügt für alle, in der Variablen $methods_all enthaltenen, SIP-Methoden zwei Regeln ein. Die erste manipuliert den User-Agent und setzt ihn auf DSL-EasyBox/DSL-EasyBox-10.02.506 damit der Arcor-Server denkt es handelt sich um ein Arcor-Gerät. Die zweite Regel ersetzt das SIP-Body Attribut a=silenceSupp:off durch a=ptime:20\r\na=sendrecv. Das Schlüsselzeichen %n dient als Zeilentrenner.

Color Theme - Custom color themes

Seit BS Version 0.3.8 kann das Farbschema des Web-Interface geändert werden [Screenshots].

Funktionsweise

Das Farbschema kann via Web-Interface (Administration→Web-Interface color theme) verändert werden. Beim Laden der Konigurations-Seite werden die aktuellen Farbwerte aus der Datei style.css und den Bildern entnommen und angezeigt.

Beim Speichern eines neuen oder veränderten Farbschema (Save & Run), wird die Datei style.css sowie alle Bilder neu generiert bzw. modifiziert. Die neuen Dateien werden mit Hilfe des mini_fo Filesystems gespeichert und überdecken die Originaldatei des nicht beschreibaren Flash. Änderungen am Farbschema sind also nur möglich, wenn mini_fo aktiviert ist. Ist nicht ausreichend Speierplatz im Flash (z.B. Images mit Annex A+B, OpenVPN, RADIUS und VoIP) für eine JFFS2-Partition vorhanden, wird das mini_fo Filesystems nur im RAM gehalten. Nach einem Reboot sind dann die Änderungen am Farbschema nicht mehr da.

Da alle Änderungen direkt an den betreffenden Dateien durchgeführt werden, gehen alle Änderungen mit dem Löschen des mini_fo Filesystems bzw. der JFFS2-Partition verloren. Um dies zu verhinden kann das Farbschema als custom Farbschema gespeichert werden. Dazu dient der Button Save as custom im Web-Interface. Mit Save as custom wird das aktuelle Farbschema im NVRAM gespeichert.

Exportieren

Um besonders schöne Farbschema zu exportieren und an andere weiterzugeben oder im Forum zu posten, kann wie folgt vorgegangen werden:

Administration→Web-Shell

Web-Shell> nvram get custom_color_theme_file

Die Ausgabe sieht dann in etwas so aus:

  var custom_theme=new Array('F68918','FEFEFE','FFFFFF','FFFFFF',
                          '000000','F68918','D0D0D0','F68918',
                          'F68918','333333','DDDDDD','000000',
                          'F6F6F6','CCCCCC','000000','FFFFFF',
                          'F6F6F6','999999','F68918','EEEEEE',
                          '000000','000000','F0F0F0');

IPv6 6to4 Tunnel

Mit einem 6to4 Tunnel ist es möglich IPv6 Datagramme in ein IPv4 Frame zu enkapsulieren, um so verschiedene IPv6 Netze über ein IPv4 Netz, z.B. das (heutige) Internet, zu verbinden. Am Beispiel des Tunnelbroker-Service von Hurricane Electric (http://tunnelbroker.net) soll gezeigt werden, wie ein 6to4 Tunnel mit dem BS-Image etabliert werden kann.

Hurricane Electric — Tunnel Details

Folgende Tabelle listet alle relevanten Information auf, um einen 6to4 Tunnel zu Hurricane Electric aufzubauen.

* IPv6 Tunnel Endpoints *
Server IPv4 Address 216.66.80.30
Server IPv6 Address 2001:470:*XXXX*:158b::'1'/64
Client IPv4 Address deine öffentliche IP
Client IPv6 Address 2001:470:*XXXX*:158b::'2'/64
* Routed IPv6 Prefixes and rDNS Delegations *
Routed /64: 2001:470:*XXXY*:158b::/64

Server IPv4 Address ist der Remote IPv4 Endpoint des Tunnels. Die eigene IPv4 Adresse (Client IPv4 Address) ist der andere Endpunkt. Die Client- und Server IPv6 Adressen sind die IPv6 Adressen der Tunnelendpunkte. Durch diese wird eine Punkt-zu-Punkt Verbindung zwischen den beiden Tunnelendpunkten realisiert.

Das IPv6 Subnetz das hinter Routed /64: angegeben ist, wird das lokale IPv6 Subnet. Alle Datagramme die in dieses Subnetz übertragen werden, müssen den 6to4 Tunnel passieren und vom BS Router zum entsprechenden Host geroutet werden. Dadurch wird jeder Host in diesem Subnetz global adressierbar!

Konfiguration

6to4 Tunnel

Folgende Tabelle listet alle Parameter auf, die im Webinterface angegeben werden müssen, um einen 6to4 Tunnel, am Beispiel von Hurricane Electric, aufzubauen.

Parameter im Webinterface Parametern Hurricane Electric Wert
Remote IPv4 address: Server IPv4 Address 216.66.80.30
Local IPv4 address: Client IPv4 Address deine öffentliche IP oder die lokale IP — siehe 1.
Local IPv6 address: Clients IPv6 Address 2001:470:XXXX:158b::2/64
Route: ::/0 — standard Route

Den Tunnel anschließend mit Add hinzufügen, danach mit Save speichern.

  1. Wenn der Router über eine statische, öffentliche IPv4 Adresse verfügt, kann diese hier angegeben werden. Befindet sich der Router hinter einem weiteren NAT-Router, so muss hier die lokale IPv4 Adresse angegeben werden (z.B. 192.168.x.y) — im Webinterface static address. Erhält der Router eine dynamische IPv4 Adresse von einem DHCP-Server oder vom PPP Server, bei einer DSL-Verbindung, kann die IPv4 Adresse für den lokalen Tunnelendpunkt auch dynamisch ermittelt werden — im Webinterface address from device. Verwende PPP0 für DSL und Bridge/LAN wenn der Router via Ethernet an einem Kabel-Modem oder einen NAT-Router mit DHCP angebunden ist. Wenn sich die lokale IPv4 Adresse ändert, muss das Tunnel-Setup auch beim Tunnelbroker angepasst werden, siehe dazu Custom Script nach dynamischem Tunnel Update.

Warning

Wenn sich der Router hinter einem weiteren NAT-Router befindet, muss sichergestellt sein, das alle IPv4-Datagramme mit dem Protokoll 41 an den Router weiterleitet werden! Ist die weiterleitung von Protokoll 41 nicht möglich, muss der Router in die DMZ des NAT-Routers gesetzt werden.

Lokale Route

Da bei IPv6 NAT nicht mehr vorgesehen ist und jeder Host eine öffentliche Adresse erhält, muss noch eine Route angelegt werden, damit sämtlicher IPv6 Verkehr aus und in das lokale Netz richtig geroutet wird.

Parameter im Webinterface Parametern Hurricane Electric Wert
Route options: advertise this route — siehe 1.
Address/Route: Routed /64 2001:470:XXXY:158b::/64 — siehe 2.
On-Link: on — siehe 3.
Mobile: off
Auto configuration: on — siehe 4.
Gateway:
Device: Bridge/LAN oder WLAN — siehe 5.

Die Route anschließend mit Add hinzufügen, danach mit Save speichern oder mit Save & Run speichern und anschließend den Tunnel aufbauen und die Route setzen.

  1. advertise this route bedeutet, dass die Route gesetzt und danach mit Router advertise Nachrichten im Netz propagiert wird. Dadurch können alle Hosts im lokalen Netz eine Adresse aus dem von Hurricane Electric gerouteten IPv6 Subnet generieren (siehe dazu 4.).

  2. Hier muss das Routed IPv6 Prefixes eingetragen werden. Aufgepasst: die Route und die IPv6 Tunneladressen unterscheiden sich nur in einer hexadezimalen Ziffer!

  3. On-Link bedeutet, dass dieses Subnetz direkt (z.B. via LAN oder WLAN) erreichbar ist.

  4. Ist Auto configuration eingeschaltet und werden Router advertisements gesendet, dann kann jeder IPv6 Host eine IPv6 Adresse aus dem Netz-Prefix und seiner MAC-Adresse (EUI-64) erzeugen.

  5. Ist das lokale Netzwerk am LAN-Port angebunden (z.B. bei DSL), ist bei Device Bridge/LAN anzugeben. Ist das lokale Netz über WLAN angebunden, ist bei Device WLAN anzugeben.

Custom Script nach dynamischem Tunnel Update

Wenn sich die lokale IPv4 Adresse ändert, muss auch das Tunnel-Setup beim Tunnelbroker aktualisiert werden. Da es dafür keine standardisierte Prozedur gibt, gibt es die Möglichkeit diese durch ein Custom Script zu realisieren.

Das Custom Script wird immer gerufen, wenn sich die Adresse der Schnittstelle ändert, die den lokalen Tunnelendpunkt darstellt. Wird das Skript gerufen, so werden diesem drei Parameter als Umgebungsvariable mitgegeben:

Parameter Wert Beschreibung
$DEV br0 - Bridge/LAN; wl0 - WLAN; PPP0 - primäre PPP Verbindung das Device dessen Adresse sich geändert hat
$REMOTE Remote IPv4 address IPv4 Adresse des Tunnelendpunktes beim Tunnelbroker
$LOCAL Local IPv4 address die lokale IPv4 Adresse

Das folgende Listing zeigt wie das Custom Script für den Tunnelbroker Hurricane Electric aussehen könnte. Das Update erfolgt Web-basiert, nähere Informationen dazu sind hier nachzulesen.

#!/bin/sh

HURRICAN=216.66.80.30                       ## Hurricane Electric's Tunnel Endpunkt
IPV4ADDR="AUTO"                             ## ermittle die öffentliche IP aus der Anfrage
MD5PASS="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  ## MD5 Hash des Passworts
USERID="yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"   ## User ID
GTUNID="zzzzz"                              ## Globale Tunnel ID

if [ "$REMOTE" = "$HURRICAN" ]
then
  wget -O /var/6to4update.html "http://ipv4.tunnelbroker.net/ipv4_end.php?\
ipv4b=${IPV4ADDR}&pass=${MD5PASS}&user_id=${USERID}&tunnel_id=${GTUNID}"
fi

Das Custom Script wird im NVRAM unter ipv6_custom_dyn_tun gespeichert. Wenn obiges Skript unter dem Namen /var/dyntun.sh abgespeichert wurde, kann es mittels folgendem Befehl im NVRAM gespeichert werden:

nvram setfile ipv6_custom_dyn_tun=/var/dyntun.sh
nvram commit