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

SourceForge.net Logo

Hier eine kleine Auswahl an Howto’s für das Arbeiten, Entwickeln und Konfigurieren der BS-Images. Bei Fragen, Anregungen oder weiteren Wünschen sind wir für eine Rückmeldung dankbar.

Tip Für das manuelle Editieren von Konfigurationsdateien auf dem Router über Telnet/SSH Zugang wird hier der Umgang mit dem vi vorrausgesetzt. Wer sich hiermit nicht auskennt, bitte vorher mal über die Bedienung informieren. z.B. hier: vi Tutorial
Caution Mit der BS Verion 0.3 hat sich das Web-Interface verändert. Verweise auf das Web-Interface in der Form BS-Extras→…→… existieren nicht mehr. Die Konfigurations-Webseiten sind nun direkt über die Navigationsleiste erreichbar.

Crosscompiler Toolchain

Einrichtung der Toolchain und compilieren des Source-Tree unter Debian basierten Linux-Systemen ([K]Ubuntu, Kanotix, Sidux etc.).

benötigte Pakete:

  • uclibc-crosstools_3.4.2-13_i386.deb

  • uclibc-crosstools-common_3.4.2-13_i386.deb

  • uclibc-crosstools-mips_3.4.2-13_i386.deb

  • bs_dev_tree_v0.1.tar.bz2

Vorbereiten der Toolchain:

#Abhängigkeiten
sudo apt-get install libc6-dev libncurses5-dev zlib1g-dev gcc g++

#Cross Compiler
sudo dpkg -i uclibc*.deb
sudo ln -s /opt/toolchains /opt/toolchains_3_04

#Source-Tree entpacken
tar jxf bs_dev_tree_v0.1.tar.bz2
Tip Auf Red Hat-basierten Systemen müssen die gleichen Pakete vorhanden sein bzw. in adäquater Weise mit rpm installiert werden.

Patch

Um den aktuellen Stand des BS-Source-Tree herzustellen, den entsprechenden Patch downloaden folgendermaßen anwenden:

cd bs/dev_tree
patch -p1 <bs_dev_tree_v0.1.x.patch

Compilierung des Images

cd bs/dev_tree
make PROFILE=96348GWV_DT

Sollte alles geklappt haben, liegt das fertige Image unter dev_tree/images.

Eigene Startskripte und Konfigurationen

Howto für das Einbinden eigener Konfigurationen und Skripte in das Bitswitcher-Image.

Erklärung

Das Image enthält im Verzeichnis /etc/start_scripts das Skript custom.sh. Dieses wird nach dem Starten als letztes aufgerufen und prüft im NVRAM den Parameter custom_start. Ist dieser =1 gesetzt, wird das im NVRAM hinterlegte custom_script nach /var geschrieben und ausgeführt. Der default-Wert für custom_start ist =0, weshalb also nach dem Aufspielen des BS-Image kein custom_script ausgeführt wird.

Durchführung

Warning
Ab Version 0.3.0

Ab BS-Version 0.3.0 kann das custom-Skript via Web-Interface bearbeitet werden. Administration→Custom Script

Zunächst mit telnet oder ssh auf den Router und dann folgende Befehle ausführen:

cd /var
#Custom-Script anlegen
touch custom_script.sh

#die gewünschten Befehle einfügen, hier als Beispiel Firewall rücksetzen
echo "iptables -F" > custom_script.sh

#Skript im NVRAM sichern
nvram setfile custom_script=/var/custom_script.sh

#Skript beim nächsten Neustart ausführen
nvram set custom_start=1

Beim nächsten Neustart wird das Skript aus dem NVRAM nach /var/custom_script.sh geschrieben und ausgeführt. Sollten weitere Änderungen notwendig sein, dann einfach das aktuelle /var/custom_script.sh editieren und anschließend wieder im NVRAM sichern.

Warning
Version 0.1.0

Die Ausgaben (stdout und stderr) aller Daemons die in /var/custom_script.sh gestartet werden, müssen umgeleitet werden! Andernfalls blockiert das Skript bis die Daemons terminieren. Das hat zur Folge das der Web-Server nicht gestartet wird!

Im Normalfall sollten alle Ausgaben mit >/dev/null 2>/dev/null nach /dev/null umgeleitet werden.

Beispiel:

# dnsmasq -C /etc/dnsmasq.conf >/dev/null 2>/dev/null &

Dies ist ab BS-Version 0.1.1 nicht mehr nötig!

Warning
Ab Version 0.2.1

Ab BS-Version 0.2.1 werder alle Änderungen erst nach einem nvram commit in den NVRAM geschrieben!

WLAN im Ad-Hoc Modus

Warning
Ab Version 0.3

Ab BS-Version 0.3 kann der Ad-Hoc Modus über das Web-Interface konfiguriert werden.

Wireless Bridge

Wireless-Bridge Konfiguration
Warning
Ab Version 0.3

Ab BS-Version 0.3 kann die Wireless Bridge über das Web-Interface konfiguriert werden.

Erklärung

Das obige Bild zeigt eine Beispielkonfiguration, in welcher der Router als Wireless-Bridge fungiert. Im Beispiel ist bereits ein WLAN konfiguriert, welches durch den DSL-Router verwaltet wird. Das Ziel ist es nun, den vorhandenen Kabel-/Sat-Receiver, welcher nur über eine Ethernet-Schnittstelle verfügt, in das WLAN einzubinden um auf diesen per WLAN zugreifen zu können oder dem Receiver den Internetzugriff zu ermöglichen.

Durchführung

Die Konfiguration erfolgt in folgenden Teilschritten:

  1. custom-Startskript konfigurieren Eigene Startskripte und Konfigurationen

  2. Empfehlung: über das Web-Interface WLAN deaktivieren

  3. manuelle WLAN-Einstellungen in custom_script wie folgt einfügen:

Zunächst mit telnet oder ssh auf den Router und dann in die Datei /var/custom_script.sh folgende Zeilen einfügen:

CHANNEL="11"

#WLAN einschalten
wlctl up
#WLAN AP-Modus deaktivieren/Client Modus aktivieren
wlctl ap 0
#Channel einstellen
wlctl channel $CHANNEL
#Bridging einschalten
wlctl wet 1

brctl addif br0 wl0
ifconfig wl0 up
ifconfig eth0 up

###############################Verschluesselung#######################
SSID="Beispiel"
WEP_KEY="0011223344556"

#WEP einschalten
wlctl wepstatus 1
#Verbindung zum Zielnetz unter Verwendung von $WEP_KEY aufbauen
wlctl join $SSID key $WEP_KEY amode shared
######################################################################

Der Block Verschluesselung muss je nach gewünschter Verschlüsselungsvariante angepasst werden. Im Falle von WEP-64 sind als Schlüssel ($WEP_KEY) 5 Ascii-Zeichen bzw. 10 Hexadezimalwerte ohne Trennzeichen anzugeben. Bei WEP-128 entsprechend 13 Ascii-Zeichen oder 26 Hexadezimalwerte. Im obigen Beispiel ist ein WEP-128 Schlüssel dezimal angegeben.

Caution

WPA-PSK wird erst ab Version 0.1.1 unterstützt!

WPA-PSK

CHANNEL="11"

#WLAN einschalten
wlctl up
#WLAN AP-Modus deaktivieren/Client Modus aktivieren
wlctl ap 0
#Channel einstellen
wlctl channel $CHANNEL
#Bridging einschalten
wlctl wet 1

brctl addif br0 wl0
ifconfig wl0 up
ifconfig eth0 up

ebtables -t broute -A BROUTING -p arp -j ACCEPT
ebtables -t broute -A BROUTING -p ipv4 -j ACCEPT
ebtables -t broute -A BROUTING -j DROP

###############################Verschluesselung#######################
SSID="WPA_Beispiel"
WPA_PSK="0011223344556"

#WEP ausschalten
wlctl wepstatus 0
#Verbindung zum Zielnetz unter Verwendung von $WPA_PSK aufbauen
nas -i wl0 -S -m 4 -k $WPA_PSK -s $SSID -w 6 -g 3600
######################################################################

Die ebtables-Befehle müssen zwingend mit ausgeführt werden, da sonst die bei WPA gesendeten EAPOL-Pakete nicht vom nas-Programm behandelt werden können. Dies hat zur Folge das sich der Router nicht am gewünschten Access-Point anmelden kann.

Die Regeln sorgen dafür, dass nur ARP- und IPv4-Pakete (also normaler Traffic) gebridged werden. Die Anweisung ebtables -t broute -A BROUTING -p 0x888e -j DROP, welche die obigen Regeln ersetzen könnte, funktioniert leider aus unerfindlichen Gründen nicht.

Informationen zu nas sind hier zu finden.

Individuelle DHCP- und DNS-Optionen

Im BS-Image wird nicht der udhcpd als DHCP-Server verwendet. Stattdessen wird dnsmasq genutzt, der ein sehr flexibel und leicht zu konfigurierender DHCP- und zugleich auch ein DNS-Server ist.

Für den normalen Gebrauch ist der DHCP- und DNS-Server mit der Konfiguration über das Web-Interface völlig ausreichend. Aber wenn sehr spezielle oder exotische Optionen benötigt werden, kann die Konfiguration an die jeweiligen Bedürfnisse angepasst werden.

BS-Version 0.1.0

Die Konfigurationsdateien sind /var/dhcp.dnsmasq für DHCP und /var/dns.dnsmasq für DNS. Die Optionen können einfach in den Dateien angefügt werden:

 ## NTP-Server Option "ptbtime1.ptb.de"
 echo "dhcp-option=42,192.53.103.108" >> /var/dhcp.dnsmasq

