Reverse tunneling pour The Brain : Différence entre versions

De Design numérique
Aller à : navigation, rechercher
Ligne 1 : Ligne 1 :
# Reverse tunneling
+
= Reverse tunneling =
  
 
Pour rendre accessible par Internet un ordinateur qui se trouve au sein d'un réseau local, derrière un ou plusieur(s) routeur(s) sur le(s)quel(s) on ne peut intervenir, il existe deux solutions:
 
Pour rendre accessible par Internet un ordinateur qui se trouve au sein d'un réseau local, derrière un ou plusieur(s) routeur(s) sur le(s)quel(s) on ne peut intervenir, il existe deux solutions:
Ligne 11 : Ligne 11 :
  
  
# Procedure reverse tunneling par SSH
+
= Procedure reverse tunneling par SSH =
  
## Configuration de la connexion entre le rpi et le serveur
+
== Configuration de la connexion entre le rpi et le serveur ==
  
### Générer un couple clé publique / privée sur le rpi
+
=== Générer un couple clé publique / privée sur le rpi ===
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 22 : Ligne 22 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
### Afficher et copier la clé publique générée
+
=== Afficher et copier la clé publique générée ===
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 30 : Ligne 30 :
 
```
 
```
  
### Créer un compte utilisateurice sur le serveur
+
=== Créer un compte utilisateurice sur le serveur ===
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 38 : Ligne 38 :
  
  
### Ajouter la clé publique sur le serveur
+
=== Ajouter la clé publique sur le serveur ===
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 47 : Ligne 47 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
### Tester la connexion entre le rpi et le serveur
+
=== Tester la connexion entre le rpi et le serveur ===
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 54 : Ligne 54 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
### Tester la connexion entre le serveur et le rpi
+
=== Tester la connexion entre le serveur et le rpi ===
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 68 : Ligne 68 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
### Tester la connection vers le rpi à travers le serveur  
+
=== Tester la connection vers le rpi à travers le serveur ===
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 75 : Ligne 75 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
## Automatiser la connexion avec auto-ssh
+
== Automatiser la connexion avec auto-ssh ==
  
### Installer auto-ssh sur le rpi
+
=== Installer auto-ssh sur le rpi ===
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 84 : Ligne 84 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
### Créer un fichier de configuration pour auto-ssh
+
=== Créer un fichier de configuration pour auto-ssh ===
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 106 : Ligne 106 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
### Créer un fichier qui automatisera le lancement d'auto-ssh (avec systemd)
+
=== Créer un fichier qui automatisera le lancement d'auto-ssh (avec systemd) ===
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo nano /lib/systemd/system/autossh.service
 
sudo nano /lib/systemd/system/autossh.service
Ligne 131 : Ligne 131 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
### Créer un raccourci vers le fichier pour que systemd le prenne en compte
+
=== Créer un raccourci vers le fichier pour que systemd le prenne en compte ===
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 137 : Ligne 137 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
### Lancer le service  
+
=== Lancer le service ===
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Ligne 144 : Ligne 144 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
### Activer le service pour qu'il se lance au démarrage:
+
=== Activer le service pour qu'il se lance au démarrage: ===
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo systemctl enable autossh
 
sudo systemctl enable autossh
 
</syntaxhighlight>
 
</syntaxhighlight>
  
# References
+
= References =
  
 
https://goteleport.com/blog/ssh-tunneling-explained/
 
https://goteleport.com/blog/ssh-tunneling-explained/
  
 
https://www.jeffgeerling.com/blog/2022/ssh-and-http-raspberry-pi-behind-cg-nat
 
https://www.jeffgeerling.com/blog/2022/ssh-and-http-raspberry-pi-behind-cg-nat

Version du 9 décembre 2022 à 11:20

Reverse tunneling

Pour rendre accessible par Internet un ordinateur qui se trouve au sein d'un réseau local, derrière un ou plusieur(s) routeur(s) sur le(s)quel(s) on ne peut intervenir, il existe deux solutions:

  • soit passer par un serveur VPN
  • soit passer par un serveur SSH

