- 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:
 Eisenporno
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-Expander
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!