Danach muss der dnsmasq nur noch neu gestartet werden:

 ## 'dnsmasq' beenden...
 kill `pidof dnsmasq`
 ## ...und neu starten
 dnsmasq -C /etc/dnsmasq.conf &

Die Konfiguration für den DNS-Server ist äquivalent.

Diese manuelle Konfiguration bleibt natürlich nur solange bestehen, bis der Router neu gestartet oder durch eine Konfiguration per Web-Interface überschreiben wird.

Um die Änderungen persistent, über einen Reboot hinweg, zu sichern, müssen diese im NVRAM gespeichert werden. Diese sind am besten im custom_script aufgehoben.

Ab BS-Version 0.1.1

Mit der Version 0.1.1 wurde die individuelle DHCP- und DNS-Konfiguration vereinfacht und verbessert. Für zusätzliche DHCP- und DNS-Optionen sind die NVRAM-Variablen dhcp_custom für DHCP und dns_custom für DNS vorgesehen, um sie persistent zu speichern. Diese werden nun beim Erstellen der Konfiguationsdateien für dnsmasq berücksichtig.

Beispiel:

 ## DHCP NTP-Server Option
 echo "dhcp-option=42,192.53.103.108" > /var/dhcp.custom
 ## weitere Optionen
 ...

 ## DHCP-Optionen im NVRAM speichern
 nvram setfile dhcp_custom=/var/dhcp.custom
 ## Custom-Optionen sollen im DHCP-Startskript berücksichtig werden...
 nvram set dhcp_custom_start=1

 ## `dnsmasq` mit neuen Optionen starten
 /etc/start_scripts/dhcp_dns.sh restart

Ebenso einfach können DNS-Optionen gesetzt werden. Es ist dann jeweils nur dns_custom statt dhcp_custom und dns_custom_start statt dhcp_custom_start zu verwenden!

Warning
Ab Version 0.2.1

Ab BS-Version 0.2.1 werder alle Änderungen erst nach einem nvram commit in den NVRAM geschrieben!

NVRAM-Parameter

Parameter Beschreibung Werte
dhcp_custom NVRAM-Parameter in dem DHCP-Optionen gespeichert werden DHCP-Optionen
dns_custom NVRAM-Parameter in dem DNS-Optionen gespeichert werden DNS-Optionen
dhcp_custom_start Ist diser Parameter auf 1 gesetzt werden die custom-DHCP-Optionen verwendet 1 oder 0 (1=An; 0=Aus)
dns_custom_start Ist diser Parameter auf 1 gesetzt werden die custom-DNS-Optionen verwendet 1 oder 0 (1=An; 0=Aus)

DHCP-Optionen

Einige DHCP-Optionen die evtl. gesetzt werden müssen.

Option Bedeutung Beispiel
7 MIT-LCS UDP Log Server dhcp-option=7,192.168.2.250
9 LPR Drucker Server dhcp-option=9,192.168.2.250
19 IP Forwarding An/Aus dhcp-option=19,0
23 standard TTL (time-to-live) dhcp-option=23,32
33 statische Routeneinträge dhcp-option=33,111.10.23.9,192.168.2.251
40 Network Information Service (NIS) Domainname dhcp-option=40,nis01
41 Network Information Service (NIS) Server dhcp-option=41,192.168.2.250
42 NTP-Server dhcp-option=42,192.53.103.108
44 NetBIOS over TCP/IP Name Server dhcp-option=44,192.168.2.250
45 NetBIOS over TCP/IP Datagram Distribution Server dhcp-option=45,192.168.2.250
46 NetBIOS over TCP/IP Node Type (0x1=B-node; 0x2=P-node; 0x4=M-node; 0x8=H-node) dhcp-option=46,1
68 Mobile IP Home Agent dhcp-option=68,192.168.2.251
69 Simple Mail Transport Protocol (SMTP) Server dhcp-option=69,192.168.2.250
252 Web Proxy Autodiscovery Protocol (WPAD) dhcp-option=252,"http://wpad/wpad.dat"
Caution

Viele DHCP-Optionen werden vom DHCP-Server nur gesendet, wenn diese vom DHCP-Client explizit angefordert werden!

So muss beispielsweise der in Debian-basierenden Distributionen enthaltene DHCP-Client dhclient so konfiguriert werden, das er die NTP-Option abfragt:

in /etc/dhcp3/dhclient.conf >>request ntp-servers<<.

PPP over Ethernet

Möchte man ein PPPoE-Verbindung nicht nur über das WAN-Interface (DSL) sondern auch über Ethernet oder WLAN etablieren, kann man wie folgt vorgehen:

# pppd -c 1.32.1 -i eth0 -u USERNAME -p PASSWORT -f 0 -P 1 -d &
pppoe device is init.

Hat sich das ADSL-Modem noch nicht synchronisiert oder besteht keine DSL-Verbindung, wartet der pppd bis eine DSL-Verbindung aufgebaut ist. Dabei ist es egal welches Interface, in diesem Beispiel die Ethernet-Schnittstelle, der pppd verwenden soll.

Mit dem folgenden Befehl kann dem pppd eine DSL-Verbindung vorgetäuscht werden:

# echo "1" > /proc/var/fyi/wan/ppp_1_32_1/wanup

Wenn der pppd daraufhin seine Arbeit nicht aufnimmt, muss der echo-Befehl wiederholt werden, bis er beginnt eine PPP-Session zu starten:

ioctl(PPPIOCSNPMODE, 33, 0): Inappropriate ioctl for device (25)
ioctl(PPPIOCSNPMODE, 33, 3): Inappropriate ioctl for device (25)
read /dev/ppp: No such device or address
Starting link
PPP: PPP1_32_1 Start to connect ...
Sending PADI
Sent packet: Ether addr: ff:ff:ff:ff:ff:ff
 (PPPOE Discovery)
[...]

Parameter

Hier einige Parameter für den pppd

Parameter Bedeutung
-i <DEVICE> Das Interface das der pppd nutzen soll
-u <USERNAME> Der Benutzername
-p <PASSWORT> Das Passwort
-q <IP> Der pppd nutzt eine feste IP-Adresse
-M <MTU> MTU - Maximum Transmission Unit
-f <AUTH> Authentifizierungsmethode (0-Auto; 1-PAP; 2-CHAP; 3-MSCHAP)
-P <0|1> Dauerhafte Verbindung (0-nein; 1-ja)
-k <0|1> Automisch Verbinden (0-nein; 1-ja) (ist "-k 1" muss auch die Option "-P 0" angegeben werden)
-o <Sec> Verbindung trennen nach <Sec> Skeunden inaktivität (mit "-P 0")
-m <SessionInfo> Die Session-Info wird in /proc/var/fyi/wan/ppp_$VPI_$VCI_1/sessinfo gespeichert. Diese Option kann die PPP-Einwahl beschleunigen.
-d Debug

Web Proxy Autodiscovery Protocol (WPAD)

WPAD ist ein Protokoll mit dem Web-Browser eigenständig ermitteln welche Web-Proxys für unterschiedliche Ziele zu verwenden sind. Dies benötigt man vorallem wenn mehrere Proxys für verschiedene Ziele gleichzeitig benutzt werden müssen. Denn üblicherweise ist es nur möglich einen einzigen Proxy in der Web-Browser Konfiguration anzugeben. Aber auch wenn nur ein Proxy genutzt werden muss, kann WPAD nützlich sein. Nämlich dann, wenn man sich zum Beispiel mit einem Laptop öfter in verschieden Netzen befindet.

Caution

WPAD wird erst ab BS-Version 0.1.1 unterstützt!

wpad.dat

Die Proxy-Autokonfiguration wird üblicherweise in der Datei wpad.dat gespeichert. Diese könnte beispielsweise so aussehen:

function FindProxyForURL(url, host)
{
 if(isPlainHostName(host))
 {
   // Lokale Adressen wie 'file:///...' ohne Proxy
   return ("DIRECT");
 }
 else if(isInNet(host, "192.168.0.0", "255.255.0.0"))
 {
   // alle Hosts im 192.168.-er Netz sind direkt zu erreichen
   return ("DIRECT");
 }
 else if(isInNet(host, "10.0.0.0", "255.0.0.0"))
  {
   // alle Hosts im 10-er Netz über den 'internen' Proxy
   return ("PROXY 192.168.2.250:3128");
  }

 // alle restlichen Ziele über den 'externen' Proxy
 return ("PROXY 192.168.2.253:8080");
}

Mit dieser wpad.dat werden die privaten 192-er Netze direkt erreicht, für Web-Server im 10-er Netz ist der interne Proxy zu nutzen und für die restlichen ist der externe Proxy zu verwenden.

Die wpad.dat kann mit folgendem Befehl im NVRAM persistent gespeichert werden:

 ## angenommen 'wpad.dat' liegt in '/var/'
 nvram setfile wpad=/var/wpad.dat
Warning
Ab Version 0.2.1

Ab BS-Version 0.2.1 werder alle Änderungen erst nach einem nvram commit in den NVRAM geschrieben!

