- Komponentenauswahl
- Starten Sie die Netzwerkschnittstellen
- Einstellen eines 802.11ac-Zugangspunkts (5 GHz)
- Konfigurieren einer virtuellen SSID mit hostapd
In den letzten zehn Jahren habe ich billige Netzwerkgeräte gekauft und
DD-WRT darauf installiert, um die "Funktionen" für mehr als 500 US-Dollar zurückzugeben, die aus dem Linux-Kernel entfernt wurden, auf dem die Standard-Firmware basiert.
Trotz der instabilen Builds, unkorrigierten Fehler und
Streitigkeiten ist DD-WRT der Lagerfirmware vorzuziehen. Aber jetzt sind würdige Komponenten billiger als je zuvor, und die DIY-Community hat vollständig auf Linux umgestellt (ich sehe Sie an, Mr. Raspberry). Warum also nicht ein für alle Mal Ihren eigenen WLAN-Router bauen?
Komponentenauswahl
Zunächst müssen Sie sich für die Plattform entscheiden:
x86 oder
ARM ? Ich werde
die Hauptunterschiede nicht
im Detail diskutieren , aber kurz: Ersteres hat eine bessere Leistung, während Letzteres billiger und energieeffizienter ist. Raspberry Pi-Karten (und Äquivalente) sind extrem billig und wahrscheinlich leistungsstärker als die meisten kommerziellen WLAN-Router. X86-Plattformen sind jedoch weit verbreitet und bieten den Vorteil standardisierter Formfaktoren und Erweiterungsports.
Das wichtigste Detail ist natürlich der Chipsatz. Heutzutage sind die De-facto-Standards
802.11n (2,4 GHz) und
802.11ac (5 GHz), aber das Aufnehmen von Treibern für Linux ist
immer noch eine Herausforderung , insbesondere bei der Unterstützung des AP-Modus (Access Point). Kurz gesagt, wenn Sie keine Probleme haben möchten, wählen Sie
Atheros- Chipsätze. Die
Treiber ath9k und
ath10k werden gut unterstützt. Sie können sie problemlos über USB- und / oder Mini-PCIe-Schnittstellen finden.
Mindestens ein Network Interface Controller (NIC) ist ein notwendiges Minimum. Wählen Sie RAM und Speicher nach Ihrem Geschmack.
Materialliste
Um Preis und Leistung zu opfern, entschied ich mich für die x86-Plattform für eine modulare, relativ leistungsstarke Konfiguration, die für ein Upgrade verfügbar ist.
Wenn Sie keinen ARM benötigen, ist kein Lüfter erforderlich.Das Gehäuse ist geräumig und verfügt über zwei vorbereitete Löcher für den AC / DC-Stecker. Die Installation von Motherboard, RAM und Pico-PSU verlief reibungslos:
EisenpornoAm schwierigsten war die Installation von Mini-PCIe-WLAN, da die Karte nur Karten halber Größe unterstützt: Hier kam das mPCIe-Verlängerungskabel zur Rettung. Ich nahm ein 20-cm-FFC-Kabel (im Lieferumfang enthalten), um beide Seiten des Adapters anzuschließen, und befestigte die Mini-PCIe mit doppelseitigem Klebeband am Gehäuse.


Mini-PCIe-ExpanderGlücklicherweise verfügt das Chassis über drei vorgeschnittene Antennenlöcher. Hier ist das Endergebnis:


Software
Es ist klar, dass wir Linux setzen. Abhängig von der Hardware kann es sich um eine optimierte Distribution wie
Raspbian (für den Raspberry Pi) oder eine andere Linux-Distribution handeln, die Sie mögen. Da ich Ubuntu seit vielen Jahren verwende, habe ich mich für
Ubuntu Server 18.04 LTS entschieden , mit dem ich eher vertraut bin und der langfristigen Support hat.
Im Rest dieses Artikels wird davon ausgegangen, dass Sie eine Debian-basierte Distribution verwenden.Wenn die Installation erfolgreich war und Sie zur Konsole gegangen sind, definieren Sie die Schnittstellennamen:
$ ip -br a | awk '{print $1}' lo enp1s0 enp2s0 wlp5s0
Auf dem Motherboard befinden sich zwei integrierte
enp1s0
:
enp1s0
und
enp2s0
. Die WLAN-Karte wird als
wlp5s0
und unterstützt wie vorgesehen den AP-Modus:
$ iw list ... Supported interface modes: * managed * AP * AP/VLAN * monitor * mesh point
Jetzt können wir skizzieren, was wir brauchen: Wir setzen die erste Netzwerkkarte als WAN-Port und die zweite als Verbindung zur drahtlosen Schnittstelle:

