routeur4g.fr est financé par ses lecteurs. Quand vous achetez en passant par les liens du site, nous pouvons toucher une commission d’affiliation.
[TUTO] Accéder à son LAN derrière un routeur 4G, depuis l'extérieur, avec SSH
Ce tuto est la suite de celui qui présentait l'utilisation de ngrok.
Il sera certainement utile de relire ce tuto avant d'aborder celui-ci.
Pour rappel, en 4G, et contrairement à l'ADSL, on est généralement pas connecté directement à internet.
Sauf exceptions (airmob, ...), on est connecté au réseau privé de l'opérateur et c'est lui qui route vers internet.
Pour cette raison, il n'est pas possible d'ouvrir un port vers l'extérieur pour établir une connexion entrante.
Ici, nous allons utiliser un tunnel reverse-ssh pour permettre les connexions entrantes.
- Les données ne transitent que par des machines de confiance;
- Plusieurs redirections sont possibles simultanément. On peut ouvrir plusieurs ports qui seront redirigés vers une ou plusieurs machines de son LAN;
- Comme on maitrise le serveur "ami", on peut avoir un nom de domaine qui pointe vers cette machine (par exemple mondomaineperso.com). L'accès à la machine du LAN se fera simplement avec un nom de domaine;
- Cette solution coûte un peu moins cher.
L'inconvénient principal est qu'elle est plus complexe à mettre en œuvre.
Pour ceux qui souhaitent maitriser SSH, c'est un très bon exercice !Prérequis :
1- Il faut disposer d'un serveur "ami" sur lequel :
- on a un accès SSH
- on peut ouvrir les ports vers l'extérieur
- on peut modifier la configuration (ssh et utilisateurs)
Personnellement, j'utilise une instance Scaleway ARM64-2GB à 3,60€ par mois. Elle dispose d'une adresse IP fixe et un de mes noms de domaine pointe dessus.
2- Il faut également disposer d'une machine sur son LAN sur laquelle il y a un client SSH (par exemple Putty sur un PC). Comme la connexion extérieure ne sera possible que quand cette machine est allumée, on peut avantageusement utiliser un Raspberry Pi. C'est ce qui est présenté dans ce tuto.
Principe :
1- Un Raspberry Pi sur son LAN (ou tout autre machine disposant d'un client SSH) crée un tunnel chiffré entre un serveur extérieur "ami" et une ou plusieurs machines du LAN;
2- En se connectant au serveur "ami", on accède aux machines du LAN qu'on a configurées.Pour mettre en œuvre cette solution, il faut :
1- Ouvrir les ports souhaités sur le serveur "ami";
2- Créer un compte (sans login) sur ce serveur pour que le Raspberry Pi du LAN puisse s'y connecter;
3- Configurer SSH sur ce serveur pour permettre la redirection de port;
4- Configurer SSH sur le Raspberry Pi sur le LAN pour faciliter les reprises sur perte de connexion;
5- Générer une clef d'authentification RSA pour se connecter sur le serveur "ami";
6- Créer le tunnel au démarrage avec crontab.
Dans cet exemple, allons donner accès depuis l'extérieur à un serveur web qui tourne sur le LAN
Nous utiliserons les adresses IP suivantes, qui sont, bien sûr, à remplacer par celles réellement utilisées :
- Serveur "ami" externe : 1.2.3.4 avec SSH sur le port 2200. Le port 80 sera redirigé vers la machine du LAN;
- Raspberry Pi sur le LAN : 192.168.1.20 avec SSH sur le port 22;
- Machine à laquelle on veut donner accès depuis l'extérieur : 192.168.1.100. Serveur Web sur le port 8080.
Fonctionnement :
1- Le Raspberry Pi ouvre un tunnel SSH sécurisé vers le serveur "ami" 1.2.3.4:2200.
Il établit également les connexions avec les machines du LAN concernées (pour être précis, ces connexions ne seront en fait établies qu'au moment d'une connexion entrante, mais pour plus de clarté, je préfère les représenter ici).
Le reverse-ssh permet d'ouvrir un port sur ce serveur (80 dans notre exemple).
Ce port sera redirigé vers le port 8080 de la machine du LAN 192.168.1.100 pour laquelle on souhaite donner un accès depuis l'extérieur.
2- Une machine extérieure souhaite se connecter à notre machine sur le LAN
Pour cela, elle se connecte au serveur "ami" (
http://www.mondomaineperso.com)
3- Cette connexion est redirigée sur la machine du LAN
La connexion au port externe du serveur 80 est redirigée par son SSH vers le Raspberry Pi par le tunnel sécurisé.
Le client SSH sur Raspberry Pi redirige le tunnel vers la machine finale sur le LAN, sur le port 8080.
Cette connexion n'est pas chiffrée mais ce n'est pas important car on se trouve sur le LAN.
Réalisation :
A - Sur le serveur "ami" :
1 - Ouvrir les ports souhaités sur le serveur "ami" (80 dans notre exemple)
useradd -m revssh; passwd revssh
3- Par sécurité, interdire à cet utilisateur de se logguer et ne lui autoriser que la redirection de port :
apt-get install rssh # On installe rsshCertaines fonctions de rssh (scp, sftp, ...) peuvent être activées/désactivées dans /etc/rssh.conf.
Modifier /etc/passwd pour utiliser rssh lors de la connexion, ce qui interdira à cet utilisateur de se logguer :
revssh:x:1006:1007::/home/revssh:/usr/bin/rssh
Dans cet exemple, l'uid et le gid 1006 et 1007 dépendent de la machine. Il ne faut pas y toucher.
4- Modifier /etc/ssh/sshd_config :
GatewayPorts yes # Pour permettre la redirection de port et faire du reverse-ssh<br>ClientAliveInterval 30 # Pour fermer les ports en cas de perte de connexion
Suite dans le post suivant...
Message edité par pioc34 on
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
1- Modifier /etc/ssh/ssh_config (attention, pas sshd_config !) pour faciliter la récupération de la connexion en cas de coupure
2- Générer une clef privée (en étant root pour que la clef soit dans /root/.ssh/id_rsa) :
3- Copier la clef publique sur le serveur
4- Installer autossh pour obtenir un tunnel ssh avec reprise automatique en cas de perte de connexion
5- Ajouter une ligne dans /etc/crontab :
Les options utilisées pour autossh sont les suivantes :
Si l'on souhaite effectuer plusieurs redirections, il suffit d'ajouter une option -R supplémentaire
Attention, il y a une petite discordance entre les explications/implantations et les 4 premiers schémas rzo
En effet, le LAN sur les schémas est en adressage avec un préfixe dans 192.168/16
Tu as raison. Ça vient du fait que je suis en 172.17.0.0/16 chez moi et que j'ai fait le tuto avec une config plus classique en 192.168.1.0/24.
J'ai demandé à Ludovick de le corriger.
Par contre je vais aussi tester le reverse-ssh, comme tu le dis c'est un exercice interessant pour approfondir ssh
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'rssh' has no installation candidate
Merci pour ces tutos qui sont très clairs et très bien expliqués.
Ils pourrait répondre à mon problème d'accès à mon réseau situé derrière un routeur 4G perso, mais j'ai aussi trouvé un troisième solution sur le net à base de FRP (Fast Reverse Proxy) qui à l'air alléchante.
Mon idée c'est de faire tourner le serveur FRP sur mon NAS avec IP privé et le client FRP sur mon NAS avec IP publique. Du coup je maitrise les 2 de bout en bout sans besoin de passer par un serveur externe (payant) ; seul défaut il faut que mon NAS principal reste allumé 24/24 mais c'est déjà le cas.
Connaissez vous FRP et auriez vous des conseils sur cette solution ?
Cordialement
Pascal
Bonjour,
J'ai trouvé le sujet très intéressant car je voudrais atteindre depuis internet une caméra D-Link DCS 4633EV située derrière un modem routeur Huavei B525s-65a.
Après deux jours d’essais malgré que le DDNS fonctionne j’avais bien remarqué que l’adresse retourné par celui-ci en 10.116.x.x n’était pas joignable depuis un navigateur.
Je vais donc essayer votre solution et comme je souhaite que le dispositif consomme le moins possible d’électricité vu qu’il fonctionnera 24h sur 24 le Raspberry Pi sera le bienvenu.
Quel modèle me conseilleriez-vous et quelle version de Linux faudrait-il utiliser ?
Autrefois j’ai bidouillé sous Linux et travaillé sur des stations Unix Sun mais maintenant je suis plutôt plus habitué à Windows jusqu’à la version 7 pro.
En vous remerciant par avance.
J'utilise la distrib dietpi.
Comme tout le monde, j'ai une camera IP (axis) branchée sur un routeur 4G dans une résidence secondaire, et j'aimerais y accéder depuis mon domicile (en fibre avec Freebox). Je pense prendre un RPI que je raccorderai sur le routeur avec la camera.
Le serveur ami (à mon domicile) peut il être un ordi portable (mac en l'occurrence) qu'on allume seulement quand on veut se connecter au LAN du routeur 4G ?
Merci encore
Vincent
Autre chose : le serveur ami peut il être un NAS Synology ? je ne crois pas que RSSH existe pour Synology...
Merci.
Mon besoin c'est d'accéder à un serveur web sur le port 443 sur le LAN derrière le routeur 4g.
Mon installation est la suivante :
- Un VPS chez IONOS avec 1Vcpu, 512Mo Ram, 10Go de SSD avec DEBIAN 10
- Un PI4b 4Go RAM, 32Go SD, PI OS Lite
- je fais le test de chez moi, je suis derrière une box fibre up Orange (c'est juste pour finaliser la conf du PI et du VPS avant d'aller l'installer derrière un TP-LINK MR600)
J'ai mis en place tout le tutoriel, mais le port sur le VPS reste clos et avec un tcpdump je vois bien le paquet arriver avec un SYN et ensuite il y un RESET juste derrière !
Je ne sais pas comment ouvrir un port (ex: TCP 2200 comme dans le tutoriel) en écoute sur le VPS.
J'ai du créer le répertoire .ssh de l'utilisateur revssh et créer aussi le fichier de la clé publique (j'ai peut-être mal mis les droit sur ce fichier ?).
Le Firewall DEBIAN est en full open, il y un firewall dans la solution IONOS ou j'ai ouvert les ports suivants : 22, 80, 443, 2200, 8443, 8447
Merci pour votre aide.