DIY Wireless Router


  1. Komponentenauswahl
  2. Starten Sie die Netzwerkschnittstellen
  3. Einstellen eines 802.11ac-Zugangspunkts (5 GHz)
  4. 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

Am 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

Glü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 # Loopback auto lo iface lo inet loopback # WAN interface auto enp1s0 iface enp1s0 inet dhcp # Bridge (LAN) auto br0 iface br0 inet static address 192.168.1.1 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 bridge_ports enp2s0 post-up /usr/sbin/dnsmasq \ --pid-file=/var/run/dnsmasq.$IFACE.pid \ --dhcp-leasefile=/var/lib/misc/dnsmasq.$IFACE.leases \ --conf-file=/dev/null \ --interface=$IFACE --except-interface=lo \ --bind-interfaces \ --dhcp-range=192.168.1.10,192.168.1.150,24h pre-down cat /var/run/dnsmasq.$IFACE.pid | xargs kill 

Die Dokumentation /etc/network/interfaces hier

Wie 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 # Accept all client traffic on WAN interface enp1s0 wan client all accept # Accept all traffic on LAN interface br0 lan server all accept client all accept # Route packets between LAN and WAN router lan2wan inface br0 outface enp1s0 masquerade route all accept 

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 #### Interface configuration #### interface=wlp5s0 bridge=br0 driver=nl80211 ##### IEEE 802.11 related configuration ##### ssid=iCanHearYouHavingSex hw_mode=g channel=1 auth_algs=1 wmm_enabled=1 ##### IEEE 802.11n related configuration ##### ieee80211n=1 ##### WPA/IEEE 802.11i configuration ##### wpa=2 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP wpa_passphrase=YouCantGuess 

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 # Loopback auto lo iface lo inet loopback # WAN interface auto enp1s0 iface enp1s0 inet dhcp # Bridge (LAN) auto br0 iface br0 inet static address 192.168.1.1 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 bridge_ports enp2s0 post-up /usr/sbin/hostapd \ -P /var/run/hostapd.$IFACE.pid \ -B /etc/hostapd/hostapd-simple.conf post-up /usr/sbin/dnsmasq \ --pid-file=/var/run/dnsmasq.$IFACE.pid \ --dhcp-leasefile=/var/lib/misc/dnsmasq.$IFACE.leases \ --conf-file=/dev/null \ --interface=$IFACE --except-interface=lo \ --bind-interfaces \ --dhcp-range=192.168.1.10,192.168.1.150,24h pre-down cat /var/run/dnsmasq.$IFACE.pid | xargs kill pre-down cat /var/run/hostapd.$IFACE.pid | xargs kill 

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 #### Interface configuration #### interface=wlp5s0 bridge=br0 driver=nl80211 ##### IEEE 802.11 related configuration ##### ssid=iCanHearYouHavingSex hw_mode=a channel=0 auth_algs=1 wmm_enabled=1 country_code=US ieee80211d=1 ieee80211h=0 ##### IEEE 802.11n related configuration ##### ieee80211n=1 ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CK-40][LDPC][MAX-AMSDU-7935] ##### IEEE 802.11ac related configuration ##### ieee80211ac=1 vht_capab=[MAX-MPDU-11454][RXLDPC][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1][MAX-A-MPDU-LEN-EXP7][TX-ANTENNA-PATTERN][RX-ANTENNA-PATTERN] vht_oper_chwidth=1 ##### WPA/IEEE 802.11i configuration ##### wpa=2 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP wpa_passphrase=YouCantGuess 

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: * #{ AP, mesh point } <= 8, total <= 8, #channels <= 1, STA/AP BI must match ... 

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 ... # Physical Wireless auto wlp5s0 iface wlp5s0 inet manual pre-up ip link set dev wlp5s0 address 46:c3:06:00:03:e0 # Virtual Wireless allow-hotplug wlan0 iface wlan0 inet static address 192.168.2.1 network 192.168.2.0 netmask 255.255.255.0 broadcast 192.168.2.255 post-up /usr/sbin/dnsmasq \ --pid-file=/var/run/dnsmasq-wlan0.pid \ --conf-file=/dev/null \ --interface=wlan0 --except-interface=lo \ --bind-interfaces \ --dhcp-range=192.168.2.10,192.168.2.150,24h post-down cat /var/run/dnsmasq-wlan0.pid | xargs kill ... 

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 ... ### Virtual SSID(s) ### bss=wlan0 ssid=MyVirtualSSID wpa=2 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP wpa_passphrase=you_cant_guess 

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!

Source: https://habr.com/ru/post/de437634/


All Articles