2013-10-09 41 views
11

Sto provando a generare un server SSH in una macchina dietro un router.Come bypassare firewall e NAT con tunnel SSH inverso

Per prima cosa ho cercato di impegnare la SSH al mio indirizzo IP pubblico:

ssh -R 10002:localhost:22 <ip_address> 

Poi sono richiamato con una richiesta di password, tuttavia la mia password nome utente non sembra funzionare.

Ovviamente conosco la mia password nome utente, quindi mi sembra che stia cercando di autenticare in un altro computer sotto la stessa rete.

Qualche suggerimento su come risolvere questo problema?

Sarebbe inoltre utile qualsiasi alternativa su come creare un server SSH dietro un router quando non si ha accesso al router.

Le porte in iptables sono tutte aperte.

UPDATE

Come suggerito da Thomas Oster risposta che ho provato quanto segue.

Nella macchina dietro il router che ho eseguito il seguente comando:

$ ssh -R10002:localhost:22 <remote_public_ip_address> -l <my_remote_server_username>

<remote_ip_address> essere il remote_ip_address di un server con IP pubblico e server SSH su cui ho il pieno controllo.

<my_remote_server_username> essere il nome utente del server remoto.

Dopo di che, ho provato a collegare dal server remoto al server dietro il router in questo modo:

$ ssh -p 10002 <remote_public_ip_address>

Tuttavia, questo comando visualizza il seguente output:

ssh: connect to host <remote_public_ip_address> port 10002: Connection refused 

Così ho aperto la porta 10002 nel firewall iptables usando il seguente comando:

sudo iptables -A INPUT -p tcp --dport 10002 -j ACCEPT 

Successivamente ho eseguito nuovamente il comando ma viene visualizzato lo stesso messaggio di errore.

Nella mia macchina dietro il router ho tutte le porte aperte in iptables.

UPDATE 2

dovete permettere portforwarding in/etc/ssh/sshd_config del server remove_public_ip_address

ho cercato di permettere portforwarding in sshd_config file aggiungendo questo comando:

LocalForward 10002 <my_remote_public_server_ip>:22 

Ma mi ha dato questa e messaggio rror:

Bad configuration option: LocalForward 

Dopo "ssh -R ...." hai lasciato la finestra aperta?

Dopo aver eseguito tale comando, si collega al computer pubblico remoto e sì, ho lasciato la finestra aperta.

È possibile utilizzare ssh -p 10002 localhost sul server pubblico dopo aver creato il tunnel ?

Sì, se eseguo quel comando nel server pubblico, si connette dopo avermi chiesto le credenziali.

Si prega di provare "ssh localhost" sulla macchina dietro il router per verificare se sshd è in esecuzione e funzionante.

Anche questo funziona.

UPDATE 3

sono stato finalmente in grado di farlo funzionare (grazie ancora a Thomas Oster)

Stiamo andando a lavorare con tre macchine: Macchina

Destinazione: Che noi voglio collegarmi a.

Macchina Medio: Un server in qualità di intermediario per la connessione (un Linode nel mio caso)

computer di casa: Dove ci sarà l'accesso al computer di destinazione.

Questi sono i passi che ho seguito

Fase 1:

[destination computer]$ vi /etc/ssh/sshd_config 

aggiungere l'opzione GatewayPorts:

GatewayPorts sì

Riavvia ssh.

Fase 2:

[destination computer]$ ssh -R 4040:localhost:22 [email protected] 

Questo collegherà la macchina pubblica con il computer di destinazione tramite la porta 4040

Sarà connettersi al computer centrale e chiederà il terminale, si deve lasciare questa scheda Aperto.

Fase 3:

collegamento da casa:

ssh [email protected] -p4040 

In alternativa, collegare dalla macchina centrale:

[home computer]$ ssh [email protected] 

[middle computer]$ ssh [email protected] -p4040 

Source

+0

È necessario consentire il port forwarding in/etc/ssh/sshd_config del server remove_public_ip_address –

+0

Dopo "ssh -R ...." hai lasciato la finestra aperta? Il tunnel è attivo solo finché la connessione è aperta. Ha mostrato messaggi di errore come "impossibile collegarsi a 10002"? È possibile utilizzare ssh -p 10002 localhost sul server pubblico dopo la creazione del tunnel? –

+0

Si prega di provare "ssh localhost" sulla macchina dietro il router per verificare se sshd è in esecuzione e funzionante. –

risposta

5

