Bonjour à tous,
Afin d’améliorer la communication avec le public reçu dans mon entreprise, mes patrons m’ont chargé de mettre en place ce que j’appelle une « Bulle Wifi ».
Il s’agit d’un raspberry pi installé à l’accueil du public qui héberge un site web et le partage en wifi.
J’y ai donc installé Apache, PHP et mySQL, ainsi que dnsmasq, udhcpd et hostapd.
J’ai configuré le serveur en IP fixe :
nano /etc/dhcpcd.conf
static ip_address=192.168.1.1/24 nohook wpa_supplicant
Puis le serveur DNS :
nano /etc/dnsmasq.conf
interface=wlan0 dhcp-range=192.168.1.2,192.168.1.20,255.255.255.0,24h address=/#/192.168.1.1
Enfin, j’ai paramétré le wifi ouvert :
nano /etc/hostapd/hostapd.conf
interface=wlan0
# nl80211 avec tous les drivers Linux mac80211
driver=nl80211
# Nom du spot Wi-Fi
ssid=WIFI_PUBLIC
# mode Wi-Fi (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g)
hw_mode=g
country_code=FR
wmm_enabled=0
macaddr_acl=0
ignore_broadcast_ssid=0
# canal de fréquence Wi-Fi (1-14)
channel=6
# Wi-Fi ouvert, pas d'authentification !
auth_algs=1
# Beacon interval in kus (1.024 ms)
beacon_int=100
# DTIM (delivery trafic information message)
dtim_period=2
# Maximum number of stations allowed in station table
max_num_sta=255
# RTS/CTS threshold; 2347 = disabled (default)
rts_threshold=2347
# Fragmentation threshold; 2346 = disabled (default)
fragm_threshold=2346
J’indique le chemin de configuration au système :
nano /etc/default/hostapd
Modifier la ligne :
DAEMON_CONF="/etc/hostapd/hostapd.conf"
J’ai également ajouté une règle de routing :
sudo iptables -t nat -A PREROUTING -d 0/0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:80
Pour conclure, j’ai injecté mon site dans /var/www
Cela fonctionne mais pas complètement.
Je souhaiterais que, si un smartphone se connecte à mon wifi, au lancement de son navigateur, ce soit mon site qui s’affiche.
Un peu à la façon des passerelles Wifi qui demandent une identification avant de laisser l’accès au net.
Pour l’instant, mon réseau n’ayant pas d’internet, sur Android, c’est la 4G de l’utilisateur qui reste prioritaire, même si je tape l’IP du raspberry pi, alors que sur iOs, mon site est bien accessible.
J’ai donc tenté de créer une configuration de portail captif :
nano /etc/apache2/sites-enabled/captive_portal.conf
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^CaptiveNetworkSupport(.*)$ [NC]
RewriteCond %{HTTP_HOST} !^192.168.1.1$
RewriteRule ^(.*)$ http://192.168.1.1/index.php [L,R=302]
# android
RedirectMatch 302 /generate_204 http://192.168.1.1/index.php
# windows
RedirectMatch 302 /ncsi.txt http://192.168.1.1/index.php
RewriteCond %{REQUEST_URI} !^/captive/ [NC]
RewriteRule ^(.*)$ http://192.168.1.1/index.php [L]
Mon problème est que quand les utilisateurs se connectent à mon wifi, les smartphones sous Android, détectent que ce réseau n’a pas de connexion internet. Ils restent connectés au wifi mais ne semblent pas l’utiliser.
Si l’utilisateur ouvre son navigateur, la 4G prends le relais et il finit sur internet… et non sur mon site.
Je voudrais,
- soit pouvoir « pousser » l’ouverture du navigateur et du site à la connexion du wifi, (je ne pense pas que ce soit possible)
- soit faire en sorte que l’ouverture d’un navigateur mène systématiquement à mon site. (peut-être en lui faisant croire qu’il y a bien internet)
Mais ça fait des semaines que je bosse là dessus et je bloque.
A noter que, si l’utilisateur désactive sa 4G/3G, cela fonctionne. Mais ça fait une manip de trop, il faut que ce soit le plus simple possible.