Die Datei wpad.dat wird von den Web-Browsern vom WPAD-Server per HTTP-Protokoll heruntergeladen (http://wpad/wpad.dat). Die Datei wpad.dat muss nun in das Web-Verzeichnis des Web-Servers geladen werden. Dazu muss zuerst ein beschreibbarer Bereich im ansonsten schreibgeschützten Web-Root geschaffen werden, anschließend kann die wpad.dat dort abgelegt werden:

 mount -t -tmpfs -o size=5k tmpfs /webs/extra

 ## 'wpa.dat' anlegen
 nvram getfile wpad=/webs/extra/wpad.dat

Der beschreibbare Bereich wird mit 5 kByte Speicher dimensioniert. Dies sollte für die wpad.dat ausreichen, kann aber je nach Bedarf angepasst werden.

Jetzt kann die wpad.dat bereits vom Web-Server des Routers heruntergeladen werden (http://Adresse-des-Router/wpad.dat).

DNS-Konfiguration

Web-Browser finden die wpad.dat auf zwei Arten, entweder per DHCP oder per DNS. Bei der DNS-Variante löst der Web-Browser den Hostnamen wpad auf und versucht anschließend die Datei wpad.dat von http://wpad/wpad.dat zu beziehen. Deshalb muss der Hostname wpad beim DNS-Server registriert werden. Am einfachsten ist dies über das Web-Frontend unter BS-Extras→Network settings→DNS im Bereich Known Hosts.

Dort ist die IP-Adresse des Routers, in der Standardkonfiguration 192.168.2.1, und als Name wpad einzugeben.

Jetzt sollte die wpad.dat unter http://wpad/wpad.dat zur Verfügung stehen und Browser wie Firefox die die DNS-Konfiguration nutzen sollten jetzt funktionieren.

DHCP-Konfiguration

Für WPAD ist nur eine DHCP-Option nötig. Wenn der Hostname wpad beim DNS-Server registriert ist, sieht die Option wie folgt aus:

 dhcp-option=252,"http://wpad/wpad.dat"

Diese Option sollte wie im Abschnitt Individuelle DHCP- und DNS-Optionen beschrieben dem DHCP-Server übergeben werden.

Router-Konfiguration manuell anpassen

Warning
Ab Version 0.3

Ab BS-Version 0.3 werden alle Konfgurationsparameter im NVRAM gespeichert und konnen direkt mit dem nvram-Tool ausgelesen und manipuliert werden. Der cfm der mit der Version 0.3 entfernt wurde, hatte die Routerkonfiguration in Form einer XML-Datei gespeichert. Der folgende Abschnitt wird damit obsolet.

Die Routerkonfiguration wird im NVRAM als XML-Datei gespeichert. An diese Datei kommt man im Normalfall nur heran, wenn sie per Web-Interface (Laden & Sichern→Konfiguration sichern) heruntergeladen wird. Allerdings ist die Konfiguration Verschlüsselt und es ist nur mit relativ hohem Aufwand, wenn überhaupt, möglich die Konfiguration zu ändern.

Das BS-Image schafft hier Abhilfe und bietet eine einfache Möglichkeit die Konfiguration zu editieren.

Caution

Die Router-Konfiguration manuell anpassen ist erst ab BS-Version 0.1.2 möglich.

Durchführung

Nachdem der Login per Telnet oder SSH erfolgt ist, kann die Routerkonfiguration folgendermaßen aus dem NVRAM ausgelesen werden:

 cd /var
 nvram getconfig config.xml

Mit diesem Befehl wird die Routerkonfiguration in die Datei /var/config.xml geschrieben. Anschließend kann die XML-Datei mit dem Editor vi bearbeitet werden:

 vi config.xml

Wurden alle Änderungen vorgenommen und gespeichert, kann die Konfiguration wieder in den NVRAM geschrieben werden:

 nvram setconfig config.xml

Das war es auch schon! Nach dem Neustart werden alle Änderungen aktiv.

DSL/ATM-Parameter verändern

Bei manchen Providern tritt das Problem auf, das die voreingestellten ATM-Parameter (Virtual Path Identifier (VPI), Virtual Channel Identifer (VCI)) nicht funktionieren. Die Standard-Settings hierfür sind VPI/VCI gleich 1/32. Dieses Problem ist z.B. bei NetCologne-, Alice- und bei älteren Arcor-Anschlüssen sowie in Österreich aufgetreten. Dieses Howto zeigt, wie ATM-Parameter geändert werden können.

Tip ATM-Paramete können ab BS-Version 0.2. über das Web-Interface verändert werden.

Durchführung

Zur Demonstartion werden in diesem Beispiel die VPI/VCI-Parameter von 1/32 auf 8/35 geändert. Um dies zu tun, muss die Routerkonfiguration, wie im Abschnitt "Router-Konfiguration manuell anpassen" beschrieben, verändert werden.

Zuerst muss die Konfiguration aus dem NVRAM geladen werden, danach kann sie bearbeitet werden. Dazu wird hier der Editor vi verwendet.

 cd /var
 nvram getconfig config.xml
 vi config.xml

Im folgenden Listing sind die relevanten Teile der Konfiguration zu sehen:

[...]
<AtmCfgVcc>
<vccId1 vpi="1" vci="32" tdId="1" aalType="AAL5" adminStatus="up" encap="llc" qos="enable"/>
</AtmCfgVcc>

[...]

<pppsrv_1_32>
<ppp_conId1 userName="" password="" serviceName="" isIdleTimeout="0" idleTimeout="0" [...]
</pppsrv_1_32>
<wan_1_32>
<entry1 vccId="1" conId="1" name="" protocol="PPPOE" encap="LLC" igmp="enable" [...]
</wan_1_32>
[...]

Die rot eingefärbten Textstellen müssen an die neuen Parameter angepasst werden, es reicht nicht nur die Attribute vpi und vci zu Ändern:

[...]
<AtmCfgVcc>
<vccId1 vpi="8" vci="35" tdId="1" aalType="AAL5" adminStatus="up" encap="llc" qos="enable"/>
</AtmCfgVcc>

[...]

<pppsrv_8_35>
<ppp_conId1 userName="" password="" serviceName="" isIdleTimeout="0" idleTimeout="0" [...]
</pppsrv_8_35>
<wan_8_35>
<entry1 vccId="1" conId="1" name="" protocol="PPPOE" encap="LLC" igmp="enable" [...]
</wan_8_35>
[...]

Nachdem die Änderungen an der Konfiguration vorgenommen und gespeichert wurden, kann diese in den NVRAM geschrieben werden:

 nvram setconfig config.xml
Warning
Ab Version 0.2.1

Ab BS-Version 0.2.1 werder alle Änderungen erst nach einem nvram commit in den NVRAM geschrieben!

Nach dem Ausschalten und Neustarten des Routers werden die Änderungen wirksam.

Betrieb des Routers an einem Kabelmodem

Erklärung

Für den Betrieb hinter einem Kabelmodem ist dieser Routertyp eigentlich nicht so gut geeignet, aber es sollte mit einigen Einschränkungen trotzdem funktionieren. Zunächst ist zu beachten, dass der DSL-Port in diesem Szenario keine Anwendung findet, da mit diesem keine Verwendung als normaler Ethernet-Port möglich ist (zumindest soweit wir wissen). Aus diesem Grunde, verwende ich für dieses Howto den normalen LAN-Port für die Verbindung mit dem Kabelmodem und alle anderen PCs im LAN sollten über WLAN dann auf das Internet zugreifen.

Durchführung

Da die Konfiguration sehr individuell ist, nehme ich alle Einstellungen manuell über das custom_script vor. Also folgende Teilschritte durchführen:

  1. custom-Startskript konfigurieren Eigene Startskripte und Konfigurationen

  2. manuelle Einstellungen in custom_script wie folgt einfügen:

Zunächst mit telnet oder ssh auf den Router und dann in die Datei /var/custom_script.sh folgende Zeilen einfügen:

#WLAN Bridging ausschalten
wlctl wet 0

#eth0 aus Bridge entfernen
brctl delif br0 eth0
#LAN Interface hochfahren
ifconfig eth0 up
#DHCP Adresse vom Kabelmodem beziehen
udhcpc -i eth0 -b -s /etc/start_scripts/udhcpc_set.sh
#NAT/MANGLE Firewall Regeln löschen
#ich hoffe die Filterregeln passen dann noch
iptables -t nat -F
iptables -t mangle -F

#NAT in Firewall manuell setzen
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Caution

Durch die manuelle Konfiguration aller Einstellungen über das custom_script, werden alle über das Web-Interface getroffenen Einstellungen bezüglich LAN und Port-Forwarding/Weiterleitungsregeln wirkungslos. Auch bei den Filterregeln wäre ich sehr vorsichtig, denn es kann passieren das bestimmte Ports/Dienste nun über das Internet erreichbar sind und eine Sicherheitslücke darstellen. Hierzu auf jeden Fall nochmal Nachprüfen und evtl. manuelle Filterregeln setzen.

Ab BS Version 0.3

Ab Version 0.3 kann der Router über das Web-Interface konfiguriert werden, so dass er hinter einem Kabelmodem betrieben werden kann.

Das LAN-Interface ist beim Betrieb hinter dem Kabelmodem gleichzeitig WAN-Interface. Dies wird in Firewall→General Settings beim Punkt WAN interface mit LAN/BRIDGE eingestellt.

In der LAN-Konfiguration LAN muss die Option Get settings via DHCP aktiviert werden. Danach ist der Router bereit für den Einsatzt hinter einem Kabelmodem.

Zeitgesteuerte Zwangstrennung der Online-Verbindung

Erklärung

Für bestimmte Nutzer kann es sinnvoll sein, eine zeitgesteuerte Trennung der Online-Verbindung durchzuführen. Da die meisten Provider selbst in bestimmten Abständen die Verbindung trennen, kann dies zum kurzzeitigen Ausfall der Verbindung im normalen Tagesbetrieb führen. Aus diesem Grunde folgendes Howto um mittels Cron-Job die Trennung zum gewünschten Zeitpunkt regelmässig durchzuführen.

Durchführung

Die Konfiguration erfolgt in folgenden Teilschritten:

  1. custom-Startskript konfigurieren Eigene Startskripte und Konfigurationen

  2. manuelle Einstellungen in custom_script wie folgt einfügen:

Zunächst mit telnet oder ssh auf den Router und dann in die Datei /var/custom_script.sh folgende Zeilen einfügen:

#Verzögerung in Sekunden bis Reconnect
DELAY=10

CRONDIR="/var/spool/cron/crontabs/"
IP="ifconfig br0|grep \"inet addr\" \
|sed -n -e 's/^.*addr:\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*Bcast.*/\1/p'"
WGET="wget -O /dev/null http://\`$IP\`/cgi-bin"

#cron Verzeichnis anlegen
mkdir -p $CRONDIR
#cronjob einfügen
echo "0 1 * * * $WGET/disconnect.exe; sleep $DELAY; $WGET/connect.exe;" > $CRONDIR/root

#crond starten
crond

Router steuern per Telefon - Eigene Funktionen

Ab BS Version 0.2.1 kann der Router auch per Telefon gesteuert und konfiguriert werden. Es sind einige Standardfunktionen vorgeben (siehe Doku), aber es ist natürlich auch möglich individuelle Funktionen/Aktionen via Telefon zu starten.

Erklärung

Das Programm vodsl_monitor überwacht das Telefon und startet bei jedem Ereignis das eintritt ein Skript (/usr/bin/call_mon_event.sh), das die Ereignisse auswertet und ggf. eine der vorgegebenen Standardfunktionen ausführt. Ist für ein Ereignis keine Standardfunktion vorgegeben wird stattdessen ein Custom-Skript gestartet falls ein solches vorhanden ist.

Ereignisse

Es können drei Ereignisse auftreten:

  1. RING - eingehender Ruf (das Telefon klingelt)

  2. DISCONNECT - der eingehende Ruf wurde beendet

  3. CALL - ein ausgehender Ruf wurde beendet

Das Ereignis CALL ist auszuwerten, wenn Aktionen via Telefoncodes gestartet werden sollen.

Informationen zu den Ereignissen

Das Event-Skript als auch das Custom-Skript erhalten neben dem Ereignis noch zusätzliche Informationen über das Ereignis bzw. den Ruf. Folgende Parameter werden den Skripten übergeben:

Parameter Werte Beschreibung
EVENT CALL; RING; DISCONNECT das Ereignis
CALLER Rufnummer die * enthalten kann beim Ereignis RING bzw. DISCONNECT enthält CALLER die Rufnummer des Rufenden sonst die Rufnummer die gewählt wurde
LINE 1; 2 dieser Parameter gibt an von welcher TAE-Buchse das Ereignis ausgeht
EVENT_DATE z.B. 06.06.08 12:47:13 Datum und Uhrzeit an dem das Ereignis eingetreten ist
DURATION eine Zeitangabe in Sekunden dieser Parameter gibt die Dauer der Verbindung an

Diese Parameter werden dem Event- sowie dem Custom-Skript als Umgebungsvariable als auch als Übergabeparameter, in der hier angegebenen Reihenfolge, zugänglich gemacht.

NVRAM Parameter

Für individuelle Funktionen ist nur ein NVRAM Parameter notwendig - das Custom-Skript selbst, welches im NVRAM unter custom_call_event abgelegt sein muss.

Standardfunktionen

Das folgende Listing zeigt das Standard-Event-Skript (/usr/bin/call_mon_event.sh), es kann als Vorlage für eigene Skripte dienen:

#!/bin/sh

[ "$#" -lt "5" ] && exit 1

export PATH=/bin:/etc/start_scripts:$PATH
CUSTOM="/var/custom_call_event.sh"

load_custom_script ()
{
 if [ ! -e $CUSTOM ]
 then
   RET=`nvram getfile custom_call_event=$CUSTOM`
   [ "$RET" == "Failed" ] && exit 0
 fi
 chmod +x $CUSTOM
 #$CUSTOM $@
 /bin/sh $CUSTOM $@
}

echo "Call event..."
ledtool 1 3

if [ "$EVENT" == "CALL" ]
then
 case "$CALLER" in
  "77*0*")
        echo "SSH start"
        start=`nvram get ssh_start`
        [ "$start" != "1" ] || nvram set ssh_start=1 >/dev/null 2>/dev/null
        ssh.sh restart
        ;;
  "77*1*")
        echo "SSH stop"
        ssh.sh stop
        ;;
  "77*2*"*)
        echo "set IP to br0"
        IP=`echo "$CALLER"|sed -e 's/^77\*2\*//'|sed -e 's/[*]/./g'`
        IP=`/webs/cgi-bin/isip.sh $IP`
        echo $IP
        [ "$IP" != "ERROR" ] && ifconfig br0 $IP up
        ;;
  "77*3*12345")
        echo "flush firewall"
        iptables -F
        iptables -P INPUT ACCEPT
        iptables -P OUTPUT ACCEPT
        iptables -P FORWARD ACCEPT
        #iptables -t nat -F
        #iptables -t mangle -F
        ;;
  "77*4*12345")
        echo "flush ebtables"
        ebtables -F
        ebtables -P INPUT ACCEPT
        ebtables -P OUTPUT ACCEPT
        ebtables -P FORWARD ACCEPT
        ebtables -t nat -F
        #ebtables -t broute -F
        ;;
  "77*5*")
        echo "flash LEDs"
        ledtool X 7
        ledtool X 10
        sleep 1
        ledtool 0 1
        ;;
  "96*0*")
        echo "WLAN start"
        wlctl up
        ;;
  "96*1*")
        echo "WLAN stop"
        wlctl down
        ;;
  "96*4*")
        echo "Call monitor server start"
        nvram set call_mon_start=1
        call_mon.sh restart
        ;;
  "96*5*")
        echo "Call monitor server stop"
        nvram set call_mon_start=0
        call_mon.sh restart
        ;;
  "96*7*")
        echo "telnet start"
        start=`nvram get telnet_start`
        [ "$start" != "1" ] && nvram set telnet_start=1 >/dev/null 2>/dev/null
        telnet.sh restart
        ;;
  "96*8*")
        echo "telnet stop"
        telnet.sh stop
        ;;
  "990*15901590*")
        echo "reboot"
        nvram reboot
        ;;
  "991*15901590*")
        echo "nvram reset and reboot"
        nvram reset
        nvram reboot
        ;;
  *)
     load_custom_script $@
     ;;
 esac

 exit 0