C'è uno ssh-server in esecuzione sul pubblico "ip _indirizzo"? Quello che stai cercando di fare è "aprire la connessione ssh a" ip_address "e quindi eseguire il tunneling di qualsiasi richiesta in arrivo sulla porta 10002 a localhost: 22".

Se "indirizzo IP" è l'indirizzo IP pubblico del router dsl, è necessario creare un port forwarding nella configurazione del router all'host: 22.

Se non si ha accesso al router, l'unica cosa possibile sarebbe se si avesse accesso a un altro server che esegue ssh in Internet, da cui è possibile eseguire il tunneling.

# open a session to the public available machine and create a tunnel from port 10002 back to your local sshd (22) 
ssh -R 10002:localhost:22 ip_of_public_server 
# as long as this session is open, all calls to the public available machine on port 10002 will be tunneled to your local machine (make sure sshd is running on port 22) 
ssh -p 10002 ip_of_public_server 
+0

Non so quale server SSH sia in esecuzione sull'indirizzo ip pubblico. Ma ho un altro server che esegue un server SSH con IP pubblico e il controllo completo su di esso in un'altra rete. Tuttavia non so esattamente come creare un tunnel che sarebbe collegato con questo computer dietro un router. Significato Posso connettermi dal mio computer dietro il router all'altro server SSH, ma non so come farlo al contrario. – rfc1484

+0

OK. Supponiamo che il tuo computer pubblico abbia IP-Adrress public_ip. Quindi vai al tuo computer dietro il router e fai "ssh -R10002: localhost: 22 public_ip". Se funziona, puoi connetterti da qualsiasi luogo alla macchina dietro il router con "ssh -p 10002 public_ip" –

+0

per favore accetta la risposta se sta funzionando per te, o descrivi dove si trova il tuo problema. –

5

Come lei ha detto che dobbiamo "macchina di destinazione" (dove ci Wanto di connettersi a ssh), "macchina mezzo" (server pubblico lavorando come spedizioniere), "altri computer" (qualsiasi altro computer in rete)

Come @ thomas-Oster detto è necessario utilizzare

[destination computer] $ ssh -R 2222:localhost:22 ip_of_public_server 

Tuttavia, al fine per il tunnel di legarsi al 0.0.0.0, invece di localhost, è necessario utilizzare GatewayPorts in/etc/ssh/sshd_config sulla "macchina centrale" (server pubblico):

GatewayPorts yes 

Ovviamente è necessario riavviare sshd dopo aver aggiunto questa opzione.

Leggi http://www.snailbook.com/faq/gatewayports.auto.html per una spiegazione: "di SSH di default in ascolto solo per le connessioni alla porta inoltrato sul indirizzo di loopback"

questo vi permetterà di connettersi da qualsiasi computer in rete al computer di destinazione utilizzando il IP del computer centrale (server pubblico):

[any computer on the net] $ ssh -p 2222 ip_of_public_server 

Verificare che il firewall sul server pubblico permette connessioni sulla porta 2222/TCP.

1

Recentemente sono incappato nello stesso problema, ma senza avere i privilegi di root sul server SSH.

Come indicato, GatewayPorts yes è necessario in modo che anche i client dalla rete siano in grado di connettersi alla porta di inoltro remoto sul server SSH.Per impostazione predefinita è impostato su no. Pertanto, se non si dispone dei privilegi di root, non è possibile modificare le impostazioni SSHD per impostare l'opzione GatewayPorts su true. Ma in questo caso è possibile utilizzare la seguente soluzione:

ssh -R 4041:localhost:22 myserver.com 'socat TCP-LISTEN:4040,fork TCP:127.0.0.1:4041' 

socat è un programma di utilità di rete grande che lega una porta TCP 4040 sull'interfaccia 0.0.0.0 quindi è visibile dalla rete e reindirizza tutto il traffico al 127.0.0.1:4041 dove SSHD è in ascolto e reindirizzarlo alla porta del tuo cliente 22.

Quindi se qualcuno vuole collegare lo SSH locale sulla porta 22 come hai descritto (sul client) che fa:

ssh -p 4040 myserver.com 

e funziona in questo modo:

SSH client --> myserver.com:4040 (socat) --> 127.0.0.1:4041 (myserver.com, SSHD) --> SSH client port 22

socat può essere costruito da fonti o già installato sul sistema. È presente nei repository RPMForge per RHEL/CentOS (tuttavia se non si dispone dei privilegi di root non è possibile installarlo).

Problemi correlati