2022-03-29
J'avais récemment le besoin suivant : servir de point d'accès Wi-Fi le plus rapide possible, en me limitant à un matériel de type dongle USB.

C'est-à-dire qu'idéalement, si le but était de faire la nique aux "box" équipées de Wi-Fi 6 (alias IEEE 802.11ax) fournies par tél ou tél opérateur, on prendrait soit :
Mais là on vise une installation beaucoup plus "plug & play", en l'occurence une Raspberry Pi fournissant surtout des ports USB 3.0.
Les limitation de l'interface USB 3.0 ne nous permettront que d'atteindre une forme de Wi-Fi 5 (IEEE 802.11ac).
J'ai bien dit "une forme", car bien que la norme monte théoriquement à 1 Gbps, vous serez concrètement bien en-dessous : 200 Mbps selon mes tests...
... mais vous aurez toujours la satisfaction d'être sur la bande des 5 Ghz, et ça n'a pas de prix 😉.
Je vous partage donc mon expérience basés sur le chip Realtek RTL8812au
(pas de publicité, mais vous trouverez assez facilement les 2-3 dongles USB du marché !).
On fait en général :
sudo apt install bc build-essential dkms
et on ajoute :
sudo apt install linux-headers-`uname -r`
sudo apt install raspberrypi-kernel-headers
sudo ln -s /usr/src/linux-headers-`uname -r`/arch/arm64 /usr/src/linux-headers-`uname -r`/arch/aarch64
On télécharge :
git clone https://github.com/aircrack-ng/rtl8812au.git --branch v5.6.4.2
cd rtl8812au/
Si on est sur Raspberry Pi 0S 64 bits, on rajoute :
sed -i 's/I386_PC = y/I386_PC = n/g' Makefile
sed -i 's/ARM64_RPI = n/ARM64_RPI = y/g' Makefile
On compile et installe :
make -j`nproc`
sudo mkdir -p /lib/modules/`uname -r`/updates/dkms/
sudo install -m 644 88XXau.ko /lib/modules/`uname -r`/updates/dkms/88XXau.ko
sudo depmod
On active le pilote, et vous remarquerez déjà une subtilité :
sudo modprobe 88XXau rtw_vht_enable=2
Votre interface devrait apparaître, p.ex. en tant que wlan1 (en résultat de ifconfig). Configurez-là en IP fixe avec votre solution favorite.
Vous pouvez éventuellement rajouter la ligne suivante dans sa section de "/etc/dhcpcd.conf", pour éviter qu'elle soit tripotée par le client wpa_supplicant :
nohook wpa_supplicant
Le premier va distribuer des IPs aux clients, le second configurer notre dongle :
sudo apt install dnsmasq hostapd
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
On va d'abord faire distribuer à dnsmasq une rangée d'IP ; chez moi c'est 10.0.0.110-255, à adapter en fonction de votre IP statique :
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.old
sudo echo "interface=wlan1" > /etc/dnsmasq.conf
sudo echo "dhcp-range=10.0.0.110,10.0.0.255,255.255.255.0,24h" >> /etc/dnsmasq.conf
C'est le moment critique, où l'on va installer MON fichier de configuration pour hostapd :
sudo mv hostapd.conf /etc/hostapd/hostapd.conf
Vous aurez bien sûr besoin d'y changer au moins 2 paramètres :
sudo vim /etc/hostapd
# ssid=MYNETWORK
# wpa_passphrase=MYPASSWORD
Et let's go :
sudo systemctl restart hostapd
Well done !
Tout ça c'est bien joli, et vous pouvez désormais vous connecter à votre nouveau réseau MYNETWORK avec le mot de passe MYPASSWORD, pour communiquer avec votre ordinateur/carte...
... mais quid de l'Internet peut-être disponible via ledit ordinateur/carte ?
Eh bien si, par exemple, vous désirez "servir" Internet disponible sur eth0 :
sudo echo "dhcp-option=option:router,10.0.0.1" >> /etc/dnsmasq.conf
sudo echo "dhcp-option=option:dns-server,8.8.8.8" >> /etc/dnsmasq.conf
sudo systemctl restart dnsmasq
sudo echo -e 'net.ipv4.ip_forward=1' > /etc/sysctl.d/routed-ap.conf
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
sudo apt install netfilter-persistent iptables-persistent
sudo iptables -A FORWARD -i wlan1 -j ACCEPT
sudo iptables -A FORWARD -o wlan1 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo netfilter-persistent save
Et voiloù !
Si vous vous intéressez aux invocations cabalistiques, Yog-Sothoth et Shub-Niggurath, regardez le fichier… juste pour le plaisir des yeux.
Par exemple cette optimisation :
wmm_enabled=1
# QoS helps by adding 1 Mb/s
mais surtout on va utiliser la fonctionnalité de VHT, qui permet de "s'étendre" sur plusieurs canaux adjacents pour augmenter le débit dans la limite de ce que permet le matériel :
ht_capab=[HT40-][HT40+][SHORT-GI-20][SHORT-GI-40][MAX-AMSDU-7935][DSSS_CCK-40]
vht_capab=[HTC-VHT][MAX-MPDU-11454][SHORT-GI-80][TX-STBC-2BY1][SU-BEAMFORMEE]
channel=36
vht_oper_chwidth=1
vht_oper_centr_freq_seg0_idx=42
# needed for full speed, rarely supported ; occupy channels 36->42
et qui ne fonctionne pas sans avoir passé le paramètre adéquat "rtw_vht_enable=2" au module bien plus haut 😉.