OpenWRT

aus PUG, der Penguin User Group

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Einleitung

Achtung: Diese Seite entspricht nicht dem aktuellen Stand der Dinge und sollte bei Gelegenheit überarbeitet werden!

Näheres auf der Diskussionsseite.


OpenWRT ist eine GNU/Linux-Distribution für WLAN-Router. Anstatt einer statischen Firmware setzt OpenWRT auf ein voll beschreibbares Dateisystem sowie einen Paketmanager. OpenWRT läuft unter anderem auf Geräten der Firmen Linksys, ALLNET, ASUS, Belkin, Buffalo, Microsoft und Siemens.

ASUS WL-HDD...
ASUS WL-HDD...
... so groß darf ein Server sein!
... so groß darf ein Server sein!

Leider ist der Speicher auf diesen Routern oftmals sehr begrenzt. Verfügt ein Router jedoch über einen USB- oder IDE-Controller, so bietet sich die Möglichkeit die OpenWRT-Distribution auf entsprechende Medien auszudehnen und den Router zu einem kleinen Server auszubauen.

OpenWRT gibt es bei http://openwrt.org inklusive einem recht ausführlichem Wiki mit Installationsanleitungen und einer Liste der unterstützten Geräte.

Die Vorteile gegenüber einem "normalen" Server liegen auf der Hand: Geringerer Stromverbrauch und minimaler Platzbedarf. Die Nachteile jedoch auch: So ist der Broadcom 4710 Chipsatz in meiner ASUS WL-HDD mit 125MHz recht langsam. Man sollte es sich also zwei mal überlegen, ob man CPU-lastige Dienste auf dem Router laufen lässt. Als Fileserver für ein kleines Heim-Netzwerk sollte dies jedoch voll und ganz ausreichen.

Auf meinem OpenWRT-Router laufen momentan folgende Dienste:


Installation

Die Installation von OpenWRT ist recht unterschiedlich, je nach Router. Eine komplette Beschreibung gibt es unter http://wiki.openwrt.org/OpenWrtDocs/Installing . Falls bei der Installation Probleme auftreten sollten, empfiehlt sich diese Seite: http://wiki.openwrt.org/OpenWrtDocs/Troubleshooting . Dort ist auch der Failsafe-Modus beschrieben.

SSH

Beim ersten mal muss man sich mit telnet auf dem Router anmelden, da noch kein Passwort angelegt ist. Dies sollte man schleunigst nachholen. Dadurch wird auch der Telnet-Server deaktiviert und SSH aktiviert.


Massenspeicher einbinden

Da der Speicher auf den Routern sehr begrenzt ist, lohnt es sich auf Routern die über USB- oder IDE-Controller verfügen, diesen einzubinden und Applikationen darauf zu installieren.

IDE

Kernel-Module installieren

ipkg install kmod-ide
ipkg install kmod-ext3

Damit die Module bei einem Neustart geladen werden, müssen sie in /etc/modules aufgenommen werden:

ide-core
pdc202xx_old
ide-detect
ide-disk
jbd
ext3

Nun die Module laden

insmod ide-core
insmod pdc202xx_old
insmod ide-detect
insmod ide-disk
insmod jbd
insmod ext3

In der Datei /proc/partitions sollte nun ein Eintrag für die Festplatte und je einer pro Partition erscheinen.

USB

In folgender [Tabelle] nachschauen, ob der eigene Router USB2.0 unterstützt oder nur USB1.1. Dann die entsprechenden Kernel-Module installieren

USB1.1

ipkg install kmod-usb-uhci
ipkg install kmod-usb-storage

USB2.0

ipkg install kmod-usb2
ipkg install kmod-usb-storage

tbc.

Partitionen anlegen

Falls auf der Festplatte noch keine Partitionen vorhanden sind benötigt man die Pakete fdisk und e2fsprogs um diese anzulegen:

ipkg install fdisk
ipkg install e2fsprogs
ipkg install swap-utils

Partition anlegen (<device> entspricht dem Eintrag in Zeile 1 von /proc/partitions)

fdisk <device>

ext3

Symbolischen Link für mk2efs anlegen

ln -s /proc/mounts /etc/mtab

