Linux WiFi Accesspoint

25.03.2018

Seit einiger Zeit hatte ich bereits den Plan gefasst, unter Linux einen WiFi-Accesspoint selber zu bauen - also: die Softwarekonfiguration. Vergangene Woche habe ich nun endlich den Gedanken in die Tat umgesetzt...

Das System

Ich hatte mir vor einiger Zeit einen kleinen Server fürs Wohnzimmer angeschafft. Dieser verfügte onboard über WLan, das ich bis jetzt nicht nutzte. Also kramte ich zunächst mal die mitgelieferte Antenne hervor und testete ob die Schnittstelle unter Linux (auf dem Server läuft Ubuntu 16.04) ansprechbar war.

Nach einem ersten Erfolg überlegte ich, dass ich mein stabiles Linux ungern mit solchen Tests verunreinigen wollte - daher kam ich auf die Idee, die WLan-Schnittstelle in eienn LXC-Container auszulagern. Dort wollte ich dann in einer kontrollierten Umgebung den Accesspoint aufsetzen und weitere Experimente durchführen. Das brachte zwei Aspekte, die ich bisher in meiner Arbeit mit LXC noch nie umsetzen musste: mehr als eine Netzwerkschnittstelle in einem Container und eine Schnittstelle direkt in einen Container durchzureichen.

Beide Anforderungen lassen sich mit dem hier gezeigten Gist erreichen, der einen Teil einer LXC-Konfiguration (Netzwerk) zeigt.

Damit kann man den Container starten und im Container weiterarbeiten. Ich arbeitete mit einem Ubuntu16.04 im erstellten Container - die hier gemachten Aussagen lassen sich also auf einem Ubuntu 16.04 Host in einem Ubuntu 16.04 Container sofort nachvollziehen. In davon abweichenden Konfigurationen muss unter Umständen der eine oder andere Aspekt angepasst werden...

Installation benötigter Komponenten

Dazu sind die in diesem Gist niedergelegten Anweisungen als root auszuführen. Obwohl die Überschrift hier Installation sagt wird bereits ein wenig Konfiguration mit erledigt: die Firewall wird so angepasst, dass aus den zwei Netzen, die für die zwei SSIDs aufgespannt werden, auf das interne Netz zugegriffen werden kann.

Konfiguration benötigter Komponenten

hostapd

Wir wollen zwei SSIDs über den Adapter aufspannen. Die Konfiguration dafür findet man in diesem Gist. Hier werden zwei SSIDs aufgespannt - eine wird mit einem PSK konfiguriert, die zweite mit einer Datei, in der Paare von MAC-Adressen und PSKs abgelegt werden - so kann man der Vervielfältigung von WLAN-Passwörtern begegnen: Auch wenn jemand seins weitergibt, kann niemand anderes etwas damit anfangen.

Um hostapd mit der neuen Konfiguration beim Start des Containers automatisch starten zu lassen, müssen die folgenden Zeilen in die Datei /etc/default/hostapd eingefügt werden:

RUN_DAEMON="yes"
DAEMON_CONF="/etc/hostapd.conf"
DAEMON_OPTS="-dd"

Die Datei zur Vereinbarung individueller PSKs für einzelne MAC-Adressen besteht aus einzelnen Zeilen, deren Beginn die jeweilige MAC-Adresse darstellt, gefolgt von Whitespace und dem kodierten PSK. An diese kodierte Version gelangt man durch Aufruf von

wpa_passphrase "<your SSID>" "<the super secret passphrase>"

Nun müssen die durch diese Konfiguration zum Leben erweckten Schnittstellen noch zum Leben erweckt werden. Das geschieht mit einer entsprechend angepassten Datei /etc/network/interfaces - ein Beispiel dafür zeigt dieser Gist.

dnsmasq

Als erstes wird die Konfiguration von dnsmasq so angepasst, dass Clients, die sich mit der einen oder der anderen SSID verbinden eine Netzwerkadresse, Nameserver und Gateway zugewiesen werden. Dazu werden für jedes Device eine eigene Konfiguration erstellt und in das Verzeichnis /etc/dnsmasq.d/ abgelegt - in unserem Beispiel benötigt man also zwei, die als Gists hier und hier zu finden sind.

Ausblick

Was jetzt noch fehlt ist ein wenig Passwort-Management: Es wäre schön, wenn man einen Automatismus schaffen könnte, der das Passwort für SSID 1 (das, welches unabhängig von der MAC Adresse immer funktioniert) täglich ändert und dafür einen QR-Code erzeugt, der unkompliziert eingescannt werden kann.

Weiterhin wäre es schön, ein Skript zu haben, das für SSID 2 (ein Passwort pro MAC Adresse) für einen neuen User/ein neues Gerät die Konfigurationsanpassungen all-in-one ausführt und als Ergebnis gleich einen QR-Code anzeigt, den der User scannen kann (Geek-Factor: QR-Code als ASCII-Art!).

Und schließlich sind QR-Codes schön und gut - aber wir müssen auch an die Laptop-User denken: Hier wäre es schön, wenn sich eine Möglichkeit finden ließe, WPS anzubieten...

Hilfreiche Links

Hier noch einige Links, die mich in ihrer Gesamtheit zu der beschriebenen Lösung geführt haben:

Artikel, die hierher verlinken

Linux WiFi Accesspoint aus Raspi

09.06.2018

Nachdem ich mich nun dazu durchgerungen habe einen Raspi zu erwerben, habe ich auch gleich erste Tests damit durchgeführt. Einer der ersten überhaupt sollte die Umsetzung des in vorhergehenden Artikel beschriebenen WiFi Access-Points darstellen - das funktionierte allerdings nicht so reibungslos wie erhofft...

Linux WiFi Accesspoint die zweite

12.05.2018

Wie bereits am Ende des vorhergehenden Artikel zu diesem Thema beschrieben, standen noch die Themen regelmäßiger Tausch der Secrets, Erzeugung von QR-Codes und WPS aus - hier die Auflösung...

Alle Artikel rss Wochenübersicht Monatsübersicht Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Fährnisse des Buildprozesses unter Windows

    17.07.2019

    Nachdem ich begonnen hatte, mich mit der Beschleunigung der Berechnung des Mandelbrot-Fraktals unter Zuhilfenahme der Shadereinheiten in Graphikkarten zu beschäftigen und erste Erfolge feiern konnte, wollte ich das mal auf einer richtigen Graphikkarte ausprobieren...

    Weiterlesen...

Neueste Artikel

  • Datenvalidierung UTF8 mit BiDi-Steuerzeichen (TrojanSource 2.0)

    Ich bin heute nochmal inspiriert worden, weiter über die Trojan Source Vulnerability nachzudenken. Meiner Meinung nach bestehen hier noch Probleme - speziell bei Nutzereingaben oder Daten, die über externe Schnittstellen ampfangen werden.

    Weiterlesen...
  • OpenStreetMap Navi als Docker-Container

    Ich habe die auf OpenStreetMap basierende OpenSource Navigationslösung Graphhopper in einen Docker-Container gepackt und als neuestes Mitglied in meinem Docker-Zoo willkommen geheißen.

    Weiterlesen...
  • SQL-Aggregatfunktionen in SQLite als BeanShell-Scripts

    Ich habe neulich über eine Möglichkeit berichtet, SQLite mittels der sQLshell und Beanshell-Skripten um SQL-Funktionen zu erweitern. In diesem Artikel versprach ich auch, über eine solche Möglichkeit für Aggregatfunktionen zu berichten.

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.