Une question revient souvent dans les commentaires et les messages que je reçois : Comment faire pour se connecter sur un Raspberry Pi à distance si celui ci n’a pas d’ip fixe, comme c’est le cas avec les clés 3G par exemple ?
Je vous propose donc aujourd’hui un tout petit article pour vous montrer un moyen simple et efficace de garder la main sur votre Raspberry Pi connecté en 3G.
Si votre Raspberry Pi est connecté à internet via une clé 3G, vous aurez probablement constaté qu’il est souvent impossible de s’y connecter à distance et que son adresse IP n’est pas fixe. En effet, les infrastructures mises en place par les opérateurs de téléphonie mobile filtrent, la plus part du temps, les flux entrant, et l’adresse IP change à chaque connexion au réseau, et parfois même au cours d’une même session. Si vous avez installé un Raspberry Pi doté d’une clé 3G dans votre maison secondaire, ou que vous utilisez un Raspberry Pi en extérieur comme dans le projet PiTimeLapse, il faut contourner le problème pour pouvoir y accéder à distance.
SSH
Je cite ici la définition présente sur Wikipédia – SSH Secure SHell :
Secure Shell (SSH) est à la fois un programme informatique et un protocole de communication sécurisé. Le protocole de connexion impose un échange de clés de chiffrement en début de connexion. Par la suite, tous les segments TCP sont authentifiés et chiffrés…
Ce qu’il faut retenir, c’est que SSH (nativement présent sur une Raspbian et sur toute distribution Linux qui se respecte), permet de créer un « tunnel » ou un « lien » entre deux machines. Une machine A se connecte sur une machine B, et les machines A et B peuvent échanger des informations.
Si vous utilisez un Pi, vous vous y êtes probablement déjà connecté en utilisant SSH en utilisant la commande suivante :
ssh pi@adresse_ip_de_votre_pi
SSH connect back
Une fonctionnalité intéressante de SSH est d’autoriser les « connections retours ». C’est à dire que si A se connecte sur B, alors B pourra revenir sur A. Et c’est là que se trouve la solution à notre problème 🙂 Si je ne peux pas directement me connecter à mon Pi, je n’ai qu’à dire à mon Pi de se connecter à une machine que je contrôle, pour que je puisse ensuite remonter jusqu’à lui 🙂
Ceci se fait de manière très simple. Sur le Pi connecté en 3G lancez la commande suivante :
ssh -N -R 10022:127.0.0.1:22 root@ip_serveur
- -N : ne lance pas de commande sur le serveur distant
- -R : « redirige un port » sur depuis le serveur disant
- 10022 : un numéro port (de préférence supérieur à 1024), qu’on utilisera pour se connecter en retour
- 127.0.0.1 : pour indiquer qu’on redirige le port sur la boucle locale du Pi
- 22 : numéro du port que l’on souhaite atteindre. Ici, c’est le port utilisé par SSH. Vous pouvez le changer pour celui de VNC, ou de FTP par exemple.
A ce stade, votre Pi est connecté à votre serveur. Depuis votre serveur, vous pouvez vous connecter au Pi en retour en utilisant le port choisi (ici 10022). Si vous souhaitez à nouveau utiliser SSH pour vous connecter en retour sur votre Pi, il vous suffit de lancer la commande suivante depuis votre serveur :
ssh -p 10022 root@127.0.0.1
Ainsi, vous n’avez plus besoin de connaître l’adresse IP de votre Pi connecté en 3G, et vous passez à travers tous les filtres mis en place par les opérateurs de téléphonie mobile 🙂
Si vous voulez vous assurer que le tunnel entre le Pi et votre serveur persiste même après une déconnexion/reconnexion au réseau (ce qui arrive très souvent en 3G), vous pouvez utiliser autossh. Plus d’information sur autossh ici : http://linux.die.net/man/1/autossh
Merci pour cet article, je ne connaissais pas cette option de SSH.
Je pense que pas mal de monde a ce problème et même derrière une box sans vouloir utiliser un service du type dyndns.
Personnellement j’avais opté pour un script python qui remonte fréquemment son adresse IP publique par mail, voici le lien :
https://github.com/paulaborde/SendIP_AutoMail
Merci pour l’info dans tous les cas.
Paul
Hello,
Merci pour ce lien 😉
Le tunnel SSH permet également de passer outre les systèmes de filtrage éventuels.
Bonne continuation à vous 🙂
Bonjour,
Quelle réponse n’avez vous pas eu par mail ?
Le mail où vous me demandez de bosser gratuitement pour vous ?
Essayez donc de réaliser votre projet par vous même à la place d’exiger de moi que je le fasse à votre place. J’ai répondu à vos questions pour vous aider, mais je ne suis pas à votre disposition.
Bonne continuation
bonjour
Cet article me semble être la solution à mon problème de connexion avec un pi dans une résidence secondaire. Je vais tester cela sans délai. La question que je me pose est de savoir si je peux accéder au serveur web du Raspberry en 3G (pour Domoticz) via le SSH ?
J’ai bien chercher un peu mais je patauge…….entre l’anglais et l’informatique.
Merci pour tous ces tutos biens utiles aux ignorants. Même si certains n’apprécient pas!!!
Bonjour,
Oui cest tout à fait possible d’accéder à la console web de Domoticz. Il suffit dans ce cas se forwarder le port de domoticz qui le 8080 de mémoire (à verifier)
🙂
Merciiiiii bcq je vais essayer ça
Bonjour
Je ne connaissais pas cette fonctionnalité de SSH.
Par contre en 3G, quelle consommation de données pour maintenir la connexion?
J’aurai besoin de cette fonctionnalité mais je n’ai pas un abonnement illimité…
Merci de votre réponse
Bonjour,
Une fois le tunnel mis en place, en principe, il ne consomme de la bande passante que si des données transitent. Le tunnel en lui même n’envoie que quelques trames d’info pour maintenir la session, mais cela reste anecdotique 🙂
Pour info, j’ai fais le tests sur 1 semaines avec une SIM Free à 2€, et j’ai consommé moins de 1Mo de data 😉
merci de ta réponse Olivier, je ferais le test dès que possible
Bonne continuation 🙂
Encore un question olivier, avant de me lancer dans les tests, peut on lancer plusieurs connexions ssh vers un seul pc. j’aimerai interconnecter plusieurs pi vers un pc « serveur » afin de superviser des appareil raccordé sur les différents PI.
Encore merci pour ton aide
Bonjour Damien,
Oui c’est tout à fait possible 🙂
Dans le cas du connect back il faudra attribuer un port différent pour chaque PC qui s’y connecter, par exemple :
PC 1 : port 10021
PC 2 : port 10022
PC 3 : port 10024
…
Tu peux aller comme ça jusqu’à 65635 😀
Bonne continuation 🙂
Merci pour tes réponses Olivier mais finalement je pense plutôt établir une connexion VPN entre mes raspberry et mon serveur.
Encore merci en tout cas
Damien
Yep, le VPN est également une bonne solution, bien qu’un peut plus lourd/complexe à mettre en place.
Bonne continuation, et n’hésites pas à partager ta configuration 😉
bonjour
je viens de prendre connaissance de votre tuto, qui me semble très interressant.
avant de le mettre en application, j’ai des problèmes pour connecter mon dongle 3G Huawei E169 à mon raspberry PI.
pourriez vous me donner une solution.
cordialement
Pierre
Bonjour,
Regardez du côté du projet PiTimeLapse : http://www.magdiblog.fr/boa-pi-timelapse/la-connexion-reseau-3g/
Bonjour Olivier
Votre travail est vraiment impressionnant.
Je vous remercie sincerement pour vos efforts et pour l’aide que vous apportez aux amateurs purs et durs comme moi.
Une question :
Comment faire pour que mon Pi (qui est dans mon atelier) connecté a internet via 3g puisse sauvegarder les images de ma PiCam sur mon serveur (avec dns noip) a la maison (base MySql) ?
Merci encore
BONjour à tous et merci pour toutes ces aides précieuses:
problème rencontré, après la première commande on me demande un password:
pi@raspberrypi ~ $ ssh -N -R 10022:127.0.0.1:22 root@10.XXX.200.XXX
root@10.XXX.200.XXX‘s password:
mais je ne vois pas duquel il parle notre petit Pi.
Une idée?
merci
dans ce cas il te demande le mot de passe du compte root de la machine 10.xxx.200.xxx
Bonsoir
j’utilise le dongle 3G avec gammu pour envoyer et recevoir des sms
j’ai fait les essais de tunnel en locale, pas de problème
comment connecter le Raspberry en 3G, je voudrais le mettre dans ma résidence secondaire qui n’a pas d’accès internet
j’ai essayé avec wvdial mais !!!
Cordialement
Pierre Chevalier
Bonjour
merci pour votre tuto
cela fonctionne parfaitement avec les commandes suivantes
sur le RBI
ssh -N -R 10022:localhost:22 pi@xxxxx -p22yy
sur le rbi xxxxx
ssh -p 10022 pi@localhost
je voudrais faire comme Damien accéder à plusieurs RBI
sur le 2ème RBI je fais la cde
ssh -N -R 52285:localhost:22 pi@zzzz -p22ww
pas de problème
sur le rbi zzzz
ssh -p 52285 pi@localhost
je reste sur le RBI zzzz
pouvez vous m’aider ?
cordialement
Pierre
bonjour,
alors moi j’ai bien compris le principe mais je n’arrive a rien:
– j’ai une rapsberry connecte modem 4g //// ip : 192.168.1.81
– j’ai un serveur que je veux utiliser a distance sur mon rasp //// port : 8080
– j’ai un vps dedié avec openvps chez ovh //// vpsxxxxx.ovh.net
j’utilise putty avec mon pc pour entrer dans la console ssh de mon rasp ou server dedie
et maintenant je souhaite avoir accès mon Server rapberry a distance ???
vraiment vous sérieux trop sympa de me faire un tuto détails
je vous remercie par avance