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

  • Certstream, InfluxDB, Grafana und Netflix

    16.04.2019

    Nachdem ich vor kurzem über mein erstes Spielen mit dem certstream berichtete, habe ich weitere Experimente gemacht und die Daten zur besseren Auswertung in eine InfluxDB gepackt, um sie mit Grafana untersuchen zu können.

    Weiterlesen...

Neueste Artikel

  • Die sQLshell ist nun cloudnative!

    Die sQLshell hat eine weitere Integration erfahren - obwohl ich eigentlich selber nicht viel dazu tun musste: Es existiert ein Projekt/Produkt namens steampipe, dessen Slogan ist select * from cloud; - Im Prinzip eine Wrapperschicht um diverse (laut Eigenwerbung mehr als 140) (cloud) data sources.

    Weiterlesen...
  • LinkCollections 2024 III

    Nach der letzten losen Zusammenstellung (für mich) interessanter Links aus den Tiefen des Internet von 2024 folgt hier gleich die nächste:

    Weiterlesen...
  • Funktionen mit mehreren Rückgabewerten in Java

    Da ich seit nunmehr einem Jahr bei meinem neeun Arbeitgeber beschäftigt und damit seit ungefähr derselben Zeit für Geld mit Python arbeite, haben sich gewisse Antipathien gegenüber Python vertieft (ich kann mit typlosen Sprachen einfach nicht umgehen) - aber auch einige meiner Gründe, Python zu lieben sind ebenso stärker geworden. Einer davon ist der Fakt, dass eine Methode in Python mehr als einen Wert zurückgeben kann.

    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.