fi

if [ "$EVENT" == "RING" ]
then
 case "$CALLER" in
   *)
      load_custom_script $@
      ;;
 esac
 exit 0
fi

if [ "$EVENT" == "DISCONNECT" ]
then
 case "$CALLER" in
   *)
      load_custom_script $@
      ;;
 esac
 exit 0
fi

Durchführung

Zur Demonstration soll ein einfaches Custom-Skript dienen, das nur zwei Aktionen auslöst. Zum Einen wird nach der Eingabe des Tastencodes abheben \#55*0*\# auflegen der Rechner mit der MAC-Adresse "00:00:FB:25:DA:4C" per Wake-On-LAN aufgeweckt. Zum Anderen wird bei einem eingehenden Ruf von "0162123456" eine Firewallregel gesetzt oder gelöscht, die den Zugriff auf den Web-Server des Rechners mit der privaten IP-Adresse "192.168.1.1" ermöglicht.

Zunächst mit telnet oder ssh auf den Router und dann in die Datei /var/custom_call_script.sh folgende Zeilen einfügen:

#!/bin/sh

[ "$#" -lt "5" ] && exit 1
echo "Call custom event..."

if [ "$EVENT" == "CALL" ]
then
 case "$CALLER" in
  "55*0*")
     etherwake 00:00:FB:25:DA:4C
     ;;
  *)
     # sonst nix
     ;;
 esac

 exit 0
fi

if [ "$EVENT" == "RING" ]
then
 case "$CALLER" in
   "0162123456")
      OPEN=`cat /var/custom_fw_open` 2>/dev/null
      if [ "$OPEN" != "1" ]; then
        # Firewall oeffnen
        echo "1" > /var/custom_fw_open
        iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.1:80
      else
        # Firewall schliessen
        echo "0" > /var/custom_fw_open
        iptables -t nat -D PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.1:80
      fi
      ;;
   *)
      # sonst nix
      ;;
 esac
 exit 0
fi

if [ "$EVENT" == "DISCONNECT" ]
then
 case "$CALLER" in
   *)
      # sonst nix
      ;;
 esac
 exit 0
fi

Anschließend kann das Skript im NVRAM abgelegt und persistent gespeichert werden:

nvram setfile custom_call_event=/var/custom_call_script.sh
nvram commit

Portknocking

Portknocking ist eine Technik mit der man einem Host, der mit einer Firewall geschützt ist und dadurch eigentlich keine Information erhalten kann, Signale geben kann. Dazu werden in der Regel TCP- und/oder UDP-Datagramme an den Host gesendet. Mit diesen wird gewissermaßen "angeklopft". Aber auch diese Datagramme werden von der Firewall verworfen. Nur wenn in einer festgelegten Zeitspanne eine bestimmte Sequenz von Datagrammen empfangen wird, löst dies eine Reaktion aus. Die Sequenz besteht aus mehreren Datagrammen die an unterschiedliche Ports gesendet werden, im Fall von TCP können auch noch die TCP-Flags variiert werden.

Mit Hilfe des Portknocking können so z.B. Ports in der Firewall geöffnet oder Programme gestartet werden. Der Fantasie sind da keine Grenzen gesetzt.

Ab BS Version 0.3 ist für das Portknocking das Programm tportknockd im Image integriert. Die folgenden Abschnitte beschreiben wie der tportknockd konfiguriert und betrieben wird.

Konfiguration

Die Konfiguration der knock-Sequenzen wird in einer Konfigurationsdatei festgehalten. Die Konfiguration kann mehrere knock-Sequenzen enthalten, die unterschiedliche Aktionen auslösen.

Für jedes Ereignis gibt es einen eigenen Konfigurationsblock. Dieser wird mit <EVENT_NAME> eingeleitet und mit </EVENT_NAME> abgeschlossen. Jedes Ereignis erhält einen eindeutigen Namen.

