Administration Hacking Hardware IT Linux Netzwerk

WLAN AccessPoint mit OpenWRT

WLAN AP auf dem Seziertisch

Meinen derzeitigen WLAN Access Point TL-WA901ND habe ich damals angeschafft, weil er billig war, und auf der Verpackung Multi SSID, 802.1X (WPA2-EAP), sowie VLAN beworbene Features waren. Das war zwar nicht gelogen, dennoch gibt es nicht erwähnte Einschränkungen. So ist es nicht möglich im Multi SSID Modus (verschiedene logische WLAN Netze auf einem Gerät) die radius basierte Authentifizierung 802.1X zu verwenden, sondern lediglich max. 4 unterschiedliche preshared keys (PSK). Ausserdem bricht das Gerät mit der Originalfirmware unter Last – insbesondere bei vielen verbundenen Clients – extrem in Punkto Performance ein.

Voraussetzungen:

  • Serial TTL Wandler z. B. auch mit USB Anschluß möglich
  • minimale Lötkenntnisse
  • 4er Stiftleiste zum Auflöten auf dem Board des Access Points
  • serielles Konsolenprogramm auf dem Rechner
  • TFTP Server zum Holen der Firmwaredatei

Da das Flashen des nahezu identischen Geräts in der warpzone bereits einen großen Performancegewinn beschert hat, hab ich dieses Projekt auch für meinen in Angriff genommen. Bei lediglich 4MB Flash-Speicher sollte man tunlichst den squashfs Build nehmen und nicht das jffs2 Derivat, da einem sonst beim Ablauf der Postinstallskripte der Speicherplatz ausgeht. Für mein Gerät mit Hardware Rev. v1.04 ist also dieses OpenWRT 12.09-beta (Attitude Adjustment) Image zu verwenden.

Vorbereitungen für das Flashen:

Zwar wäre es möglich gewesen bei dieser Hardwareversion das Image über die Firmwarupdatefunktion der Originalsoftware einzuspielen, doch dann hätte ich im Fehlerfall nicht sehen können, ob und was schiefgelaufen ist, also musste ich erstmal 4 Pin-Header für die serielle Schnittstelle auf das Mainboard auflöten, wobei die Belegung wie bei TP-Link typisch die Folgende ist: RX – TX – GND – +3.3V (Strombuchse).

Zum Anschluß an einen Computer benötigt man zwingend einen seriellen TTL Adapter, der mit 3,3V kommuniziert, eine normale RS-232 Schnittstelle vom PC arbeitet mit 12V, was das Gerät mit Sicherheit grillen würde. Mit den Einstellungen 115200 baud, 8bits, keine Flußkontrolle und einem Stopbit, kann man dem Gerät nun beim Booten auf die Konsole schauen. Unter Linux verwende ich dafür entweder screen oder das grafische GTKTerm, unter Windows auch gerne putty.

Außerdem benötigen wir einen TFTP Server, der uns das OpenWRT Image über das Netzwerk ausliefert, wenn wir es anfordern. Ich nutze dazu den entsprechenden Dienst meines FreeNAS Storages, tftpd-hpa, dnsmasq oder etwas Vergleichbares werden es aber ebenso tun. Pro-Tipp: Das Image umbenennen, damit man den langen Dateinamen auf der Konsole nicht tippen muss

OpenWRT auf das Gerät bringen:

Ist das Gerät bereit, das Terminal läuft und die Verbindung steht, kann man Netzwerkkabel und Stromstecker einstecken und sollte den Durchlauf des uBoot Bootloaders sehen. Es gibt einen Zeitpunkt vor dem Laden des Kernels, an dem man ca 1 Sekunde Zeit hat, durch tippen von “tpl” den Startvorgang abzubrechen und auf den Prompt des Bootloaders zu gelangen. Das gelingt vermutlich erst nach ein paar Versuchen

Hat man es dennoch geschafft, kann man die IP- Adresse des Geräts und die des Rechners mit dem TFTP Server angeben.

setenv ipaddr a.b.c.d
setenv serverip e.f.g.h

