Connexion manuelle

1. Créer des identifiants FreeWifi sur le site https://wifi.free.fr. Il est indispensable de se connecter à Internet par l'intermédiaire de la Freebox.

2. Sur l'ordinateur portable, le menu de NetworkManager présente la liste des réseaux Wifi détectés. Sélectionner un hotspot FreeWifi. La connexion devrait s'établir.

Si elle ne s'établit pas, il est possible que l'ordinateur ait été banni par le portail. Pour se refaire une virginité, il suffit de modifier d'adresse MAC de l'interface réseau sans fil :

   # ifconfig wlan0 down
   # macchanger -r wlan0
   # ifconfig wlan0 up

3. Une fois la connexion établie, afficher la page https://wifi.free.fr dans un navigateur Web. Normalement c'est la seule page accessible à ce stade. Il s'agit d'un portail captif qui permet de saisir les informations d'authentification. Saisir les identifiants FreeWifi.

4. La connexion Internet devrait être fonctionnelle.

Connexion automatique

Nous allons scripter la dernière étape pour automatiser l'authentification sur le réseau de Free.

1. Dans le dossier /etc/NetworkManager/dispatcher.d, créer un script contenant le code suivant :

#!/bin/bash

IFNAME="$1"
ACTION="$2"

if [ $IFNAME != "wlan0" ]; then
        exit 0
fi

if [ $ACTION != "up" ]; then
        exit 0
fi

# Quitter si la sortie de iwconfig ne contient pas au moins une ligne
# comportant le mot "freewifi".
if [ $(/sbin/iwconfig 2>&1 | grep -i freewifi | wc -l) -eq 0 ]; then
        logger "Ce n'est pas FreeWifi ..."
        exit 0
fi

# Charger en mémoire les variables du fichier.
. /etc/freewifi.conf

# Transmettre à Free les identifiants, vérifier que la connexion est établie, 
# passer un paramètre à l'interface et afficher un message dans le 
# journal du système. (Toute la commande tient sur une seule ligne.)
wget -O - --post-data="login=$LOGIN&password=$PASSWORD" 
   "https://wifi.free.fr/Auth" 2>/dev/null | grep "CONNEXION AU SERVICE REUSSIE" 
   1>/dev/null 2>&1 && ifconfig wlan0 mtu 1460 2>/dev/null && 
   logger "Connexion FreeWifi OK" && exit 0

logger "Erreur de connexion FreeWifi"
exit 0

Les scripts de ce dossier sont exécutés automatiquement par NetworkManager quand une connexion est établie ou coupée. Ce dernier leur passe deux paramètres, le nom de l'interface réseau activée (wlan0 dans le cas qui nous intéresse) et l'action (up quand la connexion est établie). Ces paramètres sont testés au début du script pour que ce dernier ne soit exécuté que lors de l'établissement d'une connexion Wifi.

Ce fichier doit être détenu par root et il ne doit être modifiable que par son propriétaire. Pour en savoir plus, voir la page de manuel de NetworkManager.

# ls -l /etc/NetworkManager/dispatcher.d/
total 8
-rwxr-xr-x 1 root root 1084 13 mars   2011 01ifupdown
-rwxr-xr-x 1 root root  733  3 janv. 19:39 02freewifi

2. Créer le fichier /etc/freewifi.conf contenant l'identifiant FreeWifi et le mot de passe :

LOGIN=le_login_FreeWifi
PASSWORD=le_mot_de_passe_FreeWifi

Modifier ses autorisations pour que seul root puisse le lire (chmod 600 /etc/freewifi.conf).

Attention : si le mot de passe contient des caractères accentués, des points d'interrogation, etc., ils doivent être au format URL (percent-encoded) car l'info est utilisée tel quel par wget. Pour trouver le bon format, j'ai installé HttpFox dans Iceweasel et j'ai regardé la valeur des paramètres envoyés par le navigateur quand on clique sur le bouton du formulaire d'authentification sur la page https://wifi.free.fr.

3. Pour tester, se connecter à un hotspot Freewifi en le sélectionnant dans la liste de NetworkManager. Quand la connexion est établie, le script est exécuté. Le contenu du fichier /etc/freewifi.conf est chargé et les infos de connexion sont transmises au portail Free par wget. Dans le journal du système, un message indique si la connexion a bien été établie.

En cas de problème, je conseille de faire tourner manuellement le script, voire d'exécuter seulement la ligne wget dans un terminal, pour voir ce qui se passe.

Documentation