Hotspot wifirst
Cette article décrit la mise en place d'un routeur Wifi - Wifi + RJ45 relayant une connexion Wifirst avec authentification automatique au portail captif. L'objectif est de ne pas avoir à entrer les identifiant sur chaque appareil et pouvoir en connecter plusieurs à la fois, le tout, sans les déconnexions intempestives au point d'accès (car Wifirst déconnecte régulièrement les équipements au bout d'un certain temps, ce qui fait qu'on passe notre vie à retaper les identifiants).
Matériels utilisés
Dans cet exemple on utilise un Raspberry Pi 3 pour bénéficier de sa clé Wifi intégré, par ce que c'est pas cher, que ça ne fait pas de bruit et que ça ne consomme rien.
- 1 Raspberry Pi 3 (Raspbian jessie)
- Une clé wifi externe (une TP-Link tl-wn722n dans cet exemple)
Installation des paquets
apt install vim hostapd dnsmasq curl bridge-utils
Interfaces réseaux
Changement des noms d'interface
vim /etc/systemd/network/10-wifiwan0.link
[Match]
MACAddress=c0:4a:00:xx:xx:xx
[Link]
Name=wifiwan0
vim /etc/systemd/network/10-wifilan0.link
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wifilan0
vim /etc/systemd/network/10-ethlan0.link
[Match]
MACAddress=00:23:57:9c:14:20
[Link]
Name=ethlan0
Configuration IP
vim /etc/network/interfaces
- Ethernet intégré (LAN)
auto ethlan0 iface ethlan0 inet static address 192.168.68.254 netmask 255.255.255.0
- Wifi intégré (LAN)
auto wifilan0 iface wifilan0 inet static
address 192.168.67.254 netmask 255.255.255.0
- Wifi externe (WAN)
auto wifiwan0 iface wifiwan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf up iptables -t nat -A POSTROUTING -j MASQUERADE
vim /etc/wpa_supplicant/wpa_supplicant.conf
country=FR ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1
iap_scan=1
network={
ssid="Wifirst BA 105" key_mgmt=NONE
}
vim /etc/hostapd/hostapd.conf
- Contenu de /etc/hostapd/hostapd.conf
- 1. Parametres de l'interface d'écoute
interface=wifilan0 driver=nl80211
- 2. Parametres du démon hostapd
ctrl_interface=/var/run/hostapd ctrl_interface_group=0
- 3. Configuration du réseau Wifi
ssid=Raspi channel=6 hw_mode=g ieee80211n=1
- 4. Sécurité du réseau Wifi
wpa=2 wpa_passphrase=TestOsterone wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP rsn_pairwise=CCMP
- 5. Logs
logger_syslog=-1 logger_syslog_level=4 logger_stdout=-1 logger_stdout_level=2
- 6. Autres parametres
beacon_int=100 auth_algs=3 wmm_enabled=1
chmod +x /usr/bin/wifirst_autoconnect
hostapd -dd /etc/hostapd/hostapd.conf
vim /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf" RUN_DAEMON=yes
vim /usr/bin/wifirst_autoconnect
- !/bin/bash
sleep 10
- Indentifiants
login="w/6588593@wifirst.net" password="qrtrcnjqk6xp7gwkmkbd" url="https://duckduckgo.com"
curl -d username="$login" -d password="$password" -d qos_class="0" -d success_url="$url" -d error_url="$url" -d accept="submit" "https://wireless.wifirst.net:8090/goform/HtmlLoginRequest"
- Execution du script à l'optention de l'adresse IP DHCP (avec un post-up dans le fichier interfaces, ça execute le script après le up mais avant le bail DHCP, ce qui fait que ça ne fonctionne pas.)
ln -s /usr/bin/wifirst_autoconnect /etc/dhcp/dhclient-enter-hooks.d/
vim /etc/dnsmasq.conf
- Partie commune
domain-needed expand-hosts bogus-priv interface=wifilan0,ethlan0
- Partie DHCP
dhcp-range=wifilan0,192.168.67.1,192.168.67.250,255.255.255.0,12h dhcp-range=ethlan0,192.168.68.1,192.168.68.250,255.255.255.0,12h
- Pour distribuer une IP statique
- dhcp-host=00:40:F4:6C:43:AF,machinefixe,192.168.1.10
- Partie cache DNS
cache-size=256
- debug wpa supplicant si ça fonctionne pas
wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant.conf -iwifiwan0 -f /tmp/wpa.log
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
- Voir qui est connecté (fonctionne)
iw dev wlan0 station dump arp -a
- Déconnecter qlq'un (à tester)
hostapd_cli deauthenticate 00:5e:3d:38:fe:ab