Für jedes Ereignis muss die knock-Sequenz, eine Zeitspanne (timeout) in der die Sequenz beendet werden muss und ein Kommando (start_command) enthalten, das ausgeführt wird, nachdem das knock-Ereignis ausgelöst wurde. Optional kann noch ein zweites Kommando (stop_command) angegeben werden, das nach einer angegeben Verzögerung (command_delay) ausgeführt wird.

 <EVENT_NAME>                    # Definition des knock event namens "EVENT_NAME"
   sequence = {knock event}*     # port knocking Sequenz
   timeout  = {in seconds}       # timeout der knock Sequenz
   start_command = {command}     # Kommando das nach der richtigen Sequenz ausgeführt wird
   stop_command  = {command}     # (optional) ein zweites Kommando mit einer kurzen Verzögerung
   command_delay = {in seconds}  # (optional) Verzögerung für das zweite Kommando
 </EVENT_NAME>                   # Ende des events "EVENT_NAME"

Die knock-Sequenz besteht aus einer mit Leerzeichen separierten Liste mit Frames, mit der die Sequenz beschrieben wird. Für jedes Frame der Sequenz muss das verwendet Protokoll (TCP oder UDP) und der Port angegeben werden. Für TCP können auch Flags bzw. Flag-Kombinationen angegeben werden. Protokoll, Port und Flags werden mit einem Doppelpunkt (:) voneinander getrennt.

 knock event ::= protocol:port[:{tcp flags}*]
   protocol  ::= tcp|udp
   port      ::= 1..65535
   tcp flags ::= fsrpauxni

Für die TCP-Flags sind folgende Angaben möglich:

 tcp flags description:  f - Fin flag
                         s - Syn flag
                         r - Reset flag
                         p - Push flag
                         a - Ack flag
                         u - Urgent flag
                         x - X-mas (alle Flags sind gesetzt)
                         n - None (kein Flag ist gesetzt)
                         i - Ignore (alle Flags werden ignoriert)

diese können auch kombiniert werden. Werden keine Flags angegeben, wird (n - None) impliziert.

Ist im start_command oder stop_command ein "%IP%" enthalten, wird dies durch die IP-Adresse des Hosts ersetzt, der das knock-Ereignis ausgelöst hat.

Aus Gründen der Performance sollten alle knock-Sequenzen mit Ports und Flag Kombinationen beginnen, die nicht durch die "normale" Kommuniaktion aufgelöst werden.

Beispiele für knock-Ereignisse

Das folgende knock-Ereignis wird ausgelöst, wenn die Sequenz aus UDP- und TCP-Frames innerhalb von 10 Sekunden durchlaufen wird. Danach können TCP-Frames die an den Port 22 (typischerweise SSH) gerichtet sind, vom Host der das knock-Ereignis auslöste, die Firewall passieren. Die Firewall wird nach 30 Sekunden wieder geschlossen. Bei einer statefull Firewall bleiben aber Verbindung, die zuvor etabliert wurden, bestehen.

<SSH>
 sequence      = udp:1234 tcp:543 tcp:543:i tcp:123:frap tcp:434:x tcp:2345:n
 timeout       = 10
 start_command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 command_delay = 30
</SSH>

Das folgende Beispiel zeigt, dass nach dem knock-Ereignis der OpenVPN Client gestartet wird und zum OpenVPN Server mit der IP %IP% (also dem Host der das knock-Ereignis auslöste) eine Verbindung aufbaut.

<OpenVPN>
 sequence      = tcp:12430:a tcp:2711:i tcp:123:i tcp:8375:n tcp:1155:n
 timeout       = 10
 start_command = /bin/openvpn --remote %IP% --config /opt/openvpn/client.conf
</OpenVPN>

Ist der Datenverkehr zum Beispiel durch eine (Firmen-)Firewall auf wenige Ports beschränkt, kann das "anklopfen" auch mit verschiedenen TCP-Flag Kombinationen realisiert werden.

<SSH2>
 sequence      = tcp:110:x tcp:110:up tcp:110:up tcp:110:n tcp:110:i
 timeout       = 10
 start_command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 command_delay = 30
</SSH2>

Starten

Die Parameter die dem tportknockd übergeben werden können und müssen, sind in der Folgenden Tabelle aufgelistet:

Parameter Beschreibung
-c <config> Konfigurationsdatei mit den knock-Sequenzen
-C <config> Überprüfe die angegebene Konfigurationsdatei mit den knock-Sequenzen. Fehler in der Konfigurationsdatei und die verwendeten knock-Sequenzen werden angezeigt.
-i <device> Interface das überwacht wird
-r <sec> tportknockd schaut in jedes eingehende Datenpaket und prüft , ob es an das Device adressiert ist , das überwacht wird. Ändert sich die Adresse während des Betriebs , werden die eingehenden Frames nicht richtig erkannt. Mit der Option -r wird aller <sec> Sekunden die Adresse aktualisiert , so dass die korrekte Funktion sicher gestellt ist. Diese Option ist sinnvoll , wenn sich die Adresse regelmäßig ändert. Beispielsweise durch die 24h-Zwangstrennung vieler Internetprovider.
-l es werden alle verfügbaren Netzwerkgeräte aufgelistet
-d Debug
-D Daemon mode
-h Hilfe
Caution Bevor der tportknockd gestartet wird, sollte die Konfigurationsdatei mit der Option -C überprüft werden!

Ist die Konfigurationsdatei mit den knock-Sequenzen "/opt/knock.conf" und soll das PPP-Device überwacht werden, kann der tportknockd mit folgendem Aufruf, beispielsweise mit dem Custom script, gestartet werden:

 tportknockd -c /opt/knock.conf -i ppp_1_32_1 -r 60 -D

Startskript

Wenn das Device das der tportknockd überwachen soll (noch) nicht verfügbar ist, beendet sich der tportknockd mit einer entsprechenden Fehlermeldung. Beispielsweise kann dies passieren, wenn der tportknockd das PPP-Device überwachen soll und direkt nach dem Booten gestartet wird, aber die PPP-Verbindung noch nicht etabliert wurde.

Um dieses Problem zu umgehen, ist es Sinnvoll, zuerst zu prüfen ob das Device verfügbar ist und erst dann, wenn z.B. die PPP-Verbindung aufgebaut wurde, den tportknockd zu starten. Das folgende Skript zeigt, wie dies umgesetzt werden kann.

#!/bin/sh

atm_vpi=`nvram get atm_vpi`
[ "$atm_vpi" = "Failed" ] && atm_vpi=1
atm_vci=`nvram get atm_vci`
[ "$atm_vci" = "Failed" ] && atm_vci=32

CONFIG="/opt/knock.conf"
DEVICE="ppp_${atm_vpi}_${atm_vci}_1"
IP_REFRESH=60

ifconfig $DEVICE >/dev/null 2>/dev/null
ret=$?
while [ "$ret" != "0" ]
do
  sleep 5
  ifconfig $DEVICE >/dev/null 2>/dev/null
  ret=$?
done

tportknockd -c $CONFIG -i $DEVICE -r $IP_REFRESH -D

Wenn der tportknockd einmal läuft, dann kann er auch mit dem zeitweisen "verschwinden" (z.B. bei der DSL Zwangstrennung) des Device umgehen, wenn die Option -r angegeben wurde.

Verwendung des RADIUS-Server mit WLAN WPA-/WPA2-Enterprise

Ab BS Version 0.3.0 sind Imagevarianten verfügbar, welche den RADIUS-Server haprad enthalten. Dieser basiert auf dem sehr bekannten HostAP, welcher um die meisten Codeteile erleichtert wurde, um einen schlanken RADIUS-Server zur Authentifizierung von WLAN-Zugängen zu erhalten.

Erklärung

Der haprad ist für die Verwendung als Authentifizierungsserver für WLAN’s bestimmt. In den meisten Fällen wird ein WLAN meist mit einem shared key gesichert, d.h. alle Nutzer erhalten ein und denselben Schlüssel um sich am WLAN anzumelden (z.B. WEP oder WPA-/WPA2-PSK). Es kann jedoch sinnvoll sein, jedem Nutzer ein eigenes Zugangspasswort oder ein eigenes Zertifikat zu vergeben. Dies erlaubt dem Administrator einzelne Nutzer zu kontrollieren und ggf. zu sperren. Bei einem shared key hingegegen, muss dieser nach einer Änderung wieder an alle Nutzer verteilt werden.

Die nutzerbezogene Authentifizierung von WLAN-Zugängen stellt das sicherste Verfahren zur Verschlüsselung von WLAN-Verbindungen dar, da der für die Verschlüsselung verwendete PMK (Pairwise Master Key) bei jedem Authentifizierungsvorgang neu erzeugt wird. Dadurch ist jede WLAN-Verbindung jedes Nutzers mit einem anderen Schlüssel gesichert und ändert sich auch nach dem Neuanmelden wieder. Aus diesem Grunde sind Angriffe auf die eigentliche Verschlüsselung praktisch undenkbar.

Durchführung

Im folgenden soll der haprad-Server für die Authentifizierung von Nutzern mittels Nutzername/Passwort unter Verwendung der EAP-Methode PEAP-MSCHAPv2 konfiguriert werden. Dies hat den Vorteil, dass sowohl Windows-Clients (ab Windows XP SP2) als auch Linux-Clients (z.B. mittels WPA-Supplicant) dieses Verfahren beherrschen.