Dateisystem erzeugen

mke2fs -j <partition>

Dateisystem einbinden

mount -t ext3 <partition> <mount-point>

swap

Das Paket swap-utils, zum Anlegen und einbinden von swap-Partitionen gibt es im Repository backports/rc5. Um dieses nutzen zu können muss /etc/ipkg.conf um folgende Zeile erweitert werden:

src kamikaze-backports http://downloads.openwrt.org/backports/rc5/

Partition erzeugen

mkswap <partition>

Partition einbinden

swapon <partition>

Automounter

Die neuen Partitionen müssen nun in die Datei /etc/fstab eingetragen werden (Beispiel)

/dev/ide/host0/bus0/target0/lun0/part5  /mnt/part5      ext3    defaults       0 0
/dev/ide/host0/bus0/target0/lun0/part6  /mnt/part6      ext3    defaults       0 0
/dev/ide/host0/bus0/target0/lun0/part7  /mnt/part7      ext3    defaults       0 0
/dev/ide/host0/bus0/target0/lun0/part1  none            swap

und dann benötigt man ein Script /etc/init.d/mount und einen entsprechenden Aufruf (cd /etc/rc.d; ln -s /etc/init.d/mount S20mount), damit die Dateisysteme bei einem Neustart automatisch eingebunden werden:

#!/bin/sh
 
if [ -f /etc/fstab ]; then
       ## switch on swap spaces
       swapspaces=`grep swap /etc/fstab | awk ' { print $1 } ' `
       for i in $swapspaces; do
               echo -n "adding swap space $i... "
               swapon $i
               echo " done."
       done
 
       ## just mount everything else
       echo -n "mounting all filesystems... "
               mount -a
       echo " done."
else
       echo "fstab not found!"
fi

Hardwarespezifische Anmerkung: Bei meiner nslu2 entsteht eine race condition, es wird versucht, auf usb zuzugreifen, bevor verfügbar. Ein "sleep 5" vor diesem script schafft dann Abhilfe, 5 Sekunden sollten ausreichen. Ich habe die mounts auch stattdessen im custom-user-startup (S90) eingetragen, dies sollte allerdings egal sein, da der Prozess, der die Usb Hardware zur Verfügung stellt scheinbar parallel zu dieser Sequenz abgearbeitet wird. (axm)

ipkg einrichten

Der neue Speicherplatz muss nun in /etc/ipkg.conf eingerichtet werden

dest <name> <mount-point>

Damit die entsprechenden Dateien auch gefunden werden können, müssen die Variablen PATH und LD_LIBRARY_PATH in der Datei /etc/profile entsprechend erweitert werden und ein symbolischer Link für das Verzeichnis /etc auf dem neuen Speicherplatz eingerichtet werden:

ln -s /etc <mount-point>/etc

Nun kann man Pakete dorthin installieren:

ipkg -d <name> install <paket>


Mehrere Benutzer

OpenWRT ist standardmäßig auf den Betrieb mit nur einem Benutzer eingerichtet, dem User root. Hier unterscheidet es sich von FreeWRT, das aus genau diesem Grund abgespalten wurde. So wurden entsprechende Funktionen wie su und adduser in der BusyBox einfach deaktiviert. Die Multi-User-Fähigkeit lässt sich bei OpenWRT jedoch relativ leicht nachrüsten. Dazu gibt es drei Möglichkeiten:

  • BusyBox selbst bauen
  • loginutils installieren (eine zweite BusyBox mit den fehlenden Funktionen)
  • User per Hand in /etc/passwd eintragen, Passwort mit passwd setzen und sudo benutzen


Pakete

Eine Suchmaschine für offizielle Pakete, backports und Pakete aus third party ipkg repositories gibt es unter http://www.ipkg.be/

NTP-Client

Als erstes empfielt es sich einen NTP-Client zu installieren, um die Zeit auf dem Router aktuell zu halten:

ipkg install ntpclient

Zeitzone für Mitteleuropa (inkl. Sommerzeit/Winterzeit) in /etc/TZ eintragen:

CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00

Cronjob erstellen für die Aktualisierung:

ntpclient -c 1 -s -h de.pool.ntp.org

Samba