Nun wird das OpenWRT Image vom Server in den RAM geladen, der Flash-Speicher gelöscht und anschließend das neue Image aufgespielt.

tftpboot 0x80000000 openwrt-ar71xx-tl-wa901nd-squashfs-factory.bin
erase 0x9f020000 +0x3c0000
cp.b 0x80000000 0x9f020000 0x3c0000

Hat dies ohne Anzeichen von Fehlern geklappt, kann man jetzt den Bootvorgang anwerfen:

bootm 0x9f020000

Der erste Start dauert noch ein wenig länger, da der verbleibende Speicher auf dem Flashbaustein mit einem jffs2 overlay Dateisystem formatiert wird, danach kann man das Gerät mit Telnet, SSH und über das Webinterface auf der IP-Adresse 192.168.1.1

Um, das Interface für das unvertraute Gäste VLAN zu erstellen, habe ich keine Möglichkeit im LUCI (Webinterface) oder UCI (Konsolenconfigprogramm) gefunden, dafür habe ich mir kurzerhand ein kleines Initscript geschrieben, das mir das Interface beim Booten hochzieht:

#!/bin/sh /etc/rc.common
START=99
start(){
vconfig add eth0 255
}

stop(){
vconfig rem vlan255
}

Das Script muss natürlich ausführbar sein, root gehören und kann dann im Webif aktiviert werden. Dann hat man im Interfaces Menü auch direkt die Möglichkeit, das Interface zu verwerden und Zonen zuzuordnen.

Fazit

Durch den Einsatz der OpenWRT Software ist alles aufgegangen, was ich mir von dem Stunt erwartet habe, ich habe eine WLAN SSID, die mit 802.1X Authentifizierung auf das vertraute VLAN gebridged ist und ein weiteres nur mit WPA2-PSK gesichertes, das in das unvertraute Gäste VLAN gesteckt wird, zudem hab ich Durchsatzraten über WLAN wie noch nie zuvor mit dem Gerät erreicht (bis zu 83Mbit/s Realdurchsatz mit einem Gerät, das nur WLAN-N 150 beherrscht) und die Performance bricht bei vielen Clients kein bisschem mehr ein. #win!

Autor

Seit Kindheitstagen ist der Computer sein Begleiter. Was mit Linux anfing, wurde 2005 ein/e Beruf/ung, die weit über den Arbeitsplatz hinausgeht. Durch stetige Weiterentwicklung fasste er auch im *BSD Segment Fuß und bietet mittlerweile professionelle Lösungen im Bereich Hosting, Networking und Infrastruktur an. Als Ausgleich beschäftigt er sich neben Computerspielen mit der Fotografie.