Die Konfiguration erfolgt in folgenden Teilschritten:

  1. Erzeugen der Zertifikate für den RADIUS-Server

    • ca.crt Zertifikat der Zertifizierungsstelle

    • radserver_cert.crt Serverzertifikat

    • radserver_cert.key Private-Key zum Serverzertifikat

  2. Erzeugen der Konfigurationsdatei haprad.conf

  3. Erzeugen der Konfigurationsdatei haprad.radius_clients

  4. Erzeugen der Nutzerdatenbank haprad.eap_user

  5. Kopieren der RADIUS-Konfiguration auf den Router

  6. Konfigurieren der WLAN-Einstellungen im Web-Interface

  7. Testen der Konfiguration

  8. Eintrag ins custom_script zum Starten des haprad

Tip Die im folgenden schrittweise durchgeführte Beispielkonfiguration kann hier (haprad_conf.tar.gz) heruntergeladen werden. Sollte also jemand zu faul oder nicht in der Lage sein die Schritte 1-4 zu bewältigen kann er die Beispielkonfiguration nutzen und direkt mit Schritt 5 fortfahren.

Wir legen die Konfiguration zunächst auf dem lokalen Rechner an und kopieren dann das gesamte Verzeichnis auf den Router:

#temporäres Verzeichnis für haprad Konfiguration anlegen
mkdir -p /tmp/haprad/keys

zu 1.

Das Erzeugen der Zertifikate kann auf verschiedene Weise erfolgen. An dieser Stelle werden die EasyRSA-Skripte aus dem OpenVPN-Paket genommen.

cd <path_to_openvpn>/openvpn-2.0.9/easy-rsa/2.0/
#jetzt Anpassen der Datei: vars an eigene Wünsche
vi vars

#Variablen setzen
source ./vars
#alles bisherige löschen VORSICHT!!!
./clean-all
#CA-Root Zertifikat erzeugen
./build-ca
#Server Zertifikat erzeugen und durch CA signieren
./build-key-server radserver_cert

cp keys/ca.crt /tmp/haprad/keys/
cp keys/radserver_cert.crt /tmp/haprad/keys/
cp keys/radserver_cert.key /tmp/haprad/keys/

Da das haprad-Konfigurationsverzeichnis später auf dem Router unter /opt liegt, werden alle Pfade bereits so angegeben:

zu 2.

cd /tmp/haprad
#editieren und folgendes Einfügen
vi haprad.conf
...

##### haprad configuration file ##############################################
##### based on hostapd configuration file#####################################

# Empty lines and lines starting with # are ignored

# Path for EAP server user database
eap_user_file=/opt/haprad/haprad.eap_user

# CA certificate (PEM or DER file) for EAP-TLS/PEAP/TTLS
ca_cert=/opt/keys/ca.crt

# Server certificate (PEM or DER file) for EAP-TLS/PEAP/TTLS
server_cert=/opt/keys/radserver_cert.crt


# Private key matching with the server certificate for EAP-TLS/PEAP/TTLS
# This may point to the same file as server_cert if both certificate and key
# are included in a single file. PKCS#12 (PFX) file (.p12/.pfx) can also be
# used by commenting out server_cert and specifying the PFX file as the
# private_key.
private_key=/opt/keys/radserver_cert.key

# Passphrase for private key
#private_key_passwd=radius

# Enable CRL verification.
# Note: hostapd does not yet support CRL downloading based on CDP. Thus, a
# valid CRL signed by the CA is required to be included in the ca_cert file.
# This can be done by using PEM format for CA certificate and CRL and
# concatenating these into one file. Whenever CRL changes, hostapd needs to be
# restarted to take the new CRL into use.
# 0 = do not verify CRLs (default)
# 1 = check the CRL of the user certificate
# 2 = check all CRLs in the certificate path
check_crl=0

##### RADIUS authentication server configuration ##############################

# hostapd can be used as a RADIUS authentication server for other hosts. This
# requires that the integrated EAP authenticator is also enabled and both
# authentication services are sharing the same configuration.

# File name of the RADIUS clients configuration for the RADIUS server. If this
# commented out, RADIUS server is disabled.
radius_server_clients=haprad.radius_clients

# The UDP port number for the RADIUS authentication server
radius_server_auth_port=1812

Im nächsten Schritt geben wir dem haprad mit der Datei haprad.radius_clients bekannt, welche Clients mit welchen Passwörten (genannt shared secret) ihn kontaktieren dürfen. Wir konfigurieren hier den localhost und das shared secret secret:

zu 3.

cd /tmp/haprad
#editieren und folgendes Einfügen
vi haprad.radius_clients
...

# RADIUS client configuration for the RADIUS server
#10.1.2.3        secret passphrase
#192.168.1.0/24  another very secret passphrase
127.0.0.1        secret
#0.0.0.0/0       radius

Die folgende Datei haprad.eap_user enthält alle Nutzer, welche sich später mit dem WLAN verbinden dürfen. Wir konfigurieren hier zwei Beispielnutzer:

zu 4.

cd /tmp/haprad
#editieren und folgendes Einfügen
vi haprad.eap_user
...

# Phase 1 users
"user1"          PEAP
"user2"          PEAP

# Phase 2 (tunnelled within EAP-PEAP or EAP-TTLS) users
"user1"          MSCHAPV2        "verysecret"      [2]
"user2"          MSCHAPV2        "veryverysecret"      [2]

Nun kopieren wir das temporäre Verzeichnis vom lokalen Rechner auf den Router:

zu 5.

scp -r /tmp/haprad root@<ROUTER_IP>:/opt

Jetzt wird die WLAN-Konfiguration auf dem Router angepasst, um den haprad als Authentifizierungsserver zu nutzen:

zu 6.

auf dem Webinterface folgende Einstellungen tätigen:

Network Settings→Wireless LAN→Security Settings

-Security Mode: WPA-Enterprise oder WPA2-Enterprise
-Radius IP-address:  127.0.0.1
-Radius port: 1812
-Radius shared secret: secret

Jetzt testen wir ob die Konfiguration funktioniert indem wir mit telnet oder ssh auf den Router gehen und den haprad manuell starten. Anschließend verbinden wir uns mit einem WindowsXP-Rechner per WLAN mit dem Router:

zu 7.

telnet <ROUTER_IP>
...
#haprad im debug mode starten damit wir alle Ereignisse verfolgen können
/usr/bin/haprad -dddd /opt/haprad/haprad.conf

Jetzt zum WindowsXP-Rechner:

Doppelklick WLAN-Symbol unten rechts→Eigenschaften→Drahtlosnetzwerke→Hinzufügen

-SSID: <Netzwerkname>, z.B. BITSWITCHER
-Netzwerkauth.: WPA
-Reiter->Authentifizierung auswählen
  -EAP-Typ: Geschütztes EAP (PEAP)
  -alle Haken raus
  -Klick->Button Eigenschaften
    -Serverzertifikat prüfen: abwählen (nein)
    -Auth.-Methode: EAP-MSCHAPv2
    -Klick->Button Konfigurieren
      -Automatisch Anmeldenamen verwenden: abwählen (nein)

Jetzt überall "OK" drücken und Einstellungen damit speichern. Jetzt in der Liste der Drahtlosnetzwerke dass eben Konfigurierte auswählen, dann sollte unten eine Meldung erscheinen: "Klicken Sie hier um Anmeldeinformationen einzugeben". Darauf klicken und im folgenden Fenster:

-Nutzername: user1
-Kennwort: verysecret

eingeben und die Authentifizierung sollte erfolgreich ablaufen.

zu 8.

Zu guter Letzt veranlassen wir nach einem erfolgreichen Test in Schritt 7, noch den automatischen Start des RADIUS-Servers. Hierzu im Web-Interface unter System Settings→Administration→Custom script folgende Zeilen ins custom_script einfügen und natürlich auch Start custom script auf On setzen:

 #kill maybe running instances
 killall -9 haprad >/dev/null 2>/dev/null
 #start haprad in daemon mode
 /usr/bin/haprad -B /opt/haprad/haprad.conf

Manuelles Firmware Update

Zunächst muss man sich per Telnet oder SSH auf den Router begeben und Platz für das Image schaffen:

 #falls VoIP an ist, abschalten
 /etc/start_scripts/ata.sh stop
 #temporäres Verzeichnis anlegen
 mkdir /var/image
 mount -t tmpfs -o size=4M tmpfs /var/image

Jetzt das Image per scp (oder winscp) in das temporäre Verzeichnis kopieren:

 scp BS-v0.3.2_bcm96348GWV.img root@192.168.2.1:/var/image

Danach kann das manuelle Firmwareupdate durchgeführt werden:

 #Firmwareupdate durchführen und anschließend Reboot
 fwupdate -u /var/image/BS-v0.3.2_bcm96348GWV.img -r

Wake on LAN

Was ist Wake on LAN?

Wake-on-LAN (WoL) ist eine Technik mit der man einen abgeschalteten Computer mithilfe der eingebauten Netzwerkkarte einschalten kann. Es gibt verschiedene Varianten des WoL. Die verbreitetste Variante basiert auf dem Magic Packet. Das Magic Packet ist ein Datenpaket, das sechs mal den Hexadezimalwert FF und anschließend 16-mal die MAC-Adresse der Netzwerkkarte enthält. Empfängt die Netzwerkkarte ein Magic Packet mit der eigenen MAC-Adresse, löst sie den Start des Computers aus. Das Magic Packet kann mit beliebigen Protokollen (z.B. Ethernet, IP, IPX, UDP) transportiert werden. Üblicherweise werden Magic Packets direkt in Ethernet- oder UDP/IP-Datagrammen übertragen.

Wake on LAN über das BS Web-Interface

Wake on LAN über das BS Web-Interface

Computer können über das BS Web-Interface mit WoL gestartet werden (sieh Bild). Dazu wird das Programm etherwake verwendet. Dieses generiert und sendet Magic Packets die direkt in Ethernet Frames "verpackt" sind (für alle die es interessiert: für Magic Packets wird der Protokoll-Typ 0x0842 verwendet). Deshalb können so "nur" Computer innerhalb des LAN-Segments gestartet werden.

