FreeWifi & Raspberry Pi

Depuis quelques années Free à mis en place des réseaux sans fils pour ces abonnés mobiles. Chaque FreeBox installé dispose et émet un signal wifi « FreeWifi_secure » sur lequel il est possible de ce connecter via son smartphone. Pour la connexion, nul besoin d’identifiants, ceux-ci sont contenus dans la carte SIM (Free donc) du téléphone. Il est ainsi possible de profiter d’une bonne connexion internet sur l’abonnement à 2€ par mois sans passer par la 3G, à condition d’avoir une borne « FreeWifi_secure » dans les parages.

Pour des besoins temporaires je voulais me connecter à l’un de ces réseaux pour refaire mon propre réseaux sans fils (disponibles pour plusieurs pc et smartphones). Mon but étant d’utiliser le réseau « FreeWifi_secure » en tant que point d’accès internet.

Prérequis

Pour ce faire, il va me falloir à minima:

  • Un abonnement Free mobile 2€ et la carte SIM
  • un réseau « FreeWifi_secure »
  • un ordinateur
  • une carte wifi
  • un lecteur de carte sim
  • un routeur wifi pour mon réseau sans fil privé

Pour l’ordinateur, il me fallait quelque chose de compact. Je me suis donc tourné vers un Raspberry Pi 3 B. Abordable, facile à configurer, celui-ci dispose d’une carte Wifi intégré. Pour qu’il fonctionne il lui faut encore une carte MicroSD de 8go ou plus et une alimentation 5V (2A).

Pour le lecteur de carte SIM je me suis en premier lieu tourné vers un modèle à 2$ Chinois disponible sur ebay. Malheureusement celui-ci est avéré défectueux et j’ai donc investi dans un lecteur de Smart-Card plus cher, le Cherry TC-1100, ma principal contrainte étant que celui-ci devait être compatible avec Linux.

Pour le routeur, n’importe quel routeur sans fils avec une prise Ethernet devrait faire l’affaire.

Installation

Raspberry Pi

Installation

La première chose à faire est d’installer un système d’exploitation sur le Raspberry Pi. J’ai choisi Raspbian Lite. Le guide d’installation complet est ici.

Pour ma part je copie l’image de Raspbian sur la carte SD:

sudo dd bs=4M if=2017-04-10-raspbian-jessie-lite.img of=/dev/mmcblk0

La carte SD est prête. Avant de démarrer le Raspberry il me faut encore activer l’acces à distance via SSH car je n’ai pas d’écran. Pour ce faire il faut créer un fichier « ssh » sur la partition « boot ».

Ensuite j’ai besoin d’une adresse IP fixe pour me connecter plus tard à mon Raspberry via SSH. Pour ce faire, il faut éditer le fichier:

sudo nano /etc/network/interfaces

et ajouter/modifier les lignes concernant « eth0 » pour avoir la chose suivante:

auto eth0
iface eth0 inet static
    address 192.168.1.1
    netmask 255.255.255.0

On peux maintenant mettre la carte SD dans le Raspberry qui sera accessible via l’adresse 192.168.1.1.

Configuration

Désactiver la carte Wifi intégré (optionnel)

Pour certaines raisons on peut vouloir utiliser une carte Wifi externe au quel cas on peut désactiver la carte Wifi intégré au Raspberry Pi (3 B uniquement):

sudo nano /boot/config.txt
dtoverlay=pi3-disable-wifi

Désactiver l’IP V6

De coutume je n’utilise jamais l’IP V6 et le désactive donc pour simplifier le reste de la configuration:

sudo nano /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
net.ipv6.conf.wlan0.disable_ipv6 = 1

Mise à jour et installation des logiciels

Connecter maintenant votre Raspberry Pi à internet pour faire les mises à jours et installer les logiciels nécessaires au bon déroulement des opérations.

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install pcscd pcsc-tools libccid iptables-persistentTest du lecteur de carte

Élément crucial, le lecteur de cartes. On vient d’installer les logiciels nécessaires à sont bon fonctionnement, il faut maintenant tester:

sudo pcsc_scan

La commande devrait afficher quelque chose comme ça:

PC/SC device scanner
V 1.4.23 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr>
Compiled with PC/SC lite version: 1.8.11
Using reader plug'n play mechanism
Scanning present readers...
0: Cherry Smart Card Reader USB (OKCM0030407140701284559729565853) 00 00

Si ce n’est pas le cas, le lecteur de carte n’est pas reconnu et il va falloir chercher pourquoi… Bonne chance!

Si tout à fonctionner correctement on peut insérer la carte SIM dans le lecteur et on devrait voir s’afficher quelque chose comme ça:

Card state: Card inserted, Shared Mode
...

C’est très bon signe!

Configuration Wifi

Il nous faut créer un fichier de configuration pour wpa_supplicant:

sudo nano /etc/wpa_supplicant/FreeWifi.conf
cred={
  imsi="none" # anything but blank value
}
network={
  #bssid=MACADRESS #A Ajouter si plusieurs reseaux sont disponibles et que l'un est meilleur
  ssid="FreeWifi_secure"
  key_mgmt=WPA-EAP IEEE8021X
  eap=SIM
  pin="1234" #Code de la carte SIM par defaut
  pcsc=""
}

On peut maintenant essayer de ce connecter au réseau:

sudo iwconfig wlan0 essid "FreeWifi_secure" && sudo wpa_supplicant -i wlan0 -d nl80211 -c /etc/wpa_supplicant/FreeWifi.conf -B

(il vous faudra peut-être régler -d selon vote carte wifi)

