Routeur sans fil bricolage


  1. Sélection des composants
  2. Lancer les interfaces réseau
  3. Configuration d'un point d'accĂšs 802.11ac (5 GHz)
  4. Configuration d'un SSID virtuel Ă  l'aide de hostapd

Au cours des dix derniÚres années, j'ai acheté un équipement réseau bon marché et y ai installé DD-WRT afin de retourner les «fonctions» pour plus de 500 $ supprimées du noyau Linux, sur lequel est basé le firmware d'origine.

Malgré des versions instables, des bugs et des litiges non corrigés, DD-WRT est toujours préférable au stockage du firmware. Mais maintenant, les composants dignes sont moins chers que jamais, et la communauté de bricolage est complÚtement passée à Linux (je vous regarde, M. Raspberry), alors pourquoi ne pas construire votre propre routeur sans fil une fois pour toutes?

Sélection des composants


Tout d'abord, vous devez dĂ©cider de la plate-forme: x86 ou ARM ? Je ne discuterai pas en dĂ©tail des principales diffĂ©rences , mais briĂšvement: le premier a de meilleures performances, tandis que le second est moins cher et plus Ă©conome en Ă©nergie. Les cartes Raspberry Pi (et Ă©quivalents) sont extrĂȘmement bon marchĂ© et probablement plus puissantes que la plupart des routeurs commerciaux sans fil, mais les plates-formes x86 sont rĂ©pandues et ont l'avantage de facteurs de forme et de ports d'extension standardisĂ©s.

Bien sûr, le détail le plus important est le chipset. Aujourd'hui, les normes de facto sont 802.11n (2,4 GHz) et 802.11ac (5 GHz), mais choisir des pilotes pour Linux reste un défi , en particulier avec la prise en charge du mode AP (point d'accÚs). En bref, si vous ne voulez pas de problÚmes, choisissez les chipsets Atheros . Les pilotes ath9k et ath10k sont bien pris en charge, vous pouvez facilement les trouver avec des interfaces USB et / ou mini-PCIe.

Au moins un contrÎleur d'interface réseau (NIC) est un minimum nécessaire, et choisissez la RAM et le stockage à votre goût.

Liste des matériaux


AprÚs avoir sacrifié le prix et la consommation d'énergie, j'ai choisi la plate-forme x86 pour la configuration modulaire et relativement puissante disponible pour la mise à niveau.

Si vous n'avez pas besoin d'un ARM, un ventilateur n'est pas nécessaire.


Le boßtier est spacieux, avec deux trous préparés pour la prise AC / DC. L'installation de la carte mÚre, de la RAM et du Pico-PSU s'est bien déroulée:


Iron porn

La chose la plus difficile a été d'installer le mini-PCIe WiFi, car la carte ne prend en charge que les cartes demi-taille: ici, le cùble d'extension mPCIe est venu à la rescousse. J'ai pris un cùble FFC de 20 cm (inclus) pour connecter les deux cÎtés de l'adaptateur et fixé le mini-PCIe au chùssis à l'aide de ruban adhésif double face.




Extenseur mini-PCIe

Heureusement, le chùssis est livré avec trois trous d'antenne prédécoupés. Voici le résultat final:





Logiciels


Il est clair que nous avons mis Linux. Selon le matériel, il peut s'agir d'une distribution optimisée comme Raspbian (pour le Raspberry Pi) ou toute autre distribution Linux que vous aimez. Depuis que j'utilise Ubuntu depuis de nombreuses années, j'ai choisi Ubuntu Server 18.04 LTS , avec lequel je suis plus habitué à travailler et qui a un support à long terme.

Le reste de cet article suppose que vous utilisez une distribution basée sur Debian.

Si l'installation s'est bien passĂ©e et que vous ĂȘtes allĂ© sur la console, dĂ©finissez les noms d'interface:

$ ip -br a | awk '{print $1}' lo enp1s0 enp2s0 wlp5s0 

Il y a deux cartes réseau intégrées sur la carte mÚre: ce sont enp1s0 et enp2s0 . La carte sans fil apparaßt comme wlp5s0 et prend en charge le mode AP, comme prévu:

 $ iw list ... Supported interface modes: * managed * AP * AP/VLAN * monitor * mesh point 

Nous pouvons maintenant décrire ce dont nous avons besoin: nous mettons la premiÚre carte réseau en tant que port WAN, et la seconde nous nous connectons à l'interface sans fil:



Réseau


Si vous avez Ubuntu 18.04, débarrassez- netplan immédiatement de netplan pour revenir à la prise en charge de / etc / network / interfaces:

 $ 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 