Um einen Computer zu starten, muss nur dessen MAC-Adresse in das Feld "MAC-Address" eingetragen werden. Mit einem klick auf "Run" werden drei Magic Packets gesendet.

Mit einem ARP-Ping kann geprüft werden, ob der/ein Computer an oder aus ist. Hier hätte mach auch einen "normalen" Ping (ICMP Echo Request) nutzen können, aber Mancheiner glaubt durch ICMP Echo Requests irgendeiner Gefahr ausgesetzt zu sein und lässt diese Pakete verwerfen. Um aber dennoch mit Sicherheit feststellen zu können, ob der/ein Computer im LAN-Segment an ist, wird stattdessen ein ARP-Request verwendet. Diesem kann man sich nicht entziehen.

Für einen ARP-Ping muss man nur die IP-Adresse des Computers in das Feld "IP-Address" eintragen und auf "ARP-Ping" klicken.

Die Drop-Down-Liste "known Hosts" und deren Inhalt haben per se nichts mit WoL zu tun. Diese entstammt aus der DHCP-Konfiguration und dient nur als Hilfe, um sich etwas Schreibarbeit zu ersparen. Diese Liste enthält alle Hosts die in der DHCP-Konfiguration separat konfiguriert wurden. Ein klick auf einen Eintrag in der Liste füllt automatisch die Felder "MAC-Address" und "IP-Address" aus.

Wake on LAN per Telefon

Mit der BS Firmware ist es auch möglich einen Computer per Telefon zu wecken. Dafür können Custom Call Events definiert werden. Mit dem folgenden Custom Call Event-Skript kann ein Magic Packet versendet werden, indem man am Telefon, das am Router angeschlossen ist, die Tasten \#55*0\# drückt. Ein Magic Packet wird ebenfalls bei einem eingehenden Anruf mit der Rufnummer "0162123456" gesendet.

#!/bin/sh

[ "$#" -lt "5" ] && exit 1
echo "Call custom event..."

if [ "$EVENT" == "CALL" ]
then
 case "$CALLER" in
  "55*0")
               # hier die richtige MAC-Adresse eintragen
     etherwake 00:00:FB:25:DA:4C
     ;;
  *)
     # sonst nix
     ;;
 esac

 exit 0
fi

if [ "$EVENT" == "RING" ]
then
 case "$CALLER" in
   "0162123456")
                # hier die richtige MAC-Adresse eintragen
      etherwake 00:00:FB:25:DA:4C
      ;;
   *)
      # sonst nix
      ;;
 esac
 exit 0
fi

Dieses Skript muss noch im NVRAM (custom_call_event) gespeichert werden. Näheres dazu ist im Abschnitt Router steuern per Telefon - Eigene Funktionen beschrieben.

Wake on LAN per Portknocking

Portknocking ist eine Technik, mit der man einen Computer trotz Firewall "Signale" senden und Ereignisse auf dem Computer starten kann. Auf diese Weise ist es auch möglich einen Computer im lokalen LAN aus dem Internet zu starten.

Mit der folgenden Konfiguration ist es möglich, zwei Computer im LAN zu starten, wenn man dem Router innerhalb von 10 Sekunden jeweils ein TCP-Frame mit gesetztem SYN-Flag an Port 2000, 3000 und 4000 bzw. 2001, 3001 und 4001 sendet. Was die Konfiguration genau bedeutet und wie man das Portknocking auf dem Router startet, kann im Abschnitt Portknocking nachgelesen werden.

<WoL-PC1>
 sequence      = tcp:2000:s tcp:3000:s tcp:4000:s
 timeout       = 10
 start_command = etherwake 00:00:FB:25:DA:4C
</WoL-PC1>
<WoL-PC2>
 sequence      = tcp:2001:s tcp:3001:s tcp:4001:s
 timeout       = 10
 start_command = etherwake 00:00:FB:25:DA:4D
</WoL-PC2>

Die drei TCP-Frames mit gesetztem SYN-Flag können ganz einfach mit telnet erzeugt werden.

 $> telnet <Router-IP> 2000; telnet <Router-IP> 3000; telnet <Router-IP> 4000

Wake on LAN über "http://stephan.mestrona.net/wol"

Mit Hilfe von http://stephan.mestrona.net/wol kann man UDP/IP-basierte Magic Packets versenden. Diese Pakete erreichen den Router zwangläufig auf dem externen Interface. Damit diese nicht verworfen werden und ins lokale Netz weitergeleitet werden, muss für diese Pakete Portforwarding aktiviert werden. Die Pakete sind UDP Datagramme die an Port 9 gesendet werden.

Um nur einen bestimmten Computer im LAN per WoL zu starten, sind folgende Einstellungen zu tätigen:

  • Im Web-Interface (Firewall Settings / Port forwarding)

    • Public port: 9

    • Protocol: UDP

    • Private IP: IP des zu weckenden Computers

    • Private port: 9 (eigentlich egal)

    • Enable: Haken setzen

  • Statischer ARP-Eintrag für die IP des zu weckenden Computers

    • folgender Eintrag ins custom script:

 arp -s `IP des zu weckenden Computers` `MAC des zu weckenden Computers`
 #Beispiel: arp -s 192.168.1.4 00:1E:16:36:A1:D2
  • Router neu starten - fertig!

Um verschiedene Computer im LAN per WoL zu starten, sind folgende Einstellungen zu tätigen:

  • Im Web-Interface (Firewall Settings / Port forwarding)

    • Public port: 9

    • Protocol: UDP

    • Private IP: eine IP-Adress im Subnetz die nicht verwendet wird

    • Private port: 9 (eigentlich egal)

    • Enable: Haken setzen

  • Statischer ARP-Eintrag für die nicht verwendete IP-Adresse

    • folgender Eintrag ins custom script:

 arp -s `nicht verwendete IP-Adresse` ff:ff:ff:ff:ff:ff
 #Beispiel: arp -s 192.168.1.254 ff:ff:ff:ff:ff:ff
  • Router neu starten - fertig!

Die statischen ARP-Einträge sind nötig, da der Router sonst nicht weiß an welche MAC-Adresse das Frame zu senden ist, wenn der Computer aus ist. Desweiteren ist es mit IPtables nicht möglich, Frames an die Broadcastadresse (z.B. 192.168.1.255) weiterzuleiten. Deshalb ist der Umweg über eine nicht genutzte IP-Adresse in Kombination mit der Ethernet-Broadcastadresse nötig.

Den Computer konfigurieren für Wake on LAN

Damit der Computer über die Netzwerkkarte gestartet werden kann, wenn er abgeschaltet ist, sind am Computer selbst auch noch einige Einstellungen zu tätigen. Die Netzwerkkarte muss natürlich WoL-fähig und mit dem Standby-Stromzweig des Netzteils mit Spannung versorgt werden. Dies und auch WoL muss im BIOS aktiviert werden. Informationen darüber sind dem Handbuch des Mainboards zu entnehmen.

Die Netzwerkkarte muss während des herunterfahrens (z.B. beim "ausschalten", "Suspend to Ram" oder "Suspend to Disk") vom Betriebssystem in den WoL-Modus versetzt werden. In Windows wird dies über die "Eigenschaften der Netzwerkkarte" (erreichbar über den Geräte-Manager) konfiguriert. Unter Linux kann dies mit ethtool getan werden. Für eine detaillierte Beschreibung sind die entsprechenden Hilfs- und/oder Dokumentationsquellen zu konsultieren.

Verwendung des Routers als OpenVPN-Server

Ab BS Version 0.3.0 sind Imagevarianten verfügbar, welche OpenVPN enthalten.

Erklärung

OpenVPN ist eine VPN-Client/-Server Software, welche TCP- oder UDP-Verbindungen nutzt um verschlüsselt IP- oder Ethernetverbindungen zu tunneln. OpenVPN legt dazu im Userspace eine virtuelle Netzwerkkarte an, die eine IP-Adresse aus dem Adressbereich des VPN’s erhält. Alle an diese IP-Adresse gesendeten Daten, werden dann von OpenVPN entgegen genommen, verschlüsselt, in den Datenteil von TCP oder UDP eingepackt und meist über das Internet zum entsprechenden OpenVPN-Server oder -Client geschickt. Wenn die VPN-Verbindung als gerouteter IP-Tunnel konfiguriert ist, nennt man die virtuelle Schnittstelle tun-Device. Werden Ethernet-Pakete übertragen heisst diese tap-Device. OpenVPN ist im Vergleich zu den häufig verwendeten IPSec-basierten VPN-Lösungen leichter zu konfigurieren und vor allem wesentlich flexibler in der Handhabung.

Durchführung

OpenVPN-Server Konfiguration

Im folgenden HowTo soll der Router, wie im obigen Bild gezeigt, als OpenVPN-Server konfiguriert werden. Dies soll es ermöglichen mit mobilen Clients (z.B. Laptop) von unterwegs oder vom Arbeitsplatz aus etc. auf das heimische Netzwerk (Home-LAN) zugreifen zu können, um z.B. Netzwerkfreigaben zu nutzen oder interne Geräte zu erreichen.

Die Konfiguration erfolgt in folgenden Teilschritten:

  1. Erzeugen der Zertifikate für den OpenVPN-Server den Client

    • ca.crt Zertifikat der Zertifizierungsstelle

    • vpnserver_cert.crt Serverzertifikat

    • vpnserver_cert.key Private-Key zum Serverzertifikat

    • dh1024.pem Diffie-Hellman Parameter für Schlüsselaustausch

    • laptop.crt Client-Zertifikat

    • laptop.key Private-Key zum Client-Zertifikat

    • tls_auth_shared.key TLS-shared Key für Server und Client (optional, für bestimmte Konfigurationsoptionen benötigt)

  2. Erzeugen der Serverkonfiguration server.conf

  3. Kopieren der Server-Konfiguration auf den Router

  4. Einrichten von OpenVPN unter Windows XP

  5. Erzeugen der Clientkonfiguration client.ovpn

  6. Testen der Konfiguration

  7. Freigabe in der Firewall und Eintrag ins custom_script zum Starten des OpenVPN-Server