Netzwerk
Wenn Sie Ubuntu 18.04 haben,
netplan
sofort, um zur Unterstützung von / etc / network / interfaces zurückzukehren:
$ sudo apt-get install ifupdown bridge-utils $ sudo systemctl stop networkd-dispatcher $ sudo systemctl disable networkd-dispatcher $ sudo systemctl mask networkd-dispatcher $ sudo apt-get purge nplan netplan.io
Wählen Sie als DHCP / DNS-Server
dnsmasq aus :
$ sudo apt-get install dnsmasq
dnsmasq
daran, den Daemon beim Booten zu deaktivieren, da wir den
dnsmasq
Prozess über den
post-up
Hook starten und konfigurieren:
$ sudo sed -i "s/^ENABLED=1$/ENABLED=0/g" /etc/default/dnsmasq
Wir werden die
vorläufige Konfiguration der Netzwerkschnittstellen gemäß dem Diagramm schreiben, einschließlich der Mindestkonfiguration von
dnsmasq
:
$ cat /etc/network/interfaces
Die Dokumentation /etc/network/interfaces
hierWie Sie im
post-up
Bereich sehen können, startet dnsmasq, sobald die Brücke steigt. Die Konfiguration wird nur durch Befehlszeilenargumente (
--conf-file=/dev/null
) durchgeführt, und der Prozess wird gestoppt, wenn die Schnittstelle ausgeschaltet wird.
Die
bridge_ports
Schnittstelle wird im
wlp5s0
bridge_ports
nicht speziell angegeben, da
hostapd
sie automatisch zur Bridge hinzufügt (brctl kann dies ablehnen, bevor hostapd gestartet wird, um den Schnittstellenmodus zu ändern).
Siehe dnsmasq
Dokumentation .Jetzt können Sie das Netzwerk neu starten (Neustart des
sudo service networking restart
) oder einfach
sudo service networking restart
, um zu überprüfen, ob die Netzwerkkonfiguration korrekt ist.
Bitte beachten Sie: Obwohl wir derzeit DHCP von
enp2s0
empfangen
enp2s0
, haben wir
weder eine drahtlose Verbindung (dazu später mehr)
noch einen Internetzugang (siehe unten).
Routing
Zu diesem Zeitpunkt müssen Sie Pakete zwischen den LAN- (
enp2s0
) und
enp1s0
(
enp1s0
)
enp1s0
und die
Netzwerkadressübersetzung aktivieren.
Das Aktivieren der Paketweiterleitung ist einfach:
$ sudo sysctl -w net.ipv4.ip_forward=1 $ echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
Der letzte Befehl stellt sicher, dass die Konfiguration bis zum nächsten Neustart gespeichert wird.Die Übersetzung von Netzwerkadressen ist eine andere Sache. Normalerweise müssen Sie sich mit
iptables
befassen (oder diese eher bekämpfen). Glücklicherweise ist die Steinzeit lange vorbei und die Jungs von FireHol haben sich viel Mühe gegeben, um die notwendige Abstraktionsebene hinzuzufügen:
$ sudo apt-get install firehol
FireHOL ist eine hochmoderne sichere Firewall-Sprache, deren Konfiguration leicht zu verstehen und zugänglich ist. Sie müssen keine
iptables
Anweisungen mehr schreiben: Die Konfigurationsdatei selbst wird in
iptables
Anweisungen übersetzt und nach Bedarf angewendet. Kein Daemon im Hintergrund.
Das Aktivieren der Übersetzung von Netzwerkadressen für LAN-Schnittstellen durch Hinzufügen von Mindestregeln für die Firewall erfolgt elementar:
$ cat /etc/firehol/firehol.conf version 6
FireHOL wird von Menschen für Menschen geschrieben, die Dokumentation finden Sie hier .Sie können die Einstellungen überprüfen, indem Sie
firehol
manuell
firehol
(
sudo firehol start
) und den Laptop an den LAN-Port anschließen.
Jetzt können Sie online gehen, wenn der WAN-Port verbunden ist.
/etc/default/firehol
vor dem Neustart
sicher , dass Sie
/etc/default/firehol
, damit FireHol beim Booten gestartet werden kann:
$ sudo sed -i -E "s/^START_FIREHOL=.+$/START_FIREHOL=YES/g" /etc/default/firehol
Ich werde nicht auf Details der gesamten firehol
Syntax firehol
, die Konfigurationsdatei erklärt sich von selbst. Ich empfehle, bei einer komplexeren Konfiguration auf die Dokumentation zu firehol
. Wenn Sie wirklich daran interessiert sind, was firehol
mit iptables
, geben Sie einfach sudo firehol status
in die Befehlszeile ein.Drahtloser Hotspot
Natürlich werden wir den Zugangspunkt mit
hostapd verwalten :
$ sudo apt-get install hostapd
Unten finden Sie eine minimale und fast unerklärliche 802.11 n / 2.4 Ghz / WPA2-AES-Konfigurationsdatei:
$ cat /etc/hostapd/hostapd-simple.conf
hostpad.conf
Dokumentation finden Sie in der /usr/share/doc/hostapd/examples/hostapd.conf
hostpad.conf
unter /usr/share/doc/hostapd/examples/hostapd.conf
.
Die beschriebene Konfiguration kann manuell getestet werden:
$ sudo hostapd /etc/hostapd/hostapd-simple.conf
Wenn alles gut geht, wird eine
drahtlose Verbindung angezeigt . Wenn Sie mit dem Ergebnis zufrieden sind,
vergessen Sie nicht, die Konfiguration zu ändern, um
hostapd
zu starten, sobald die Schnittstelle ansteigt (wie unten gezeigt).
Hier ist Ihre endgültige /etc/network/interfaces:
$ cat /etc/network/interfaces
Einstellen eines 802.11ac-Zugangspunkts (5 GHz)
Passiver Scan
Laut der
Airetos AEX-QCA9880-NX- Dokumentation unterstützt der Chipsatz 802.11ac, sodass wir die überfüllten 2,4-GHz-Kanäle im Paradies mit 5 GHz
belassen können.
Mal sehen, welche Frequenzen unterstützt werden:
$ iw list ... Frequencies: * 2412 MHz [1] (20.0 dBm) * 2417 MHz [2] (20.0 dBm) * 2422 MHz [3] (20.0 dBm) * 2427 MHz [4] (20.0 dBm) * 2432 MHz [5] (20.0 dBm) * 2437 MHz [6] (20.0 dBm) * 2442 MHz [7] (20.0 dBm) * 2447 MHz [8] (20.0 dBm) * 2452 MHz [9] (20.0 dBm) * 2457 MHz [10] (20.0 dBm) * 2462 MHz [11] (20.0 dBm) * 2467 MHz [12] (disabled) * 2472 MHz [13] (disabled) * 2484 MHz [14] (disabled) ... Frequencies: * 5180 MHz [36] (17.0 dBm) (no IR) * 5200 MHz [40] (17.0 dBm) (no IR) * 5220 MHz [44] (17.0 dBm) (no IR) * 5240 MHz [48] (17.0 dBm) (no IR) * 5260 MHz [52] (23.0 dBm) (no IR, radar detection) * 5280 MHz [56] (23.0 dBm) (no IR, radar detection) * 5300 MHz [60] (23.0 dBm) (no IR, radar detection) * 5320 MHz [64] (23.0 dBm) (no IR, radar detection) * 5500 MHz [100] (23.0 dBm) (no IR, radar detection) * 5520 MHz [104] (23.0 dBm) (no IR, radar detection) * 5540 MHz [108] (23.0 dBm) (no IR, radar detection) * 5560 MHz [112] (23.0 dBm) (no IR, radar detection) * 5580 MHz [116] (23.0 dBm) (no IR, radar detection) * 5600 MHz [120] (23.0 dBm) (no IR, radar detection) * 5620 MHz [124] (23.0 dBm) (no IR, radar detection) * 5640 MHz [128] (23.0 dBm) (no IR, radar detection) * 5660 MHz [132] (23.0 dBm) (no IR, radar detection) * 5680 MHz [136] (23.0 dBm) (no IR, radar detection) * 5700 MHz [140] (23.0 dBm) (no IR, radar detection) * 5720 MHz [144] (23.0 dBm) (no IR, radar detection) * 5745 MHz [149] (30.0 dBm) (no IR) * 5765 MHz [153] (30.0 dBm) (no IR) * 5785 MHz [157] (30.0 dBm) (no IR) * 5805 MHz [161] (30.0 dBm) (no IR) * 5825 MHz [165] (30.0 dBm) (no IR) ...
In der obigen Liste sehen wir, dass der Chipsatz die Kanäle 1-14 (2,4 GHz) und 36-165 (5 GHz) unterstützt. Haben Sie jedoch das
no IR
Flag bemerkt?
Das Flag
no IR
zeigt an, dass
keine Strahlung ausgelöst wird (d. H.
Passives Abtasten ). Dies bedeutet, dass dieser Modus in dem Fall verboten ist, in dem das Gerät als erstes eine Strahlung
auslöst (einschließlich
Beacons ). Mit anderen Worten,
Sie können den Zugangspunkt auf diesen Kanälen nicht ausführen !
Regulatorische Anforderungen
Die obige Situation erklärt sich aus den
gesetzlichen Anforderungen von Linux , die die Nutzung des Funkfrequenzspektrums
je nach Land regeln.
Aber hey!
Ich lebe in den USA und der Link besagt, dass ich das Recht habe, Strahlung auf den Kanälen 36-48 zu initiieren. Was ist also los? Mal sehen, welche Regulierungsdomäne derzeit verwendet wird:
$ iw reg get country 00: DFS-UNSET (2402 - 2472 @ 40), (N/A, 20), (N/A) (2457 - 2482 @ 40), (N/A, 20), (N/A), NO-IR (2474 - 2494 @ 20), (N/A, 20), (N/A), NO-OFDM, NO-IR (5170 - 5250 @ 80), (N/A, 20), (N/A), NO-IR (5250 - 5330 @ 80), (N/A, 20), (0 ms), DFS, NO-IR (5490 - 5730 @ 160), (N/A, 20), (0 ms), DFS, NO-IR (5735 - 5835 @ 80), (N/A, 20), (N/A), NO-IR (57240 - 63720 @ 2160), (N/A, 0), (N/A)
Das Problem zeigt, dass die Weltdomäne derzeit aktiv (oder nicht installiert) ist,
dh die in jedem Land zulässigen Mindestwerte .
Leider können Sie die
sudo iw reg set
Domäne nicht manuell installieren, da die Domäne im EEPROM geschützt ist:
$ dmesg | grep EEPROM [ 12.123068] ath: EEPROM regdomain: 0x6c
Patch!
Glücklicherweise werden gesetzliche Anforderungen auf Treiberebene verarbeitet, sodass sie leicht geändert werden können: Wir finden den Patch im
Open-WRT-Quellcode .
Vergessen Sie zunächst nicht, das Quellcode-Repository über
/etc/apt/sources.list
zu verbinden:
$ cat /etc/apt/sources.list ... deb-src http://us.archive.ubuntu.com/ubuntu/ bionic main restricted ...
Bereiten Sie dann die Umgebung vor, indem Sie die erforderlichen Abhängigkeiten installieren:
$ sudo apt-get install build-essential fakeroot $ sudo apt-get build-dep linux
Laden Sie Ihre Kernelquellen herunter:
$ apt-get source linux
Da der
ursprüngliche Open-WRT-Patch aufgrund geringfügiger Unterschiede im Build-System nicht unverändert auf den Ubuntu-Kernelbaum angewendet werden kann, musste ich Folgendes beheben:
$ VERSION=$(uname -r) $ cd linux-${VERSION%%-*} $ wget -O - https://gist.github.com/renaudcerrato/02de8b2e8dc013bc71326defd2ef062c/raw/a2db325e520e6442c8c12f7599d64ac1b7596a3e/402-ath_regd_optional.patch | patch -p1 -b
Alles ist montagefertig:
$ fakeroot debian/rules clean $ fakeroot debian/rules binary-generic
Wenn es keine Probleme gibt, können Sie jetzt den festen Kernel über dem vorherigen installieren:
$ cd .. $ sudo dpkg -i linux*.deb
Neustart und voila:
$ sudo iw reg set US $ iw list ... Frequencies: * 5180 MHz [36] (17.0 dBm) * 5200 MHz [40] (17.0 dBm) * 5220 MHz [44] (17.0 dBm) * 5240 MHz [48] (17.0 dBm) * 5260 MHz [52] (23.0 dBm) (radar detection) * 5280 MHz [56] (23.0 dBm) (radar detection) * 5300 MHz [60] (23.0 dBm) (radar detection) * 5320 MHz [64] (23.0 dBm) (radar detection) * 5500 MHz [100] (23.0 dBm) (radar detection) * 5520 MHz [104] (23.0 dBm) (radar detection) * 5540 MHz [108] (23.0 dBm) (radar detection) * 5560 MHz [112] (23.0 dBm) (radar detection) * 5580 MHz [116] (23.0 dBm) (radar detection) * 5600 MHz [120] (23.0 dBm) (radar detection) * 5620 MHz [124] (23.0 dBm) (radar detection) * 5640 MHz [128] (23.0 dBm) (radar detection) * 5660 MHz [132] (23.0 dBm) (radar detection) * 5680 MHz [136] (23.0 dBm) (radar detection) * 5700 MHz [140] (23.0 dBm) (radar detection) * 5720 MHz [144] (23.0 dBm) (radar detection) * 5745 MHz [149] (30.0 dBm) * 5765 MHz [153] (30.0 dBm) * 5785 MHz [157] (30.0 dBm) * 5805 MHz [161] (30.0 dBm) * 5825 MHz [165] (30.0 dBm) ...
Um automatische Updates zu vermeiden, müssen Sie möglicherweise die Linux-Kernelversion reparieren .Konfiguration
Die neue
hostapd
Konfigurationsdatei ist recht einfach:
hw_mode=a
enthält 5-GHz-Bänder und
ieee80211ac=1
enthält 802.11ac (VHT). Die Option
ieee80211d=1
mit
country_code=US
gibt die Regulierungsdomäne an, unter der wir tätig sind.
Um die Bandbreite
ht_capab
vht_capab
sollten
ht_capab
und
vht_capab
die Funktionen der Geräte widerspiegeln:
$ iw list ... Band 1: Capabilities: 0x19e3 RX LDPC HT20/HT40 Static SM Power Save RX HT20 SGI RX HT40 SGI TX STBC RX STBC 1-stream Max AMSDU length: 7935 bytes DSSS/CCK HT40 ... Band 2: VHT Capabilities (0x338001b2): Max MPDU length: 11454 Supported Channel Width: neither 160 nor 80+80 RX LDPC short GI (80 MHz) TX STBC RX antenna pattern consistency TX antenna pattern consistency
In diesem Sinne ist
hier die endgültige hostapd.conf
:
$ cat /etc/hostapd/hostapd.conf
hostpad.conf
Dokumentation finden Sie in der /usr/share/doc/hostapd/examples/hostapd.conf
hostpad.conf
unter /usr/share/doc/hostapd/examples/hostapd.conf
.
Zu diesem Zeitpunkt ist der WLAN-Router voll funktionsfähig. Wenn Sie eine komplexere Konfiguration benötigen, können Sie jetzt in die Konfigurationsdateien eintauchen.
Konfigurieren einer virtuellen SSID mit hostapd
Unabhängig davon, ob Sie einen Gastzugriffspunkt oder ein dediziertes drahtloses Netzwerk für Ihr VPN konfigurieren möchten, müssen Sie irgendwann eine virtuelle SSID konfigurieren.
Diagramm
Basierend auf der
aktuellen Konfiguration finden Sie hier ein aktualisiertes Diagramm dessen, was wir erhalten möchten. Angenommen,
wlp5s0
ist die physische drahtlose Schnittstelle, funktioniert die virtuelle SSID auf der virtuellen
wlan0
Schnittstelle unter Verwendung eines eigenen
192.168.2.0/24
:

Vorbereitung
Überprüfen Sie zunächst, ob Ihr drahtloses Gerät mehrere SSIDs unterstützt:
$ iw list ... valid interface combinations: *
Wie Sie sehen können, unterstützt der Chipsatz bis zu acht Zugriffspunkte auf einem Kanal. Dies bedeutet, dass Sie bis zu sieben virtuelle SSIDs konfigurieren können und alle auf demselben Kanal arbeiten.
Netzwerkschnittstelle
Gemäß der Dokumentation in hostapd.conf besteht eine strikte Verbindung zwischen der MAC-Adresse der physischen Schnittstelle und der BSSID der virtuellen Schnittstellen:
hostapd generiert eine BSSID-Maske basierend auf den konfigurierten BSSIDs. hostapd überprüft, ob dev_addr & MASK == dev_addr . Ist dies nicht der Fall, muss die MAC-Adresse des Radios geändert werden, bevor hostapd gestartet wird. Wenn für jedes sekundäre BSS eine BSSID konfiguriert ist, wird diese Einschränkung bei hostapd nicht angewendet, und andere Masken können verwendet werden, wenn der Treiber sie unterstützt (z. B. das lokal verwaltete Bit austauschen).
BSSIDs werden in der Reihenfolge jedem BSS zugewiesen, es sei denn, mit dem Parameter 'bssid' wird eine explizite BSSID angegeben.
Wenn eine explizite BSSID angegeben wird, muss diese so ausgewählt werden, dass:
- führt zu einer gültigen MASKE, die diese und die dev_addr abdeckt
- stimmt nicht mit der MAC-Adresse des Radios überein
- ist nicht dasselbe wie jede andere explizit angegebene BSSID
Um diese Anforderungen zu erfüllen und
hostapd
automatische Zuweisung der BSSID der virtuellen Schnittstelle (n) zu ermöglichen, aktualisieren wir die MAC-Adresse der physischen drahtlosen Schnittstelle, indem wir die vier niedrigstwertigen Bits auf Null setzen. Dies reicht für 15 virtuelle BSSIDs - viel mehr als nötig.
Bestimmen Sie zunächst die aktuelle MAC-Adresse:
$ ip addr show wlp5s0 | grep link | awk '{print $2}' 44:c3:06:00:03:eb
Wenn Sie die letzten vier Bits löschen und das
U / L-Bit setzen , erhalten Sie die MAC-Adresse
46:c3:06:00:03:e0
.
Jetzt aktualisieren wir die Konfiguration, um die richtige MAC-Adresse unmittelbar vor dem Laden der Schnittstelle festzulegen, und deklarieren auch eine virtuelle drahtlose Schnittstelle gemäß unserem Diagramm:
$ cat /etc/network/interfaces ...
Großartig. Ich verwende
dnsmasq
als DHCP-Server. Sie können es
dnsmasq
durch einen
dnsmasq
Server ersetzen. Bitte beachten Sie, dass für die ordnungsgemäße Funktion der virtuellen Schnittstelle das
allow-hotplug
erforderlich ist.
Access Point-Konfiguration
Das Einfachste:
hostapd
der aktuellen
hostapd
Konfiguration eine virtuelle SSID
hostapd
.
hostapd.conf
Sie dies einfach
am Ende der vorhandenen Datei
hostapd.conf
:
$ cat /etc/hostapd/hostapd.conf ...
Im Beispiel habe ich die WPA2-Verschlüsselung verwendet, aber die meisten Optionen für die Funkschnittstelle sind hier verfügbar (z. B.
channel
). Sie können weitere virtuelle SSIDs hinzufügen, indem Sie einfach die Zeilen in der Konfigurationsdatei entsprechend den deklarierten und korrekt konfigurierten virtuellen Schnittstellen hinzufügen.
Starten Sie jetzt neu - und sehen Sie Ihre neue SSID zusammen mit der neuen drahtlosen Schnittstelle (achten Sie auf die MAC-Adresse):
$ ip addr show wlan0 | grep link | awk '{print $2}' 46:c3:06:00:03:e1
Das war's Jungs!