10 Kommentare Neuen Kommentar hinzufügen

  1. Michael sagt:

    Hi,

    leider sind die VLAN-Scripte nicht mehr auf der Seite – stattdessen gibt es scheinbar einen GeSHi Error.

    Kannst du deine Init-Scripte nochmal veröffentlichen?
    Das wäre wirklich super!

    Vielen Dank und viele Grüße

  2. Simon sagt:

    Hallo,

    ich habe das fertige Trunk aus dem OpenWRT-Wiki auf einem meiner WA901ND aus dem selben Grund wie du installiert und setzte dieses zur Zeit mit einem Gäste-WLAN (mit Captive Portal) sowie einem über einen über WPA2-PSK gesicherten internen Netz ein. Leider hat das fertige Trunk wpad-mini und nicht wpad installiert so dass ich kein WPA2-EAP einsetzen kann, was ich aber gerne würde.
    Um wpad zu installieren fehlt mir jetzt der nötige Speicher. Es scheint ja Möglichkeiten zu geben über ein Skript die nicht benötigten und deinstallierten Pakete aus dem Dateisystem zu entfernen aber dazu fehlt mir leider das nötige Linux-Wissen.
    Könntest du mir an dieser Stelle etwas helfen?

    1. Das ist extrem schlecht. Da das squashfs image read only ist, bleibt wirklich nur der Weg, Teile aus dem Image zu entfernen, ober aber openwrt mit weniger Paketen neu aus den Quellen zu kompilieren. Während die erste Variante eher ein böser Hack ist, dürfte dies vermutlich schneller gehen, erfordert aber bei jedem Update die gleichen Schritte erneut auszuführen. Die 2. Variante, hätte den Vorteil – wenn Du wirklich bleeding edge fahren willst – dass Du Deinen Sourcetree bequem mit den Versionsverwaltungstools (entweder svn oder git) aktuell halten könntest und Deine gestrichenen Pakete in der Config dabei erhalten blieben, sodaß ein einfache update des sourcetrees + erneutes kompilieren ein neues (hoffentlich immer noch passendes) image hervorbringen.
      Beides erfordert etwas Beschäftigung mit dem Thema und würde ich Anfängern nicht ohne Weiteres empfehlen.
      Gibt es Gründe, die für Dich gegen die stabile 12.09 attitude adjustment sprechen? Diese hat noch einige KB frei, in die wpad und ne handvoll Skritpe noch hineinpassen, außerdem ist sie getestet und läuft stabil.

      1. Simon sagt:

        Hallo Marcus und Danke für die schnelle Antwort.
        Für mich spricht nichts gegen attitude adjustment, setze ich ja auch aktuell ein. Da ich aber bis auf die Verwaltung einiger Firewalls und Webserver nicht mit Linux arbeite würde es bestimmt eine Weile dauern bis ich mich soweit eingearbeitet hätte dass ich mir ein eigenes Image kompilieren kann.
        Deshalb hatte ich ja die absolute Anfänger-Variante gewählt und das fertig kompilierte Image über die Weboberfläche installiert. Dass diese allerdings kein WPA2-Enterprise unterstützt hatte ich nicht erwartet.
        Das Gerät soll auch nicht mehr können als mein internes WLAN-Netz (gesichert über WPA2-Enterprise) und ein offenes WLAN-Netz für das captive Portal in einem separaten VLAN zur Verfügung zu stellen. Dass ich es jemals updaten werden glaube ich nicht.

          1. Simon sagt:

            Hallo Marcus,
            genau das hatte ich ja gemacht allerdings passen dann LuCI und wpad zusammen nicht drauf. Ich muss mich also zwischen wpad und LuCI entscheiden und da mir LuCI ohne wpad nichts bringt muss ich mich jetzt halt durch eine Konfiguration von VLANs und Wireless per UCI kämpfen.

          2. Interessant, ich habe schon so einige OpenWRT Versionen aufgespielt und immer den wpad zusätzlich (zum luci) installiert bekommen auch in der derzeit stabilen 12.09 Version. Hast Du ggf. irgendwelche Sprachpakete für luci installiert? Da nutze ich nur die normale englische …

  3. cmoegele sagt:

    Hi Commander,
    Danke für die Info. Stoße bei meinem WRT350nv2 auch auf das gleiche Problem mit dem Vlan und bin über google auf Deiner super Seite gelandet.
    Leider bin ich nicht der Linuxpro und kann Deiner Kurzbeschreibung mit dem Webif script nicht ganz folgen.
    Wäre super, wenn Du die Vorgehensweise für Laien wie mich etwas detailierter beschreiben könntest. ( bzw. vielleicht sogar in den luci trunk einpflegen könntest,… ).

    Viele Grüße

    Chris

    1. Ich habe das Skript hier abgelegt: /etc/init.d/create_vlan255
      danach: chmod +x /etc/init.d/create_vlan255
      dann kann man es im Luci unter System -> Startup starten / stoppen / aktiveren usw.

      Etwas einfach, wenn auch schmutziger wäre, einfach im Feld darunter bei “Local Startup” den Befehl einzutragen:
      vconfig add eth0 255

      Der Nachteil man könnte es via webif nicht einfach an oder ausmachen und das interface wird beim runterfahren nicht mehr entfernt, aber da es beim reboot eh verschwindet, eigentlich peng – nur halt nicht so schön.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.