Attivare SSH InversoPer chiarire meglio le problematiche può essere utile una immagine delle due reti e delle necessità di comunicazione:
Tunnel SSH inverso
PRIMA Modalità con costruzione dei comandi da terminaleTunnel Inverso
Fin dall'origine potevo eseguire una connessione SSH dalla rete NAT verso il SERVER. La necessità che avevo era quella di fare manutenzione software ai dispositivi dietro la rete NAT lavorando dal SERVER. Il tunneling SSH in ambiente linux risolve il problema.
* Supponiamo che l'IP di destinazione (rete locale 2) 192.168.0.40 (pi@raspy) Linux (nattato) a cui si desidera accedere dal server).
* Il server (rete locale 1) ha indirizzo locale 192.168.1.50 (pi@banana). Il server è accessibile dall'esterno con servizio Dyndns xxx.addns.org (pi@banana )
* SSH diretto pi@raspy →
pi@xxx.addns.org * SSH Inverso
pi@xxx.addns.org → pi@raspy
1. SSH dalla destinazione (NAT) verso la sorgente (Server con IP pubblico) utilizzando il comando seguente:
pi@raspy:~$ ssh -R 1999:localhost:22
pi@xxx.addns.org Dopo la richiesta di Password siete connessi con pi@banana:~$
* La porta 1999 può essere una qualsiasi porta inutilizzata è la porta su cui avverrà la connessione ssh Inversa..
2. Dal terminale aperto sopra si deve aprire la porta con il comando:
pi@banana:~$ sudo iptables -I INPUT 1 -p tcp --dport 1999 -j ACCEPT
verifica apertura porta:
2.A Dal terminale aperto sopra si verifica se la porta 1999 è aperta
pi@banana:~$ sudo iptables -L -vn
dovresti avere in output
Chain INPUT (policy ACCEPT 178 packets, 11976 bytes)
pkts bytes target prot opt in out source destination
3 180 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1999La risposta chiave, che tutto è ok, sta nella riga che termina con tcp dpt:1999
3. Ora è possibile fare SSH inverso dal terminale del server (server pi@banana ) alla destinazione (NAT) attraverso il reverse tunneling SSH:
pi@banana:~$ ssh localhost -p 1999
se tutto è ok, dopo la richiesta di password, siete collegati al (NAT) pi@raspy:~$
* la connessione tra destinazione (NAT) e sorgente (Server) deve essere attiva in ogni momento.
NOTA: in sede di istallazione sarebbe bene spostare il router NAT in prossimità del Server. Se si tratta di prima e seconda casa non è comodo inviare comandi dalla seconda casa e poi verificare se tutto e OK dalla prima casa.
====================================================
Automatizzare il tunnel inverso
SECONDA Modalità La prima modalità funziona ma in caso di caduta della connessione o di caduta dell'alimentazione si deve rifare. Meglio automatizzare con script se possibile.
1. Da nat (pi@raspy) creare le chiavi pubbliche con i comandi:
Le chiavi pubbliche consentono di connettersi via SSH senza richiesta di password
pi@raspy:~$ sudo -i
root@raspy:~# ssh-keygen
rispondere sempre invio senza inserire password.
al termine dovete avere le seguenti dir e i file relativi:
pi@raspy:~$ cd .ssh
pi@raspi:~/.ssh$ ls -l
output:
-rw------- 1 pi pi 950 mar 13 13:26 id_rsa
-rw-r--r-- 1 pi pi 950 mar 13 13:26 id_ras.pub2. Da nat (pi@raspy) copiare le chiavi pubbliche sul server (pi@banana or
pi@xxx.addns.org ) con i comandi:
pi@raspy:~$ sudo -i
root@raspy:~# ssh-copy-id -i /home/pi/.ssh/id_rsa
pi@xxx.addns.org3. Ora da nat potete collegarvi al Server senza Password con il comando:
pi@raspy:~$ ssh
pi@xxx.addns.orgcollegati a banana con il comando list:
pi@banana:~$ ls .ssh
vi deve mostrare
-rw-r--r-- 1 pi pi 3155 mar 15 18:37 authorized_keysqueste sono le chiavi pubbliche trasferite sul server
4. Rendiamo stabile la connessione tra Server e NAT
Scrivo il seguente script di connessione(~Documenti/invssh.sh):
#!/bin/bash
autossh -tt -M 0 -o "ServerAliveInterval 30" -R 1999:localhost:22
pi@xxx.addns.org & >/dev/null 2>&1 &
su nat da terminale con il comando:
pi@raspy:~$ ~Documenti/invssh.sh
Si apre automaticamente la connessione (senza richiesta di password) sulla porta 1999 e il terminale pi@raspy:~$ si collega a
pi@banana:~$
Se chiudo il terminale di (NAT) la connessione desiderata si mantiene.
5. Ora dal terminale del Server posso eseguire ssh inverso:
pi@banana:~$ssh localhost -p 1999
ti richiede la pasword e quindi ti collega con il (NAT)
pi@raspy:~$
ora puoi fare manutenzione ai computer della rete nattata!
Piccolo vantaggio se cade la connessione di rete il client NAT ri-esegue automaticamente la connessione ssh per il tunnel inverso.
COSA Manca: far partire (su NAT) lo script al boot in modo che, in caso di caduta di alimentazione, si riavvi automaticamente il tunnel inverso.