Bulle Wifi - site web local diffusé en wifi par un Raspberry Pi

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.

hello,

il manquerait pas une route de 192.168.1.0/24 a 192.168.4.1 ? et ta default route devrait pas être sur 192.168.4.0/24 avec 192.168.1.1 en passerelle (gateway) ?
j’imagine que wlan0 est sur 192.168.1.1 et que eth0 est sur 192.168.4.1 mais le reste du réseau de l’entreprise ( l’accès internet) il est sur quoi ? sur 192.168.4.0/24 ?
et que le forward est activé.

PS pour afficher le code il faut utiliser le guillemet a l’envers de la touche 7 (avec alt gr):
il en faut trois sur une ligne avant le code (soit six appuie sur la touche …)
trois sur la ligne d’après
et entre ces deux lignes, le code !
Au XXI ièmè siècle ça craint lol !

@bof Les 192.168.4.1 sont des erreurs de frappe… désolé, j’ai corrigé.

Il n’y a pas de ETH0, puisque j’utilise un Raspberry Pi A+. Et même si le port RJ45 existait, je ne l’utiliserais pas.
Le but n’est pas de créer une passerelle vers Internet mais d’amener les utilisateurs sur mon serveur Apache afin d’afficher mon site Web.

La contrainte est que je n’ai pas le droit de connecter mon Pi à Internet, le but est une diffusion locale d’informations.

Pour ce qui est de l’affichage, je suis présent sur de nombreux forums et je découvre celui-ci que je trouve très… bizarre et peu ergonomique. Au XXI ièmè siècle ça craint lol ! :wink:
Mais sa communauté à l’air sympa et j’ai vu pleins de sujets intéressants et d’autres sur lesquels je pourrais potentiellement aider et ça c’est vraiment cool.