Samba installieren, Freigaben und Benutzer einrichten:

ipkg install samba
vi /etc/samba/smb.conf
smbpasswd -a <username>

IP-Adresse und Hostname des Routers in /etc/hosts eintragen und Samba starten:

/etc/init.d/samba start

Wenn es funktioniert, Start-Script umbenennen, damit Samba beim Systemstart gestartet wird:

mv /etc/init.d/samba /etc/init.d/S70samba

HTTP-Server

OpenWRT httpd

Um einfache HTML-Seiten darzustellen, genügt es den mitgelieferten httpd auf einem beliebigen Port mit beliebigem Root-Verzeichnis zu starten:

httpd -p <port> -h <verzeichnis> -r OpenWrt

Sogar eine minimale Authentifizierung lässt sich in /etc/httpd.conf einstellen.

lighttpd

Etwas komfortabler und umfangreicher ist da das Paket lighttpd:

ipkg install lighttpd

Leider fehlen in whiterussian rc6 einige Dateien in diesem Paket, diese kann man hier herunterladen und nach /usr/lib kopieren. Danach muss man in /etc/lighttpd.conf die Werte für

server.port
server.document-root
server.pid-file

anpassen, das RC-Script umbenennen und den Server starten:

mv /etc/init.d/lighttpd /etc/init.d/S70lighttpd
/etc/init.d/S70lighttpd start

SSL

Der lighttpd verfügt auch über SSL Support. Dazu muss man ein SSL-Zertifikat erstellen:

ipkg install openssl-util
cd /etc/ssl/certs/
openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes

SSL in /etc/lighttpd.conf einschalten:

ssl.engine   = "enable"
ssl.pemfile  = "/etc/ssl/certs/server.pem"
server.port  = 443

und den lighttpd neu starten

/etc/init.d/S70lighttpd stop
/etc/init.d/S70lighttpd start

Authentifizierung mit htpasswd

Modul installieren:

ipkg install lighttpd-mod-auth

passwd-Datei anlegen (kann auch auf einem PC erfolgen):

htpasswd -c lighttpd.user <benutzer>
cp lighttpd.user /etc

/etc/lighttpd.conf anpassen:

server.modules = (
                  "mod_auth"
	          )
auth.backend                   = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd.user"
auth.require                   = ( "<verzeichnis>" =>
                                  (
                                  "method"  => "basic",
                                  "realm"   => "<beliebiger name>",
                                  "require" => "valid-user"
                                  )
                                 )

und den lighttpd neu starten

/etc/init.d/S70lighttpd stop
/etc/init.d/S70lighttpd start


Eigene Pakete

Da es bislang nur wenig Software für OpenWRT gibt, habe ich einige Pakete und Scripte selbst gebaut/portiert. Diese sind NOCH NICHT AUSREICHEND GETESTET und werden hier OHNE JEGLICHE GEWÄHRLEISTUNG angeboten.

These packages have NOT BEEN FULLY TESTED yet are provided WITHOUT WARRANTY OF ANY KIND! http://www.pug.org/~laurence/OpenWRT/README

whiterussian

Eintrag für /etc/ipkg.conf:

src pug http://www.pug.org/~laurence/OpenWRT/whiterussian

apr-util

Package: apr-util

Description: Apache Portable Runtime (libaprutil)

apr

Package: apr

Description: Apache Portable Runtime (libapr)

diffutils

Package: diffutils

Description: File comparison utilities (diff, diff3, sdiff, cmp)

expat

Package: expat

Description: a XML-Parser (libexpat)

loginutils

Package: loginutils

Description: Login utilities (addgroup, adduser, delgroup, deluser, halt, poweroff, su)

patch

Package: patch

Description: Apply a diff file to an original (patch)

sudo

Package: sudo

Description: allows users to run programs with the security privileges of another user (sudo, visudo)


weitere

experimental branch

buildroot environments

wlanbutton.sh (ASUS WL-HDD Reset-Button zum Ein- und Ausschalten des WLAN benutzen)

S20mount (Automounter)

Pakete selbst bauen

Ein SDK für OpenWRT gibt es unter http://downloads.openwrt.org/whiterussian/newest/

tbc.


Links

Persönliche Werkzeuge