Transformer un RaspberryPi en box internet avec un iPhone
par spin0us le 23 octobre 2017Ce week end, ma freebox a rendu l'âme (elle redémarre en boucle, impossible de se connecter). Après les vérifications d'usage, je contacte l'assistance Free qui me programme une intervention d'un technicien le jeudi suivant. Sachant que je suis en télétravail, ce délais était intollérable (même si une semaine de vacances ne m'aurait pas spécialement dérangée).
Solution 1: utiliser un téléphone pour faire un partage de connexion via l'USB ou le Wifi. Malheureusement la configuration matérielle de mon espace travail ne me permettait pas ce type de configuration, il a fallu envisager une autre solution.
Solution 2: utiliser un téléphone pour faire un partage de connexion via l'USB connecté sur un Raspberry Pi qui fera office de routeur et serveur DHCP. De cette façon, je peux remplacer la quasi totalité des fonctionnalités de ma freebox de façon transparente vis à vis de la configuration actuelle du réseau.
Matériel requis
- un Rapsberry Pi
- un iPhone (attention à la consommation, tout votre trafic internet passera par votre téléphone)
Si vous disposez d'un téléphone de type Android, je vous invite à lire ce topic (en anglais)
Préparation du Raspberry Pi
Commencez par télécharger l'image officielle RASPBIAN STRETCH LITE.
Puis installez la sur votre carte mémoire microSD.
Pensez à activer le ssh en
créant simplement un fichier nommé "ssh" dans la partition de boot.
Pour
éviter de devoir retrouver l'adresse ip de votre Raspberry Pi une fois qu'il
aura booté, je vous invite à spécifier une ip en ajoutant par exemple
"ip=192.168.0.1" dans le fichier "cmdline.txt" de la partition de boot (voir ici pour plus d'info).
Vous pouvez maintenant remettre la carte mémoire dans votre Raspberry Pi et le démarrer.
Etape 1 : Configuration de base
Ouvrez une session ssh sur votre Raspberry Pi (via le terminal sur MacOs/Linux
ou Putty sur Windows).
Pour rappel, les
identifiants de connexion par défaut sur le Raspberry Pi sont "pi"
et mot de passe "raspberry".
Une fois connectez, passez en mode
root (sudo su -
) pour une question de facilité.
On commence par les mises à jour et l'installation des paquest nécessaires
root@rpi:~# rpi-update root@rpi:~# apt-get update && apt-get dist-upgrade root@rpi:~# apt-get install gvfs ipheth-utils libimobiledevice-utils gvfs-backends gvfs-bin gvfs-fuse root@rpi:~# apt-get install dnsmasq ifuse iptables-persistent
rpi-update
met à jour les firmwares de votre Raspberry Pi
apt-get update && apt-get dist-upgrade
met à jour les paquets installés
Le deux commandes suivantes installent les paquets nécessaires à notre configuration.
On va ensuite identifier l'interface utilisée par notre téléphone connecté sur l'USB
root@rpi:~# ifconfig -s Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 14351 0 0 0 9621 0 0 0 BMRU lo 65536 37 0 0 0 37 0 0 0 LRU wlan0 1500 0 0 0 0 0 0 0 0 BMU
Branchez votre iPhone sur un des ports USB et activez le partage de connexion (Paramêtres > Partage de connexion). Puis relancez la même commande.
root@rpi:~# ifconfig -s Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 14351 0 0 0 9621 0 0 0 BMRU eth1 1500 1111 0 1 0 1347 2 0 0 BMRU lo 65536 37 0 0 0 37 0 0 0 LRU wlan0 1500 0 0 0 0 0 0 0 0 BMU
Vous pouvez alors constater l'apparition d'une nouvelle interface (ici eth1
)
qui correspond donc à l'USB de votre téléphone. On peut donc la configurer :
root@rpi:~# echo "allow-hotplug eth1" >> /etc/network/interfaces root@rpi:~# echo "iface eth1 inet dhcp" >> /etc/network/interfaces
De cette manière, votre connexion se configurera automatiquement. Si vous regardez sur l'écran de votre iPhone, vous constaterez que la connexion ne semble pas encore partagée. Pour terminez cette étape il faut créer un point de montage pour l'iPhone.
root@rpi:~# mkdir /media/iPhone root@rpi:~# ifuse /media/iPhone
Il faut ensuite configurer le système pour qu'il fasse la manipulation du
point de montage automatiquement lors de la connexion de l'iPhone. Editez le
fichier /lib/udev/iphoneconnect
et ajoutez les lignes suivantes :
#!/bin/bash umount /media/iPhone ifuse /media/iPhone ipheth_pair
Il faut ensuite rendre ce script exécutable et le programmer dans l'automatisation de la détection
root@rpi:~# chmod 755 /lib/udev/iphoneconnect root@rpi:~# sed -i -e "s/ipheth_pair/iphoneconnect/g" /lib/udev/rules.d/90-iphone-tether.rules root@rpi:~# service networking restart
A ce stade, votre Raspberry Pi est connecté à internet et vous devriez le voir sur l'écran de votre iPhone.
Par contre, les autres ordinateur de votre réseau local ne sont pas encore reliés. Il faut transformer votre Raspberry Pi en routeur et éventuellement en serveur DHCP.
Etape 2 : Configuration du Raspberry Pi en routeur
Commencez par activer le routage ip v4
root@rpi:~# echo "1" > /proc/sys/net/ipv4/ip_forward
Et pour éviter d'avoir à taper cette commande à chaque redémarrage,
décommentez à la #net.ipv4.ip_forward=1
dans le fichier
/etc/sysctl.conf
.
Il faut maintenant créer les règles de routage dans iptables
root@rpi:~# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE root@rpi:~# iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT root@rpi:~# iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT root@rpi:~# iptables-persistent save
Ici eth0
représente l'interface de votre réseau local branché
sur le port ethernet de votre Raspberry Pi et eth1
l'interface
du port USB de votre iPhone. Pour résumer, on redirige tout le trafic en
provenance de votre réseau local vers la connexion de votre iPhone.
La
dernière ligne permet de rendre ses règles persistantes. Sinon elles
disparaissent à chaque redémarrage.
Etape 3 : Configuration du Raspberry Pi en serveur DHCP
Pour rappel, un serveur DHCP sert à fournir des adresses IP aux équipements qui en font la demande. Pour plus d'informations, je vous invite à lire ceci.
root@rpi:~# mv /etc/dnsmasq.conf /etc/dnsmasq.default root@rpi:~# vi /etc/dnsmasq.conf
Ajoutez les lignes suivantes :
interface=eth0 dhcp-range=192.168.1.10,192.168.1.250,255.255.255.0,12h dhcp-option=6,8.8.8.8,8.8.4.4 dhcp-host=aa:bb:cc:dd:ee:ff,MonPC,192.168.1.5
La première ligne précise l'interface concernée, ici le réseau local eth0
.
dhcp-range
spécifie la plage d'adresses IP disponnibles et la durée
du bail (ici 12h).
dhcp-option
permet de renseigner les adresses ip des DNS (option 6).
dhcp-host
réserve une adresse ip à une adresse MAC donnée.
Il ne reste plus qu'à redémarrer le service de DHCP
root@rpi:~# service dnsmasq restart
Et voilà, vous en avez terminé. En démarrant vos autres équipements connectés sur l'ethernet, vous devriez pouvoir accéder à internet comme avant.
Conclusion
Cette procédure peut sembler compliquée, mais une fois en place, plus besoin d'y revenir. Vous démarrez votre Raspberry Pi, connectez votre iPhone sur l'USB, lancez le partage de connexion et tout est prêt !
Il doit également être possible d'activer le wifi du Raspberry Pi pour émuler la fonctionnalité de point d'accès et ainsi remplir tous les rôles de la Freebox, mais je n'en avais pas l'utilité, ni le besoin. Donc, à vous de jouer !