Si tout a fonctionner correctement vous devriez avoir une adresse IP et devriez être capable de pinger 8.8.8.8 sans avoir internet sur la partie Ethernet de votre Raspberry.

On peut alors configurer les interfaces pour que le Raspberry se connecter automatiquement au réseau Wifi lors du démarrage de celui-ci:

sudo nano /etc/network/interfaces

Modifier les lignes concernant wlan0:

allow-hotplug wlan0
iface wlan0 inet dhcp
    wpa-driver nl80211
    wpa-conf /etc/wpa_supplicant/FreeWifi.conf
    wireless-power off

Il faut peut-être régler  wpa-driver selon votre carte wifi.

sudo reboot

On vérifie avec iwconfig et ifconfig si tout est ok.

Mécanismes periodiques

A ce stade, vous devriez avoir internet sur votre Raspberry Pi via la connexion « FreeWifi_secure ». Mais il y a un bemol… Vous vous rendrez rapidement compte qu’au bout de 30 minutes maximum vous n’aurez plus accès à internet. C’est parce que le wifi « FreeWifi_secure » doit recevoir des informations d’authentifications toutes les 30 minutes, sinon il coupe l’accès à internet. Heureusement il existe une commande pour renvoyer les informations d’authentifications sans pour autant ce déconnecter du réseau wifi:

sudo wpa_cli reauthenticate

Si vous exécuter cette commande, vous verrez la led du lecteur de carte SIM clignoter. Le logiciel est donc aller lire les informations d’authentifications sur la carte SIM et les a envoyer au spot « FreeWifi_secure ».

Pour être sur de ne pas perdre la connexion internet il faut exécuter cette commande au moins toutes les 30 minutes. 15 minutes c’est plus sur, et ça ne coûte pas bien cher. Pour ce faire nous utiliserons l’utilitaire crontab.

sudo crontab -e

s’ouvre alors un éditeur de texte dans le quel il faut ajouter la ligne suivante:

*/15 * * * * sudo wpa_cli reauthenticate >/dev/null 2>&1

Si vous avez la patience, vous verrez la led du lecteur de carte clignoté toutes les 15 minutes.

Internet devrait être beaucoup plus stable maintenant et vous devriez pouvoir profiter d’internet pendant plus de 30 minutes d’affiler sans déconnexion.

Mais mais mais, il se peut que de temps à autres, pour X raisons, ça ne fonctionne plus. C’est pourquoi j’ai crée un script chargé de vérifier l’état de la connexion et de régler les problèmes si l’accès à internet est perdu.

sudo nano CheckInternet.sh
#!/bin/bash
pingGoogle=`ping 8.8.8.8 -c 10 | grep \ 100%\ packet\ loss | wc -l`
if [ $pingGoogle -eq 1 ]; then
   echo Internet is down
   sudo dhclient -r wlan0
   sudo dhclient wlan0
   sudo wpa_cli reauthenticate
else
   echo Internet is up
fi
sudo chmod +x CheckInternet.sh

On peut tester le script en exécutant celui-ci:

sudo ./CheckInternet.sh

Le script va pinger google 10 fois. Si tous les pings sont perdus l’accès internet est perdu, mais normalement la connexion à la borne wifi est toujours bonne. Il suffit alors de demander une nouvelle IP: les deux lignes dhclient s’en charges.

Ce script s’exécute toutes les minutes:

sudo crontab -e
*/1 * * * * sudo sh /home/pi/CheckInternet.sh >/dev/null 2>&1

On a maintenant une connexion internet fiable, qui est automatiquement vérifié.

Redirection du trafic vers le port Ethernet

C’est bien beau tout ça, mais moi ce que je voulais c’était avoir mon propre réseau wifi, accessible par tous mes objets (pc, smartphones, …) en même temps. C’est bien pour ce que nous disposons d’un routeur wifi. Il sera connecter au port Ethernet du Raspberry. Mais avant cela, il faut dire au Raspberry de rediriger tout le trafic du réseau wifi vers le port Ethernet, et de rediriger les requêtes qui arrive via le port Ethernet vers le réseau wifi.

Première chose a faire, activer la redirection de trafic:

sudo nano /etc/sysctl.d/30-ipforward.conf
net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1

Ensuite, écrire les regles iptables:

sudo nano /etc/iptables/rules.v4

 

# Generated by iptables-save v1.4.21
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Generated by iptables-save v1.4.21
*filter
:INPUT ACCEPT [445:55513]
:FORWARD ACCEPT [543:45114]
:OUTPUT ACCEPT [345:50556]
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i net0 -o wlan0 -j ACCEPT
COMMIT
# Generated by iptables-save v1.4.21
:PREROUTING ACCEPT [484:32167]
:INPUT ACCEPT [1:237]
:OUTPUT ACCEPT [17:1323]
:POSTROUTING ACCEPT [1:172]
-A POSTROUTING -o wlan0 -j MASQUERADE
COMMIT
# Completed
sudo reboot

Routeur

Il faut configurer le routeur pour que celui-ci se connecte sur le port WAN à l’adresse configurer précédemment sur le Raspberry, à savoir 192.168.1.1.

C’est tout!

Sources

https://ohnomoregadgets.wordpress.com/2013/08/28/free-wifi-with-eap-sim-on-a-desktop-computer/

https://www.raspberrypi.org/documentation/installation/installing-images/linux.md

https://www.raspberrypi.org/documentation/remote-access/ssh/README.md

https://wiki.debian.org/NetworkConfiguration#Configuring_the_interface_manually

https://github.com/raspberrypi/firmware/blob/master/boot/overlays/README

https://wiki.debian.org/DebianIPv6#How_to_turn_off_IPv6

https://wiki.archlinux.org/index.php/Internet_sharing

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s