0 votes

Pourquoi mon Galaxy S8 n'affiche-t-il pas la page de connexion de Captive Portal ?

J'ai affaire à un Raspberry Pi 3 qui utilise hostapd pour créer son propre réseau sans fil.

Lorsqu'un client Android se connecte pour la première fois au réseau, il essaie de saisir la page http://connectivitycheck.gstatic.com/generate_204 pour voir si c'est derrière un portail client. Mon Raspberry Pi redirige cette requête vers une instance de nginx qu'il exécute, et renvoie une redirection 302 vers ma page de connexion.

Comme Android n'a pas reçu la réponse qu'il attendait (un HTTP 204), mais un 302 à la place, d'après ce que j'ai compris, il est censé faire apparaître ma page de connexion. J'ai vu cela en action en utilisant d'autres matériels de portail captif.

Dans mon cas, Android affiche simplement une fenêtre contextuelle indiquant "Internet peut ne pas être disponible : Connectez-vous à un autre réseau ou activez l'option Passer aux données mobiles".

Est-ce que je fais quelque chose de mal ? Y a-t-il quelque chose de spécifique qu'Android recherche dans la page de connexion avant de la faire apparaître ?

La plupart de mes tests sont effectués sur mon Galaxy S8. Je l'ai essayé sur le S9 d'un ami, et cela ne fonctionne pas non plus. Avec un ordinateur portable Windows 10, la page de connexion s'affiche.

0voto

Damon Points 19

Après quelques recherches, il semble que ça fonctionne maintenant.

Quand un client essaie d'accéder http://connectivitycheck.gstatic.com/generate_204 il doit d'abord utiliser le DNS pour résoudre connectivitycheck.gstatic.com. J'ai configuré mon dnsmasq pour qu'il ressemble à ceci :

interface=wlan0
dhcp-range=192.168.30.20,192.168.30.60,255.255.255.0,24h
address=/#/10.45.12.1

Où 10.45.12.1 est juste une IP aléatoire que j'ai choisie. Cette IP n'a pas vraiment d'importance, car dès que le client résout à cette IP et essaie d'obtenir /generate_204 à partir de celle-ci, mes règles de pare-feu iptables redirigent toutes les requêtes vers nginx qui tourne sur le Pi.

La seule limitation dont j'étais conscient était que l'IP ne pouvait pas être sur le même réseau local (192.168.30.0/24), ou le Pi essaierait d'utiliser ARP pour déterminer son adresse MAC, et échouerait, sans faire la requête HTTP réelle.

Il s'est avéré que si l'IP vers laquelle vous résolvez tout (dans mon cas 10.45.12.1) est une IP de réseau local, Android n'affiche pas la page de connexion. Je ne sais pas pourquoi.

La solution était de passer de :

address=/#/10.45.12.1

à

address=/#/1.2.3.4

donde 1.2.3.4 est une IP de réseau local public (une IP en dehors de la plage '10.0.0.0/8, 172.16.0.0/12, ou 192.168.0.0/16'). Cela a réglé mon problème. J'espère que cela résoudra aussi celui de quelqu'un d'autre.

REMARQUE : Mon installation ne nécessite PAS que le client dispose d'Internet. Il se connecte au Pi, et obtient une page popup pour la configuration. Si vous avez besoin que l'appareil dispose d'Internet, ce qui serait probablement un cas d'utilisation plus courant, vous ne pouvez probablement pas résoudre TOUT à 1.2.3.4 comme je le fais

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X