Tip Die im folgenden schrittweise durchgeführte Beispielkonfiguration kann hier (openvpn_server_conf.tar.gz) heruntergeladen werden. Sollte also jemand zu faul oder nicht in der Lage sein die Schritte 1-4 zu bewältigen kann er die Beispielkonfiguration nutzen und direkt mit Schritt 5 fortfahren.

Wir legen die Konfiguration zunächst auf dem lokalen Rechner an und kopieren dann das gesamte Verzeichnis auf den Router:

#temporäres Verzeichnis für OpenVPN Konfiguration anlegen
mkdir -p /tmp/openvpn/keys

zu 1.

Das Erzeugen der Zertifikate kann auf verschiedene Weise erfolgen. An dieser Stelle werden die EasyRSA-Skripte aus dem OpenVPN-Paket genommen.

cd <path_to_openvpn>/openvpn-2.0.9/easy-rsa/2.0/
#jetzt Anpassen der Datei: vars an eigene Wünsche
vi vars

#Variablen setzen
source ./vars
#alles bisherige löschen VORSICHT!!!
./clean-all
#CA-Root Zertifikat erzeugen
./build-ca
#Server Zertifikat erzeugen und durch CA signieren
./build-key-server vpnserver_cert
#DH-File erzeugen
./build-dh
#Client Zertifikat erzeugen und durch CA signieren
./build-key laptop
#TLS-Shared-Key erzeugen (optional)
openvpn --genkey --secret tls_auth_shared.key

cp keys/ca.crt /tmp/openvpn/keys/
cp keys/vpnserver_cert.crt /tmp/openvpn/keys/
cp keys/vpnserver_cert.key /tmp/openvpn/keys/
cp keys/dh1024.pem /tmp/openvpn/keys/

Da das OpenVPN-Konfigurationsverzeichnis später auf dem Router unter /opt liegt, werden alle Pfade bereits so angegeben:

zu 2.

cd /tmp/openvpn
#editieren und folgendes Einfügen
vi server.conf
...

#if TLS-Shared-Key is used then specify TLS-mode
tls-server

#Device to use
dev tap0

#use TCP
proto tcp-server

#use default port
port 1194

# Try to preserve some state across restarts.
persist-key
persist-tun

# SSL/TLS parms.
ca /opt/openvpn/keys/ca.crt
cert /opt/openvpn/keys/openvpn_server.crt
key /opt/openvpn/keys/openvpn_server.key
dh /opt/openvpn/keys/dh1024.pem

# If a tls-auth key is used on the server
# then every client must also have the key.
tls-auth /opt/openvpn/keys/tls_auth_shared.key

# Set log file verbosity, for debugging
verb 3

Nun kopieren wir das temporäre Verzeichnis, welches die komplette Serverkonfiguration enthält, vom lokalen Rechner auf den Router:

zu 3.

scp -r /tmp/openvpn root@<ROUTER_IP>:/opt

Jetzt widmen wir uns der Konfiguration des Clients. Als Beispiel wird hier ein Laptop mit Windows XP genommen.

zu 4.

Auf dem Windows-XP Rechner:

Zuerst laden wir natürlich den OpenVPN-Installer hier herunter (z.B. openvpn-2.1_rc13-installer.exe) und führen ihn aus. Es wird OpenVPN standardmässig nach C:\Programme\OpenVPN\ installiert und gleichzeitig ein tap-Device als neue Netzwerkkarte angelegt. Diese bekommt später vom DHCP-Server des Routers eine IP aus dem internen LAN zugewiesen, deshalb brauchen wir dort auch nichts einzustellen.

Jetzt benötigen wir die in Schritt 1 erzeugten Dateien namens laptop.crt, laptop.key und evtl. tls_auth_shared.key und führen folgende Schritte durch:

 -mittels Dateibrowser nach 'C:\Programme\OpenVPN\' gehen
 -neues Verzeichnis 'config', also 'C:\Programme\OpenVPN\config', anlegen
 -nach 'C:\Programme\OpenVPN\config' gehen
 -neues Verzeichnis 'keys' anlegen und die Dateien 'laptop.crt', 'laptop.key' und
evtl. 'tls_auth_shared.key' nach 'keys' bzw. 'C:\Programme\OpenVPN\config\keys' kopieren
 -jetzt im Verzeichnis 'config' die Datei 'client.ovpn' anlegen

zu 5.

Jetzt mit dem Editor die Datei C:\Programme\OpenVPN\config\client.ovpn öffnen und folgende Konfiguration einfügen:

#specifify client-mode
client

#Device name in Windows without numbering
dev tap

#use TCP
proto tcp

#specifiy Server-IP or Server-Hostname an Port
remote 192.168.2.1 1194

# Try to preserve some state across restarts.
persist-key
persist-tun

# SSL/TLS parms.
ca keys\\ca.crt
cert keys\\laptop.crt
key keys\\laptop.key

#if TLS-shared key is used
tls-auth keys\\tls_auth_shared.key

# Set log file verbosity.
verb 3

Der Parameter remote ist natürlich auf die lokale IP vom Router einzustellen, da wir im nächsten Schritt die Konfiguration zunächst testen.

zu 6.

Wir kümmern uns beim Testen zunächst um den Start des Servers. Hierzu legen wir vorher ein tap-Device an und fügen dieses zur Bridge hinzu. Damit sollte dann der VPN-Client vom DHCP-Server auf dem Router eine IP bekommen und auch mit anderen Rechnern im LAN kommunizieren können.

Caution Wichtig ist zu prüfen, das die Zeit auf dem Router richtig gesetzt ist, sonst werden später die Client-Zertifikate als abgelaufen oder ungültig erkannt.

Dann mittels telnet oder ssh auf den Router:

telnet <ROUTER_IP>
...
#tap Device anlegen
openvpn --mktun --dev tap0
#tap-Device in Bridge einfügen
brctl addif br0 tap0
#tap-Device/Bridge-Port hochfahren
ifconfig tap0 up

#OpenVPN-Server im Vordergrund starten
openvpn /opt/openvpn/server.conf

Nachdem der Server gestartet wurde, können wir uns dem Client widmen.

Hierzu auf dem Windows-XP Rechner:

-ins Verzeichnis 'C:\Programme\OpenVPN\config\' gehen
-Rechtsklick auf die Datei 'client.ovpn'
-und 'Start OpenVPN on this config-file' auswählen

Wenn alles klappt, sollte das tap-Device auf dem Windows-XP Rechner eine IP-Adresse vom Router bekommen.

Im letzten Schritt wollen wir noch dafür sorgen, dass der OpenVPN-Server auf dem Router immer gestartet wird und dieser auch über das WAN-Device erreichbar ist.

zu 7.

per telnet oder WebShell-Plugin folgendes Kommando auf dem Router ausführen, um den OpenVPN-Port (hier im Beispiel TCP-Port 1194) beim nächsten Start am WAN-Interface zu öffnen:

LIST=`nvram get fw_services_tcp` && nvram set fw_services_tcp="$LIST 1194" ||
      nvram set fw_services_tcp="1194"; nvram commit

Über das Web-Interface unter System Settings→Administration→Custom script fügen wir noch folgende Zeilen ins custom_script ein um den Server nach einem Reboot zu starten:

#create tap Device
openvpn --mktun --dev tap0
#add tap-Device to bridge
brctl addif br0 tap0
#enable tap-device/bridge-port
ifconfig tap0 up

#kill possible running instances
killall -9 openvpn >/dev/null 2>/dev/null
#start openvpn-server
openvpn --daemon --config /opt/openvpn/server.conf --log /dev/null

Jetzt den Router neu starten und am Client den Parameter remote in der client.ovpn auf den öffentlichen DNS-Namen des Routers stellen (z.B. remote myrouter.dyndns.org). Damit sollte der Router per OpenVPN aus dem Internet erreichbar sein.

Serielle Schnittstelle

Der Router verfügt über eine serielle Schnittstelle. Über diese kann mit einem Terminalprogramm wie kermit, minicom (UNIX/Linux), oder Hyperterminal (Windows) auf dem Router zugegriffen werden. Der Router kann dann über das Terminal (Shell - ash) konfiguriert werden, ein Passwort ist dafür nicht nötig! Die serielle Schnittstelle ist vorallem beim Entwickeln, Portieren von Software oder bei Änderungen am Kernel sinnvoll. Sie ist aber auch hilfreich, wenn man durch eine fehlerhafte Netzwerk- oder Firewall-Konfiguration keinen Zugriff auf den Router hat.

Konfiguration

Bitrate: 115200
Datenbits: 8
Parität: none
Stoppbit: 1
Caution Um die serielle Schnittstelle des Routers mit der RS232 Schnittstelle eines PC’s zu verbinden, wird ein RS232/TTL-Logik-Signalwandler benötigt. Dieser ist für die Pegelanpassung der RS232 (±10 V) auf TTL-Pegel (0-5V) notwendig. Einen solchen Pegelkonverter kann man mit etwas Geschick und dem nötigen Wissen selbst bauen. Pegelkonverter gibt es aber auch für kleines Geld zu kaufen.

Pin Layout

Pinbelegung serielle Schnittstelle
Warning Werden die Pins kurzgeschlossen, startet der Router nicht mehr. Bei fehlerhafter Installation oder Betrieb kann der Router zerstört werden!