- 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 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-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!