- Sélection des composants
- Lancer les interfaces réseau
- Configuration d'un point d'accĂšs 802.11ac (5 GHz)
- 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
Iron pornLa 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
Extenseur mini-PCIeHeureusement, 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  
La documentation /etc/network/interfaces iciComme 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  
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  
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  
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  
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: *  
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 ...  
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 ...  
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!