Firmware HowTo

Aus Opennet

Wechseln zu: Navigation, Suche

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

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.

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:

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 mit 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):

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-Lampe aufleuchtet, sofort für 2 Sekunden Reset-Button drücken
  • DMZ-Lampe 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:

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

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

Siehe auch

Persönliche Werkzeuge