En tant que serveur DHCP / DNS, sélectionnez dnsmasq :

 $ sudo apt-get install dnsmasq 

Puisque nous allons démarrer et configurer le processus dnsmasq via le hook post-up , n'oubliez pas de désactiver le démon au démarrage:

 $ sudo sed -i "s/^ENABLED=1$/ENABLED=0/g" /etc/default/dnsmasq 

Nous Ă©crirons la configuration prĂ©liminaire des interfaces rĂ©seau conformĂ©ment au schĂ©ma, y ​​compris la configuration minimale de 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 

La documentation /etc/network/interfaces ici

Comme vous pouvez le voir dans la section post-up , dnsmasq dĂ©marre dĂšs que le pont se lĂšve. Sa configuration est effectuĂ©e uniquement par des arguments de ligne de commande ( --conf-file=/dev/null ), et le processus s'arrĂȘte lorsque l'interface est dĂ©sactivĂ©e.

L'interface bridge_ports n'est pas spécifiquement spécifiée dans le wlp5s0 , car hostapd l'ajoutera automatiquement au pont (brctl peut refuser de le faire avant que hostapd ne démarre pour changer le mode d'interface).

Voir la documentation de dnsmasq .

Vous pouvez maintenant redémarrer le réseau (redémarrage de la mise en réseau du sudo service networking restart ) ou simplement redémarrer pour vérifier que la configuration réseau est correcte.

Veuillez noter: bien que nous puissions actuellement recevoir DHCP de enp2s0 , nous n'aurons ni connexion sans fil (plus de détails plus tard), ni accÚs Internet (voir ci-dessous).

Acheminement


À ce stade, vous devez router les paquets entre les enp2s0 LAN ( enp2s0 ) et WAN ( enp1s0 ) et activer la traduction des adresses rĂ©seau .

L'activation du transfert de paquets est simple:

 $ sudo sysctl -w net.ipv4.ip_forward=1 $ echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf 

La derniÚre commande garantit que la configuration est enregistrée jusqu'au prochain redémarrage.

La traduction d'adresses réseau est une autre affaire, vous devez généralement vous occuper (ou plutÎt combattre) les iptables . Heureusement, l'ùge de pierre est révolu depuis longtemps, et les gars de FireHol ont mis beaucoup d'efforts pour ajouter le niveau d'abstraction nécessaire:

 $ sudo apt-get install firehol 

FireHOL est un langage de pare-feu sĂ©curisĂ© de pointe, sa configuration est facile Ă  comprendre et accessible. Vous n'avez plus besoin d'Ă©crire des instructions iptables : le fichier de configuration lui-mĂȘme est traduit en instructions iptables et appliquĂ© selon les besoins. Aucun dĂ©mon en arriĂšre-plan.

L'activation de la traduction des adresses réseau pour les interfaces LAN avec l'ajout de rÚgles de pare-feu minimales se fait de maniÚre élémentaire:

 $ 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 est écrit par des gens pour des gens, la documentation est ici .

Vous pouvez vérifier les paramÚtres en démarrant manuellement firehol ( sudo firehol start ) et en connectant l'ordinateur portable au port LAN: vous pouvez maintenant vous connecter si le port WAN est connecté.

Avant de redémarrer, assurez-vous de modifier /etc/default/firehol pour permettre à FireHol de démarrer au démarrage:

 $ sudo sed -i -E "s/^START_FIREHOL=.+$/START_FIREHOL=YES/g" /etc/default/firehol 

Je n'entrerai pas dans les dĂ©tails de l'ensemble de la syntaxe firehol , le fichier de configuration s'explique, je recommande de se firehol Ă  la documentation en cas de configuration plus complexe. Si vous ĂȘtes vraiment intĂ©ressĂ© par ce que firehol fait avec iptables , tapez simplement sudo firehol status sur la ligne de commande.

Point d'accĂšs sans fil


Évidemment, nous allons gĂ©rer le point d'accĂšs en utilisant hostapd :

 $ sudo apt-get install hostapd 

Vous trouverez ci-dessous un fichier de configuration 802.11 n / 2,4 Ghz / WPA2-AES minimal et presque inexpliqué:

 $ 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 

Voir hostpad.conf documentation sur /usr/share/doc/hostapd/examples/hostapd.conf .

La configuration dĂ©crite peut ĂȘtre testĂ©e manuellement:

 $ sudo hostapd /etc/hostapd/hostapd-simple.conf 