Il faut donc, quelle que soit la solution choisie, disposer d'une machine connectée à Internet et accessible par une adresse IP fixe et/ou un nom de domaine (serveur dédié ou VPS).

La solution choisie dépend de l'usage : les deux permettent de se connecter à l'ordinateur local *via* l'ordinateur connecté. S'il est nécessaire de rendre public (accessible donc pour des visiteureuses) un élément provenant de l'ordinateur local (par exemple un site web servi par un serveur web Apache), on optera pour un tunnel SSH qui permettra de rediriger la requête reçue par l'ordinateur connecté vers l'ordinateur local. S'il est plutôt question d'un réseau privé dont les services (partage de documents, serveur web, etc.) ne doivent pas être mis à disposition d'un plus large public, on optera pour le VPN. L'usage d'un VPN est toujours lié au fait d'établir des communications *privées* entre plusieurs ordinateurs qui ne sont pas connectés au sein du même réseau local mais qui peuvent se connecter entre eux via Internet.


Procedure reverse tunneling par SSH

Configuration de la connexion entre le rpi et le serveur

Générer un couple clé publique / privée sur le rpi

#sur le rpi
ssh-keygen -t ed25519 -C "le nom du rpi"

Afficher et copier la clé publique générée

#sur le rpi
cat /home/username/.ssh/id_ed25519.pub
#puis copier le résultat de la commande
```

=== Créer un compte utilisateurice sur le serveur ===

<syntaxhighlight lang="bash">
#sur le serveur:
sudo useradd username -m


Ajouter la clé publique sur le serveur

#sur le serveur:
mkdir /home/username/.ssh
nano /home/username/.ssh/authorized_keys
#et coller le contenu de la clé publique du rpi dans ce nouveau fichier

Tester la connexion entre le rpi et le serveur

#sur le rpi:
ssh username@serveraddress.com

Tester la connexion entre le serveur et le rpi

#sur le rpi:
ssh -Nv -R 10102:localhost:22 username@serveraddress.com

Et tout en laissant ouvert la session sur le RPI, dans un autre terminal:

#sur le serveur:
ssh -p 10102 username@localhost

Tester la connection vers le rpi à travers le serveur

#sur un ordinateur connecté à Internet
ssh -p 10102 username@serveraddress.com

Automatiser la connexion avec auto-ssh

Installer auto-ssh sur le rpi

#sur le rpi:
sudo apt install auto-ssh

Créer un fichier de configuration pour auto-ssh

#sur le rpi:
sudo nano /etc/default/autossh

Et coller:

AUTOSSH_POLL=60
AUTOSSH_FIRST_POLL=30
AUTOSSH_GATETIME=0
AUTOSSH_PORT=22000
SSH_OPTIONS="-N -R 10102:localhost:22 username@serveraddress.com"

Ici, le port 10102 du serveur redirige vers le port 22 du rpi. Si l'on veut appliquer le tunnel sur d'autres ports (pour rendre accessible d'autres ports du rpi, il faut compléter la dernière ligne en ajoutant, pour chaque port: -R portdistant:localhost:portlocal). Par exemple, pour rendre accessible le port 9001 du rpi via le port 10103 du serveur, la ligne deviendrait:

SSH_OPTIONS="-N -R 10102:localhost:22 -R 10103:localhost:9001 username@serveraddress.com"

Créer un fichier qui automatisera le lancement d'auto-ssh (avec systemd)

sudo nano /lib/systemd/system/autossh.service

Et coller:

[Unit]
Description=autossh
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=username
EnvironmentFile=/etc/default/autossh
ExecStart=/usr/bin/autossh $SSH_OPTIONS
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target

Créer un raccourci vers le fichier pour que systemd le prenne en compte

sudo ln -s /lib/systemd/system/autossh.service /etc/systemd/system/autossh.service

Lancer le service

sudo systemctl daemon-reload
sudo systemctl start autossh

Activer le service pour qu'il se lance au démarrage:

sudo systemctl enable autossh

References

https://goteleport.com/blog/ssh-tunneling-explained/

https://www.jeffgeerling.com/blog/2022/ssh-and-http-raspberry-pi-behind-cg-nat