ssh attraverso un router senza port forwarding


11

Ho un server Linux e voglio inserirlo in una rete domestica dietro un router. Ho bisogno di ssh su questo server qualche volta dall'esterno, ma non voglio impostare il port forwarding perché non ho accesso al router e non conosco neanche l'ip del router.

Quello che posso fare è inserire un programma nel server Linux, quindi quando è connesso a Internet, invierà costantemente dati all'altro mio server online, quindi ne conosco l'indirizzo IP. Ma c'è un modo per inviare ssh al server dietro il router dall'esterno? qualcosa come NAT o socket che mantiene la connessione di rete?

molte grazie

Risposte:


24

Quello che vorresti fare è ssh DAL "server Linux" A qualcosa all'esterno, come "my_other_server" o qualcos'altro che entrambi i server possono raggiungere.

Si userebbe il port forwarding remoto ssh.
[user@linux_server]$ ssh -R8022:localhost:22 my_other_server.com
Spiegazione: connettiti a my_other_server e apri la porta 8022 lì che mi inoltrerà sulla porta 22.

Da my_other_server.com sarai in grado di inviare ssh a localhost sulla porta 8022 e avere il tuo traffico inoltrato a piggybacking linux_server sul linux_server -> spiegazione del tunnel [user@linux_server]$ ssh -p8022 localhost
my_other_server: connettiti a me stesso sulla porta 8022 che viene inoltrata a linux_server

Se hai problemi con il linux_server iniziale -> my_other_server che cade, puoi creare uno script per tenerlo aperto, regolare le impostazioni keepalive o usare autossh.


1
Grazie, funziona alla grande! Voglio usare lo script per tenerlo aperto. L'altra domanda è: se avessi 1000 di questi "server linux" e un solo "mio_altro_server", potrei scrivere a qualcuno di loro in questo modo? Presumo che tutti abbiano bisogno di porte diverse e c'è un modo migliore per farlo?
Jiechao Li,

Bene dipende. Ora che sei su linux_server, potresti semplicemente ssh su linux_server2 e linux_server3 da lì? Sarebbe il più semplice. Quindi sì, potresti farlo più volte, invece di usare 8022 dovresti usare 8023, 8024. Se segui quel percorso, crea un file ~ / .ssh / config su "my_other_server" che contiene tutti i numeri di porta, quindi devi solo ssh [alias] invece di ssh [port] localhost. Questo diventerà ingombrante.
MattPark,

1
È possibile configurarlo con solo due macchine? Collega B ad A, da A a B attraverso se stesso?
adamyonk,

1
L'ho appena fatto. Può confermare che funziona. \ o /
adamyonk,

Sì amico --- ovviamente l'hai capito. Puoi usare qualcosa di simile autosshper tenerlo aperto.
MattPark,

3

È possibile utilizzare una sorta di VPN per farlo funzionare, ma richiederebbe un server a cui il server inaccessibile possa accedere. Quindi puoi configurare OpenVPN sul server, sul PC e sul server firewall, abilitare client-to-cliente il gioco è fatto. http://openvpn.net/howto.html


Grazie. Sto esaminando questo, ma sembra un po 'complicato. Se capisco correttamente, devo installare OpenVPN su entrambi i server in modo che possano comunicare senza configurare il router, giusto?
Jiechao Li,

Esattamente. Si configura un server come "server", quindi i due client da connettere come "client" nella configurazione. Tuttavia, l'SSH inverso annotato sopra sembra essere più facile per te.
Nathan C,

2

Questa risposta si basa su quella accettata, ma aggiungendo i dettagli che mi hanno permesso di farlo. Mi scuso per la spiegazione pedonale, dal momento che questa non è affatto la mia esperienza.

Supponiamo di avere due computer Ae B. Si desidera sshda Aa B, e non è possibile eseguire alcun port forwarding nei router ad essi collegati.

Come afferma la risposta accettata, è necessario un server Sper fare ciò: nel computer B, consentirai sshconnessioni provenienti da S; e dal computer A, accederai a quel tunnel Sper raggiungerlo B.

Ma come si ottiene quel server S? Ho trovato serveo(link: https://serveo.net/ ). È di uso molto semplice. Non è necessario installare nulla o registrarsi ed è gratuito. Secondo il sito Web, i passaggi da seguire sono:

  1. Pensa a un alias per computer B. Ad esempio computer_B_alias,.

  2. Nel computer B, esegui ssh -R computer_B_alias:22:localhost:22 serveo.net.

  3. Ora puoi accedere al computer Bdal computer Aeseguendo quanto segue in computer A:, ssh -J serveo.net user@computer_B_aliasdove devi sostituire useril nome dell'utente nel computer B.

PS: Naturalmente, il punto 2 diventa un'attività automatica all'avvio del computer B.

PSS: prima di provare questo, assicurarsi che sshsia installato in entrambi i computer. Per Ubuntu, sudo apt-get install sshfarebbe il lavoro.


1

Molto tempo per rispondere. Sperare che possa aiutare qualcuno che sta cercando lo stesso ora.

Se si desidera accedere a un server dietro NAT e non si desidera scrivere codice, è possibile scegliere uno strumento tra quelli di seguito e utilizzare ciò che si adatta alle proprie esigenze.

Entrambi gli strumenti di cui sopra presuppongono che tu abbia accesso alla macchina linux per installare il loro client Alcuni dei loro vantaggi sono:

  • Entrambi ti danno accesso al terminale usando l'interfaccia web
  • Non è necessario un host ssh inverso intermedio per conto proprio.
  • Molto facile da installare
  • Entrambi sono open source

Personalmente preferisco tmate di più in quanto è possibile ospitare il server tmate sul proprio server intermedio (per reverse ssh) mentre teleconsole può connettersi ai propri server solo per reverse ssh.


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.