OpenWRT (kamikaze)

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

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...
... 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.

Netzwerk konfigurieren

IP Adresse

OpenWRT hat standardmäßig die IP-Adresse 192.168.1.1 . Ändern kann man diese in /etc/config/network.

config interface lan  
       option type     bridge
       option ifname   "eth1"
       option proto    static
       option ipaddr   192.168.x.x
       option netmask  255.255.255.0
       option gateway  192.168.x.y
       option dns      192.168.x.y 

Netzwerk neu starten

root@OpenWrt:~# /etc/init.d/network restart

Paketmanager initialisieren

root@OpenWrt:~# ipkg update


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-core
ipkg install kmod-ide-pdc202xx
ipkg install kmod-fs-ext3
An dieser Stelle muss man leider den Router neu starten damit die Module korrekt geladen werden. Einen eleganteren Weg (insmod alleine reicht leider nicht) habe ich bislang nicht gefunden, wer einen weiss möge ihn bitte hier eintragen. --Laurence 13:24, 17. Jun. 2008 (CEST)

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

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, 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

Dieses Script muss natürlich auch ausführbar sein:

chmod 755 /etc/init.d/mount

ipkg einrichten

Sofern man auf diesem neuen Speicherplatz Anwendungen installieren will, muss dieser 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