OpenWRT (kamikaze)
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.
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:
- SSH
- FTP
- NFS
- Samba
- WLAN mit WPA
- DNS
- DHCP
- NTP-Client
- sowie ein abgespeckter HTTP-Server
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
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.