Firmware HowTo
Aus Opennet
Hier sammeln wir alles, was man mit der OpenWrt-Firmware bzw. den Freifunk- und Opennet-Erweiterungen anstellen kann. Bei einer fehlerhaften Konfiguration gibt es hier auch geeignete Ratschläge.
Inhaltsverzeichnis |
Einführung
ToDo
Hilfsmittel:
- Editor vi: Vi Tutorial
- SSH Client: Linux - ssh aus OpenSSH Paket, Windows - putty
Allgemeine Hinweise
Wenn irgendwelche Probleme auftreten, DON'T PANIC!
Zuerst ist es wichtig, dass ihr euch möglichst genau merkt, wann was wie schief gegangen ist. Falls tatsächlich ein Problem mit der Opennet-Firmware vorliegt, können wir dieses nur so durch eure Hilfe finden und beheben. Lest folgende Informationen in Ruhe durch und fragt im Forum, wenn etwas unklar bleibt.
ACHTUNG: Es ist selten eine gute Idee, beim Linksys den Reset-Taster zu drücken. Dies setzt die internen Werte auf die Voreinstellungen zurück (Factory Reset) und deaktiviert dabei boot_wait. Diese Default-Einstellungen verhindern im Fehlerfall, dass ihr eine neue funktionsfähige Firmware aufspielen könnt.
Blinkcodes
Linksys:
- Booten: DMZ-LED Dauerlicht (bis alle Init-Skripte abgearbeitet sind)
- Reboot: Alle LEDs blinken kurz auf
- Normalzustand: Power-LED Dauerlicht, DMZ-LED aus, LAN/WLAN-LEDs bei Traffic, Internet-LED bei WAN-Verbindung
- Failsafe-Modus: DMZ-LED 3 Blinks + Pause
- Recovery-Modus: Power-LED blinkt (wartet auf Firmware per TFTP)
- Bootloader/Firmware defekt: Power-LED blinkt
Mehr Informationen: http://wiki.openwrt.org/wrtLEDCodes
Asus:
- Normalzustand: Power-LED Dauerlicht, LAN/WLAN-LEDs bei Traffic, Internet-LED bei WAN-Verbindung
- Recovery-Modus: Power-LED blinkt
Vorbereitung
Wichtig ist bei den hier beschriebenen Methoden (ausgenommen Serielle Konsole/RS232 und JTAG-Kabel), dass Du den Ap von Deinem PC aus erreichst. Du solltest daher nicht auf DHCP (automatische Adressvergabe) hoffen sondern in den Netzwerkeinstellungen deines Computers eine feste IP vergeben und versuchen, Deinen Accesspoint zu erreichen.
Folgende Tabelle gibt Dir die nötigen Informationen:
| vermutliche Adresse des AP | Adresse des PCs | Netzmaske des PCs | Anmerkungen |
| 172.16.0.1 | 172.16.0.2 | 255.240.0.0 | bspw. bei Asus |
| 192.168.1.1 | 192.168.1.2 | 255.255.255.0 | bspw. bei Linksys / Asus "Premium" etc. |
| 192.168.11.1 | 192.168.11.2 | 255.255.0.0 | bspw. bei Buffalo |
Öffne eine Kommandozeile (z.B. unter Windows 'DOS-Eingabefenster') und versuche, den AP anzupingen:
#> ping 192.168.1.1
Wenn das nicht erfolgreich ist, dann Ap neustarten und beobachten, ob der AP währenddessen (kurz) Pakete empfängt. Dies reicht für eine Wiederherstellung, ist der Recovery Modus (während der boot_wait Zeit).
Firmware Flashen
Per Webinterface
- siehe Opennet Firmware bzw. selbsterklärend
- nutzt selbst mtd
Per TFTP
Recovery Modus erforderlich!
Linksys: Pins brücken oder falls BOOT_WAIT aktiviert ist, direkt nach dem Einschalten des APs.
Asus: Ausschalten, Reset (Recovery beim "Premium")-Knopf drücken, Einschalten, beim Loslassen des Reset-Knopfs blinkt die Power-LED.
Ubiquiti: Station einschalten, Reset 5-10 sekunden warten bis Rot, Orange, Grün1, Frün2 nacheinander aufleuchten, Reset loslassen - jetzt sollten rot+grün1 und orange+grün2 abwechselnd aufleuchten
tftp tftp> connect <ip-addresse> tftp> binary tftp> trace Packet tracing on. tftp> rexmt 1 tftp> put <firmware.bin>
Windows-Nutzer:
Rufe unter Start > Programme > Zubehör >Eingabeaufforderung auf. Wechsele mit dem Befehl cd in das Verzeichnis, das die gewünschte Firmware-Datei enthält. Beispiel: Gib ein cd /d x:\download\firmware und bestätige mit der Eingabetaste. Gib den TFTP-Übertragungsbefehl ein
tftp -i 192.168.1.1 put <firmware-file> (Linksys .bin / Sonst .trx)
Die Übertragung muss nach etwa 5 Sekunden fehlerfrei abgeschlossen sein. Das Gerät zeigt den Update-Vorgang durch eine blinkende Power-LED an. Der Update-Vorgang ist nach spätestens 2 Minuten abgeschlossen. Das Gerät startet mit der neuen Firmware selbstständig.
Hinweis Windows - langsame Netzwerkkartentreiber:
- Hochfahren/Aktivieren der Netzwerkkarte kann länger als die BOOT_WAIT Zeit dauern
- ggf. einen Switch zwischenschalten damit die Karte schon aktiviert ist
Per mtd (lokal)
Die sicherste und zuverlässigste Methode einen Access Point mit bereits installierter OpenWrt-kompatibler Firmware mit einer neuen Firmware auszustatten, ist der Weg über das integrierte Flash-Consolentool mtd.
- trx-Firmware Datei per scp auf den AP laden
- per SSH verbinden, via Console Firmware flashen:
mtd -r -e linux write <firmware.trx> linux
- AP startet nach dem Flashvorgang selbstständig neu
Per mtd (remote)
Bei Access Points mit nicht ausreichend freien Speicher, kann man auch da Image direkt per Unix-Pipe via SSH uebertragen -- nur fuer Mutige, sei gewarnt! Voraussetzung ist OpenWrt-kompatible Firmware auf den Access Point mit mtd an Board.
- auf dem eigenen Linux/Unix-PC ausführen (<ap> = IP/Hostname des Access Points):
cat <firmware.trx> | ssh root@<ap> mtd -r -e linux write - linux
- AP startet nach dem Flashvorgang selbstständig neu
Per Serielle Konsole/RS232
- Platine von Freifunk Hamburg
- Serielle Console anschliessen, Terminalprogramm starten
- beim Booten STRG+C drücken, CFE-Console (CFE ist der Bootloader) öffnet sich
- boot_wait per "nvram set boot_wait=on; nvram commit" setzen
- danach weiter mit TFTP
Siehe auch:
- Bauanleitung: Bauanleitungen#Serial_Console_Adapter
- OpenWrt Serial Console Anleitung: http://wiki.openwrt.org/OpenWrtDocs/Troubleshooting#head-457cc2f0848fb6600bae5dcab055a8431112c34e
Per JTAG-Kabel
Per JTAG-Kabel läßt sich der Bootloader CFE, der Inhalt der NVRAM-Variablen und das Kernelimage löschen, auslesen so wie schreiben. JTAG ist eine standardisierte Schnittstelle für Embedded Systeme. Damit kann direkt auf den Flash-Speicher zugriffen werden, so dass man jeden AP (ohne Hardwareschaden) wieder zum Laufen bekommt.
Es muss der AP geöffnet werden (Garantie ist danach weg). Man muß einen Pfostenstecker auf den AP löten.
Weiter unter: Firmware HowTo/JTAG
Original-Firmware wiederherstellen
- Firmwaredatei (.bin) auf den AP nach /tmp laden (scp / winscp)
- per SSH verbinden, prüfen ob Firmwaredatei auch vollständig angekommen ist (z.B. mit ls -la)
- via Console in /tmp nun Firmware in trx-Format umwandeln und flashen:
dd bs=32 skip=1 if=<firmware.bin> of=<firmware.trx> mtd -r -e linux write <firmware.trx> linux
- nach dem Flashen rebootet der AP automatisch
- eventuell nun noch ein Reset der NVRAM-Variablen (Factory Reset) machen
Firmware reparieren
Booten in den Failsafe-Modus
Im Failsafe Modus werden nur die notwendigsten Dinge geladen, so kann das System nach einer Fehlkonfiguration wieder hergestellt werden.
Via recvudp (alle Modelle, ab OpenWrt RC5):
- recvudp-Tool herunterladen, ggf. übersetzen: recvudp.exe (Windows Binary) · recvudp.c (Quellcode)
- Netzwerkkarte konfigurieren, IP aus 192.168.1.1/24 z.B. 192.168.1.2
- Tool in einer Console starten (Windows: MSDOS-Eingabeaufforderung)
linux # ./recvudp Msg from 192.168.1.1: (dummy message) Msg from 192.168.1.1: Press reset now, to enter Failsafe! [.. jetzt Reset-Button drücken ..] Msg from 192.168.1.1: Entering Failsafe!
- telnet 192.168.1.1 oder Webzugang - Reparaturen durchführen, abschließend Rebooten, fertig.
Linksys WRT:
- Access Point mit Strom versorgen
- warten bis DMZ-LED aufleuchtet, sofort für 2 Sekunden Reset-Button drücken
- DMZ-LED zeigt nun 3 schnelle Blinks an
- telnet 192.168.1.1 oder Webzugang - Reparaturen durchführen, abschließend Rebooten, fertig.
Asus:
- Access Point mit Strom versorgen
- 2 Sekunden warten (besser mit Netzwerksniffer auf 2 UDP Pakete vom AP warten, da die 2 Sekunden eher sehr knapp sind. Ist man in Failsafe Modus, kommt ein weiteres Paket rein. Siehe recvudp.)
- Reset-Button für 10 bis 15 Sekunden drücken
- telnet 192.168.1.1 oder Webzugang - Reparaturen durchführen, abschließend Rebooten, fertig.
Asus: (Firmware Recovery Modus)
Der Asus besitzt einen Firmware Recovery Modus den man aktiviert in dem man den Reset Taster gedrückt hält während man den Router mit Strom versorgt. Nun kann man mit dem Firmware Restoration Tool die neue Firmware flashen auch wenn man die IP nicht kennt und der Router nicht mehr zu erreichen ist. Die original Firmware bekommt man bei Asus. Will man Openwrt flashen verwendet man für Asus das openwrt-brcm-2.4-squashfs.trx File.
Buffalo:
- der Buffalo WHR-G54s wird mit aktiviertem failsafe ausgeliefert. wenn zumindest openwrt geflasht wurde, und der AP wegen vermasselter Netzwerkeinstellungen unerreichbar geworden ist (ist mir jetzt zum zweiten mal passiert), hilft ein reboot mit gedrücktem "init"-Knopf: der AP wird daraufhin auf Standardwerte zurückgesetzt und ist wieder per browser und webinterface unter seiner standard-IP (192.168.11.1) erreichbar. --Moritz 10:29, 28. Okt 2006 (CEST)
Passwort zurücksetzen
- Access Point im Failsafe-Modus starten, per telnet 192.168.1.1 verbinden
- jffs-Partition zum Schreiben einbinden:
mtd unlock /dev/mtd/4 mount /dev/mtdblock/4 /jffs
- korrekte Passwd-Datei von einem anderen Host kopieren (anderer AP z.B.):
cd /jffs/etc/ mv passwd passwd.old scp <host>:/etc/passwd .
- oder alternativ ein Standard-Passwort (root/admin) in die /jffs/etc/passwd einfügen:
root:$1$$CoERg7ynjYLsj2j4glJ34.:0:0:root:/tmp:/bin/ash
- neu starten per reboot
- das wars...
NVRAM Variablen prüfen
- Variable suchen: nvram show | grep <suchwort>
- Variable prüfen: nvram get <variable>
- Variable setzen: nvram set <variable>=<wert>; nvram commit
eth1 Not associated Problem (WLAN)
Das WLAN-Interface fällt dabei in den Infrastruktur-Modus zurück, an statt den Ad-Hoc-Modus zu nutzen. Dies passiert vor allem bei Linksys WRT D2/v3.1 Geräten, bei den kein Downgrade der Original-Firmware gemacht wurde.
Es müssen einige NVRAM-Variablen geändert werden. Die Lösung:
nvram set wl_wpa_psk= nvram set wl_wpa_gtk_rekey= nvram set wl0_wpa_gtk_rekey= nvram set wl0_wpa_psk= nvram commit reboot
NVRAM zurücksetzen
Man kann auf einigen APs den gesamten NVRAM löschen, so dass beim nächsten Neustart der Bootloader (CFE) die ihm bekannten Default-Variablen wieder setzt. Dies ist zur Zeit problemlos bei Linksys WRT54 und ASUS WL500g möglich. Bitte aber stets mit Vorsicht und auf eigene Gefahr!
Und so gehts - NVRam löschen und automatisch Rebooten:
mtd -r erase nvram
Danach ggf. die Firmware neu installieren, so dass alle Firmware-spezifischen Variablen erzeugt btw. gesetzt werden. So kann man "verkonfigurierte" Access Points wieder in Gang bringen. Ggf. vorher im Failsafe-Modus booten.
Nach dem Neustart ggf. wieder boot_wait aktivieren:
nvram set boot_wait=on nvram commit
Neighbour table overflow
echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1 echo 2048 > /proc/sys/net/ipv4/neigh/default/gc_thresh2 echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
Tutorials
Sicherer Webserserver
Siehe Sicherer Webserver (HTTPS).
Portforwarding
Siehe Portforwarding.
USB Massenspeicher
Siehe USB Massenspeicher.
Samba Server
Siehe Samba Server.
Mini-PCI Umbau
Siehe Mini-PCI Umbau
Mac-Adresse anpassen
Falls notwendig, kann man von jedem Netzwerk-nterface die Mac-Adresse anpassen. Dies kann zum Beispiel bei der WAN-Schnittstelle notwendig sein. Dazu die NVRAM-Variable <if>_hwaddr setzen. Als <if> komt "wan", "lan" und "wifi" in Frage. Beispiel, per Console (SSH):
nvram set wan_hwaddr=XX:XX:XX:,,, nvram commit ifdown wan ifup wan
VLANs nutzen (OLSR-LAN)
Siehe OpenWrt-Doku: http://wiki.openwrt.org/OpenWrtDocs/Configuration#head-1f582c0ad21a03a769e00c345743d6cf85ba878f
Die Switchport-Nummern beim Linksys:
- WRT54_sw1_internal_architecture.png (ältere Hardware < WRT54Gv4)
- WRT54_sw2_internal_architecture.png (neuere Hardware >= WRT54Gv4 oder WRT54GL)
Beispiel vlan2 hinzufügen als speziellen OLSR-Port:
1. Neues Interface olsrlan als vlan2 erstellen
nvram set olsrlan_ifname=vlan2 nvram set olsrlan_proto=static nvram set olsrlan_netmask=255.255.0.0 nvram set olsrlan_ipaddr=192.168.2.x
2. vlan2 auf Switchport 3 / 4 (ggf. gegen Skizzen oben prüfen) legen
nvram set vlan0ports="2 1 5*" nvram set vlan2ports="3 4 5" nvram set vlan2hwname=et0
3. Start-Stop-Skript /etc/init.d/S46olsrlan erstellen
#!/bin/sh
# config
DEVNAME="olsrlan"
eval $(/usr/bin/netparam)
# start/stops scripts
case $1 in
start)
echo "Starting $DEVNAME ($IFNAME)..."
# bring interface up
ifup $DEVNAME
# open firewall
iptables -I INPUT -i $OLSRLANDEV -j ACCEPT
iptables -I OUTPUT -o $OLSRLANDEV -j ACCEPT
iptables -I FORWARD -o $OLSRLANDEV -j ACCEPT
iptables -I FORWARD -i $OLSRLANDEV -j ACCEPT
# masq lan traffic
iptables -t nat -A POSTROUTING -o $OLSRLANDEV -s $LANNET/$LANPRE -j MASQUERADE ;;
stop)
echo "Shutdown $DEVNAME ($IFNAME)..."
# shutdown interface
ifdown $DEVNAME
# remove firewall rules
iptables -D INPUT -i $OLSRLANDEV -j ACCEPT
iptables -D OUTPUT -o $OLSRLANDEV -j ACCEPT
iptables -D FORWARD -o $OLSRLANDEV -j ACCEPT
iptables -D FORWARD -i $OLSRLANDEV -j ACCEPT
# remove masq
iptables -t nat -D POSTROUTING -o $OLSRLANDEV -s $LANNET/$LANPRE -j MASQUERADE ;;
restart)
$0 stop
$0 start
;;
status)
ifconfig $IFNAME
;;
*)
echo "Usage: $0 start|stop|restart|status"
;;
esac
4. Start-Stop-Skript ausführbar machen:
chmod +x /etc/init.d/S46olsrlan
5. OLSR beim Starten auf olsrwan starten, dazu /etc/init.d/S53olsrd anpassen:
OLSRDEVLIST="... tap0" (vorher) OLSRDEVLIST="... tap0 vlan2" (nachher)
6. Speichern und Testen
nvram commit reboot
WRT und GKrellM
- WRT54G mit GkrellM überwachen: http://chrisspot.com/software/gkrellm/wrt54g/
Ciscobutton
Seit OpenWrt whiterussian RC6 ist der Diag-Teiber erweitert worden und nun einfacher nutzbar. Ein Beispiel findet man unter: http://forum.openwrt.org/viewtopic.php?id=8151
Kleines Beispielskript zum Aktivieren/Deaktivieren des WAN-Interfaces über den sogenannten Cisco-Button am Linksys WRT.
- als Datei /etc/init.d/S55ciscobutton anlegen:
#!/bin/sh -e
#
# wait for pressed button
while [ true ]
do
sleep 1
if [ "$(cat /proc/sys/button)" = "1" ]; then
if [ "$(nvram get wan_enabled)" = "0" ]; then
logger -t ciscobutton "Activating wan (Cisco button)"
ifup wan
nvram set wan_enabled=1
echo "0x08" > /proc/sys/diag # White Cisco LED ON
else
logger -t ciscobutton "Deactivating wan (Cisco button)"
ifdown wan
nvram set wan_enabled=0
echo "0x10" > /proc/sys/diag # Orange Cisco LED ON
sleep 3 # just to be safe
echo "0" > /proc/sys/diag # Defaults (Cisco LED OFF)
fi
fi
done &
- ausführbar machen: chmod +x /etc/init.d/S55ciscobutton
- starten: /etc/init.d/S55ciscobutton
Regdomain ändern
- Ländercodes für Atheros-Karten freischalten.
Siehe auch
- Hacking OpenWRT Lecture: https://events.ccc.de/congress/2005/fahrplan/events/1099.en.html
- OpenWRT Configuration: http://wiki.openwrt.org/OpenWrtDocs/Configuration
- OpenWRT Customizing: http://wiki.openwrt.org/OpenWrtDocs/Customizing