Come faccio a sapere se il mio tunnel SSH è stato creato con successo?


21

Mi affido al seguente script tunnel.shscritto da altri per mantenere in vita un tunnel ssh:

#!/bin/bash
export SSH_HOST=tim@server 

if [ ! -f /tmp/.tunnel ] 
then
echo "Creat SSH tunnel"
ssh -f -D 9999 $SSH_HOST "if [ -f ~/.tunnel ]; then rm ~/.tunnel; fi; while [ ! -f ~/.tunnel ]; do echo > /dev/null; done" & 
touch /tmp/.tunnel 
else
echo "Close SSH tunnel"
ssh $SSH_HOST "touch ~/.tunnel" 
rm /tmp/.tunnel 
fi
exit

Per creare un tunnel SSH persistente, ho solo problema tunnel.sh. Il tunnel non verrà chiuso fino a quando non emetterò di tunnel.shnuovo.

Mi chiedevo come posso verificare se il tunnel ssh è stato effettivamente creato con successo?

Il mio uso principale del tunnel è quello di stampare documenti su alcune stampanti nella stessa LAN del server e le stampanti sono accessibili solo dall'interno della LAN. Dopo aver creato un tunnel, ora la stampa non segnala alcun problema, ma poiché non ci sono fisicamente lì, non posso verificare se i documenti sono stati effettivamente stampati.

Ho pensato che da quando sono ora nella LAN grazie al tunnel, il mio IP esterno dovrebbe essere lo stesso di quello del server. Ma in realtà non sono gli stessi (li ho scoperti da wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'). Mi chiedo perché? Quando mi collego a un sito Web su Internet con il tunnel attivo, il server non è il punto intermedio tra me e il sito Web nella connessione, a causa del tunnel tra me e il server?

Risposte:


25

È molto più complicato di quanto debba essere :-)

Inizia il tunnel:

ssh -f -N -D 9999 -M -S /tmp/ssh_tunnel_%h.sock -o ExitOnForwardFailure=yes $SSH_HOST && \
echo "ssh tunnel started successfully" || \
echo "ssh tunnel failed to start"

Ferma il tunnel:

ssh -S /tmp/ssh_tunnel_%h.sock -O exit $SSH_HOST

.

Questo è tutto ciò che devi fare. Se vuoi i dettagli, salta di seguito.

Per la tua seconda domanda, quella IP. No, il tuo IP non cambia. Tutto quello che hai fatto è stato creare un proxy SOCKS tramite l'host remoto. Il tuo sistema non utilizza automaticamente questo proxy a meno che tu non lo dica a.

Spiegazione SSH
Args per l'avvio del tunnel
-f:: Dì a ssh di usare lo sfondo. Si metterà in secondo piano solo se si avvia correttamente (collabora con l' -oargomento seguente).
-o ExitOnForwardFailure=yes: Questo dice a ssh di uscire se non è possibile impostare il proxy SOCKS.
-N: Non eseguire un comando. Vogliamo solo fare tunnel, non fare nulla sull'host remoto.
-D 9999: Il tuo proxy SOCKS.
-M: Questo è necessario affinché l'argomento -S funzioni qui.
-S /tmp/ssh_tunnel_%h.sock: Questo dice di usare /tmp/ssh_tunnel_HOSTNAME.sock per il suo socket di controllo. L' -Mopzione indica che ssh deve impostare questo socket e non inviare comandi a un altro ssh già in ascolto sul socket. È possibile utilizzare questo socket per impostare tunnel aggiuntivi dopo che ssh è già in esecuzione. Il%h utilizza il nome host dell'host remoto come parte del nome file.

Argomenta per l'arresto del tunnel
-S /tmp/ssh_tunnel_%h.sock:: questo dovrebbe essere ovvio. Tuttavia, poiché non abbiamo emesso un -M, ciò significa che ssh dovrebbe connettersi al socket che è già lì e dirgli cosa fare invece di fare qualsiasi cosa da solo.
-O exit: Questo fa parte del -S. Diciamo che l'ssh in ascolto sul socket per uscire.
L' $SSH_HOSTresta da fare qui. Anche se dovessi specificare un percorso socket assoluto, senza usare %hil nome file, ssh vorrebbe comunque specificare un host remoto. Questo è il motivo per cui ho inserito %hgli argomenti. Potrebbe anche usarlo se ssh chiederà l'host e manterrà le cose organizzate.


5

Questo tipo di tunnel non modifica le informazioni del tuo indirizzo IP. Tutto ciò che fa è dire al computer di aprire la porta 9999 e inoltrare le connessioni a quella porta al computer remoto (tim @ server) tramite la connessione ssh. Il modo più semplice per verificare che la connessione sia attiva, è telnet alla porta su cui è stato creato il forward (nel tuo esempio 9999):

$ telnet localhost 9999
Server di prova ...
Connesso al server.
Il carattere di escape è '^]'.

Se ricevi il messaggio "Connesso al server". messaggio, significa che il tuo tunnel è attivo. Se invece ottieni: "Impossibile connettersi all'host remoto: connessione rifiutata" il tuo tunnel non è attivo.

Per quanto riguarda la tua seconda domanda, per il tuo browser, il tuo browser non utilizzerà il tunnel, a meno che tu non lo dica. Nelle impostazioni di rete del browser, è possibile configurare le impostazioni del proxy e specificare localhost: 9999 come proxy socks5, quindi le connessioni Web dovrebbero utilizzare il tunnel ssh e apparire provenire dall'indirizzo IP del server.


+1 Grazie! (1) Quando stampo su una stampante nella LAN, come fa a sapere di andare alla porta 9999, cioè usare il tunnel? Nient'altro? (2) Esistono tipi di tunnel che cambiano le informazioni del mio indirizzo IP?
Tim

@ Probabilmente, quella particolare stampante è stata configurata per stampare su un determinato indirizzo IP e porta. Questo dipende dalla configurazione della stampante. Di solito, è possibile specificare entrambi quando si definisce una stampante. Sì, ci sono tipi di tunnel a cui saranno associate le proprie informazioni IP. Generalmente per questi si crea un separato tun / tap en.wikipedia.org/wiki/TUN/TAP interfaccia che avrà un proprio indirizzo IP collegato ad esso, e verrà visualizzato tutto il traffico che esce di tale indirizzo di venire da una rete diversa .
gabe.

Grazie! Nelle preferenze di Firefox, nelle impostazioni avanzate -> connessione ->, scelgo la configurazione proxy manuale e digito "localhost" per HTTP Proxy e "9999" per la sua porta. Dopodiché non riesco a collegarmi a nessun sito Web in Firefox. Mi chiedo perché?
Tim

@Tim è un po 'confuso ... la cosa corretta da impostare è: SOCKS Host, e non HTTP Proxy. Ho avuto lo stesso problema la prima volta che l'ho provato.
gabe.

1

Nel mio caso (Google Chrome su Ubuntu 14.10), il mio indirizzo esterno cambia, almeno all'interno del browser. Google "Qual è il mio indirizzo IP?" con e senza la connessione proxy.

Inoltre, dopo aver impostato il proxy, prova a distruggere il tunnel e vedi se riesci ancora a ottenere traffico. Quando lo faccio, Chrome restituisce un errore "Impossibile connettersi al server proxy".

Un altro modo: dopo aver eseguito il tunneling verso l'host remoto, creare una nuova sessione ssh ed eseguirla tcpdump -A dst port 80. Quindi passare ad alcune pagine e dovresti vedere il traffico relativo nel terminale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.