Si tout se passe bien, une connexion sans fil apparaĂźtra . Si vous ĂȘtes satisfait du rĂ©sultat, n'oubliez pas de changer la configuration pour dĂ©marrer hostapd dĂšs que l'interface se lĂšve (comme illustrĂ© ci-dessous).

Voici votre /etc/network/interfaces: final /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 

Configuration d'un point d'accĂšs 802.11ac (5 GHz)


Balayage passif


Selon la documentation Airetos AEX-QCA9880-NX , le chipset prend en charge 802.11ac, afin que nous puissions laisser les canaux bondés de 2,4 GHz au paradis 5 GHz.

Voyons quelles fréquences sont prises en charge:

 $ 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) ... 

Dans la liste ci-dessus, nous voyons que le chipset prend en charge les canaux 1-14 (2,4 GHz) et les canaux 36-165 (5 GHz), mais avez-vous remarqué l'indicateur no IR ?

Le drapeau no IR indique un rayonnement sans dĂ©clenchement (c'est -Ă - dire un balayage passif ). Cela signifie que ce mode est interdit dans le cas oĂč l'appareil est le premier Ă  initier un rayonnement (y compris les balises ). En d'autres termes, vous ne pouvez pas exĂ©cuter le point d'accĂšs sur ces canaux !



Exigences réglementaires


La situation ci-dessus s'explique par les exigences réglementaires de Linux , qui réglementent l'utilisation du spectre des fréquences radio selon les pays .

Mais bon!

J'habite aux États-Unis, et le lien indique que j'ai le droit d'initier un rayonnement sur les canaux 36-48, alors quel est le problĂšme? Voyons quel domaine rĂ©glementaire est actuellement utilisĂ©:

 $ 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) 

Le problÚme montre que le domaine mondial est actuellement actif (ou non installé), c'est-à-dire les valeurs minimales autorisées dans chaque pays .

Malheureusement, vous ne pouvez pas installer manuellement le domaine sudo iw reg set , car le domaine est protégé dans l'EEPROM:

 $ dmesg | grep EEPROM [ 12.123068] ath: EEPROM regdomain: 0x6c 



Patch!


Heureusement, les exigences rĂ©glementaires sont traitĂ©es au niveau du pilote, elles peuvent donc ĂȘtre facilement modifiĂ©es: nous trouvons le correctif dans le code source Open-WRT .

Tout d'abord, n'oubliez pas de connecter le référentiel de code source depuis /etc/apt/sources.list :

 $ cat /etc/apt/sources.list ... deb-src http://us.archive.ubuntu.com/ubuntu/ bionic main restricted ... 

Préparez ensuite l'environnement en installant les dépendances nécessaires:

 $ sudo apt-get install build-essential fakeroot $ sudo apt-get build-dep linux 

Téléchargez vos sources du noyau:

 $ apt-get source linux 

Étant donnĂ© que le correctif Open-WRT d'origine ne peut pas ĂȘtre appliquĂ© «tel quel» Ă  l'arborescence du noyau Ubuntu en raison de diffĂ©rences subtiles dans le systĂšme de gĂ©nĂ©ration, j'ai dĂ» le corriger:

 $ VERSION=$(uname -r) $ cd linux-${VERSION%%-*} $ wget -O - https://gist.github.com/renaudcerrato/02de8b2e8dc013bc71326defd2ef062c/raw/a2db325e520e6442c8c12f7599d64ac1b7596a3e/402-ath_regd_optional.patch | patch -p1 -b 

Tout est prĂȘt pour l'assemblage:

 $ fakeroot debian/rules clean $ fakeroot debian/rules binary-generic 

S'il n'y a pas de problÚme, vous pouvez maintenant installer le noyau fixe par dessus le précédent:

 $ cd .. $ sudo dpkg -i linux*.deb 

Redémarrez et le tour est joué:

 $ 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) ... 

Pour Ă©viter les mises Ă  jour automatiques, vous devrez peut-ĂȘtre corriger la version du noyau Linux .

La configuration


Le nouveau hostapd configuration hostapd sera assez simple: hw_mode=a comprend des bandes de 5 GHz et ieee80211ac=1 inclut 802.11ac (VHT). L'option ieee80211d=1 avec country_code=US spécifie le domaine réglementaire sous lequel nous opérons.

Pour tirer le meilleur parti de la bande passante, ht_capab et vht_capab doivent refléter les capacités de l'équipement:

 $ 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 

Dans cet esprit, voici le hostapd.conf final :

 $ 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 

Voir hostpad.conf documentation sur /usr/share/doc/hostapd/examples/hostapd.conf .

À ce stade, le routeur sans fil est pleinement opĂ©rationnel, et si vous avez besoin d'une configuration plus complexe, vous pouvez maintenant plonger dans les fichiers de configuration.

Configuration d'un SSID virtuel Ă  l'aide de hostapd


Que vous souhaitiez configurer un point d'accÚs invité ou un réseau sans fil dédié pour votre VPN, vous devrez à un moment donné configurer un SSID virtuel.

Graphique


Basé sur la configuration actuelle , voici un diagramme mis à jour de ce que nous voulons obtenir. En supposant que wlp5s0 est l'interface sans fil physique, le SSID virtuel s'exécutera sur l'interface virtuelle wlan0 utilisant son propre sous-réseau 192.168.2.0/24 :



La préparation


Tout d'abord, vérifiez que votre appareil sans fil prend en charge plusieurs SSID:

 $ iw list ... valid interface combinations: * #{ AP, mesh point } <= 8, total <= 8, #channels <= 1, STA/AP BI must match ... 

Comme vous pouvez le voir, le chipset prend en charge jusqu'Ă  huit points d'accĂšs sur un canal. Cela signifie que vous pouvez configurer jusqu'Ă  sept SSID virtuels, et tous fonctionneront sur un canal.

Interface réseau


Selon la documentation dans hostapd.conf, il existe une connexion stricte entre l'adresse MAC de l'interface physique et le BSSID des interfaces virtuelles:

hostapd gĂ©nĂ©rera un masque BSSID basĂ© sur les BSSID configurĂ©s. hostapd vĂ©rifiera que dev_addr & MASK == dev_addr . Si ce n'est pas le cas, l'adresse MAC de la radio doit ĂȘtre modifiĂ©e avant de dĂ©marrer hostapd. Si un BSSID est configurĂ© pour chaque BSS secondaire, cette limitation n'est pas appliquĂ©e Ă  hostapd et d'autres masques peuvent ĂȘtre utilisĂ©s si le pilote les prend en charge (par exemple, permuter le bit administrĂ© localement)

Les BSSID sont attribués dans l'ordre à chaque BSS, sauf si un BSSID explicite est spécifié à l'aide du paramÚtre «bssid».

Si un BSSID explicite est spĂ©cifiĂ©, il doit ĂȘtre choisi de telle sorte qu'il:
- résulte en un MASQUE valide qui le couvre et le dev_addr
- n'est pas la mĂȘme que l'adresse MAC de la radio
- n'est pas le mĂȘme que tout autre BSSID explicitement spĂ©cifiĂ©

Pour répondre à ces exigences et permettre à hostapd attribuer automatiquement le BSSID de la ou des interfaces virtuelles, nous mettons à jour l'adresse MAC de l'interface sans fil physique en remettant à zéro les quatre bits les moins significatifs. Cela suffit pour 15 BSSID virtuels - bien plus que nécessaire.

Tout d'abord, déterminez l'adresse MAC actuelle:

 $ ip addr show wlp5s0 | grep link | awk '{print $2}' 44:c3:06:00:03:eb 

Si vous effacez les quatre derniers bits et définissez le bit U / L , vous obtenez l'adresse MAC 46:c3:06:00:03:e0 .

Nous allons maintenant mettre à jour la configuration pour définir la bonne adresse MAC juste avant de charger l'interface, et déclarer également une interface sans fil virtuelle conformément à notre diagramme:

 $ 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 ... 

Super. J'utilise dnsmasq comme serveur DHCP - n'hésitez pas à le remplacer par ce que vous voulez. Veuillez noter que pour que l'interface virtuelle fonctionne correctement, allow-hotplug est requis.

Configuration du point d'accĂšs


Maintenant, la chose la plus simple: ajoutez un SSID virtuel Ă  la configuration actuelle de hostapd . Ajoutez simplement ceci Ă  la fin du fichier hostapd.conf existant:

 $ 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 

Dans l'exemple, j'ai utilisé le cryptage WPA2, mais la plupart des options d'interface radio sont disponibles ici (par exemple, channel ). Vous pouvez ajouter plus de SSID virtuels en ajoutant simplement les lignes dans le fichier de configuration en fonction des interfaces virtuelles déclarées et correctement configurées.

Redémarrez maintenant - et voyez votre nouveau SSID avec la nouvelle interface sans fil (faites attention à l'adresse MAC):

 $ ip addr show wlan0 | grep link | awk '{print $2}' 46:c3:06:00:03:e1 

C'est ça les gars!

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


All Articles