Qual è la differenza tra l'inoltro IP locale e remoto?


10

Qual è la differenza di funzionalità tra i due? Ne sono un po 'confuso.

L'inoltro locale rende disponibile localmente una porta remota.

L'inoltro remoto rende disponibile una porta locale in remoto.

Ma questa "disponibilità" funzionerà in entrambe le direzioni ... o lo fa?

Ad esempio il seguente (rilasciato da un host 'home')

ssh -R 1234:localhost:2345 user@work

Ciò stabilirà un tunnel sicuro tra work :: 1234 e home :: 2345, giusto?

Se inserisco qualcosa da un lato, verrà fuori dall'altro.

Ma poi, posso ottenere lo stesso risultato dalla seguente chiamata dall'host "lavoro":

ssh -L 1234:localhost:2345 user@home

Quindi, l'unica differenza è da dove lo chiamo, giusto?


Nel tuo esempio non c'è differenza nella funzionalità. In un certo senso si compensa automaticamente l'utilizzo dell'argomento opposto scambiando gli host di destinazione. Hai avuto non fatto questo e utilizzato entrambi dall'interno 1 host singolo - sarebbe già innescare un comportamento completamente opposto.
XXL

Risposte:


2

La principale differenza pratica è che se si collegano 2 computer A e B, e B si trova dietro un firewall o un router NAT che non si controlla, e sta bloccando la ricezione. Si è seduti su A. Non è possibile ottenere A connettersi a B. Ma B non bloccherà le chiamate in uscita. Quindi ottieni B per connetterti ad A.

- chiarimento aggiunto--

Quanto sopra, che l'interrogatore ha capito ... significa la principale differenza pratica tra l'inoltro locale e remoto. ssh -L e ssh -R quando li useresti. Non stavo commentando i comandi di esempio specifici che ha dato, dove cambia -L e -R e a quale server sshd si connette. Ma ora cercherò di commentarlo .. Con i comandi ssh che ha dato, dal punto di vista del client normale e del server normale, non sembra esserci alcuna differenza, in quanto non dice "ah questo è un client ssh e questo è un server ssh .. "non conosce ssh, e qual è l'aspetto client / server di ssh è irrilevante e sconosciuto anche al client normale e al server normale. A loro importa solo chi sta ascoltando e, dal loro punto di vista, sembra lo stesso. Il computer di lavoro è in ascolto e il 1234. Non notate che in un caso è un server ssh s.exe e nell'altro caso è un client ssh.exe, ssh. A proposito, dove si trova il client ssh, è considerato locale.


ok, grazie, ha risposto esattamente alla mia domanda! :-)
nandaloo

@nandaloo Penso che sia chiamato un tunnel SSH inverso. Se usiamo l'iniziatore e il listener inventati (perché questi termini sono meno ambigui di client e server). L'idea è che hai il tuo iniziatore e ascoltatore regolari e il tuo iniziatore e ascoltatore ssh. Non puoi scegliere dove sono il tuo iniziatore e ascoltatore regolari. ad es. il server HTTP (listener normale) è su B. B è dietro un firewall. A ha il client HTTP (iniziatore regolare). Metti il ​​tuo iniziatore SSH su B. Vedi con un tunnel inverso l'iniziatore e il listener SSH, sono su computer opposti al normale iniziatore e listener.
barlop

10

Sì, se lo capisco correttamente, il port forwarding locale da a a b dovrebbe essere identico al port forwarding remoto da b a a (e viceversa). Un tunnel in uscita da a a b (visto da a) dovrebbe essere uguale a un tunnel in arrivo da a a b (visto da b).

Il port forwarding locale crea un tunnel in uscita che può essere utilizzato per portare un computer Internet pubblico sul computer locale. Un utente locale può accedere a un host remoto: combinazione di porte su un host locale, poiché la porta specificata sull'host locale (client) viene inoltrata all'host dato e porta sul lato remoto:

ssh -L local_port:remote_host:remote_port user@hostname

Il port forwarding remoto crea un tunnel in entrata che può essere utilizzato per portare un computer locale in Internet pubblico. Un utente di Internet può accedere a un determinato host locale: combinazione di porte su un host remoto. La porta specificata sull'host remoto (server) viene inoltrata all'host e alla porta indicati sul lato locale:

ssh -R local_port:remote_host:remote_port user@hostname

1
Suppongo che un'altra differenza, oltre alla sintassi, sia il processo che ascolta la connessione dell'utente. ssh.exe -L dice a ssh.exe di ascoltare (oltre alla connessione in uscita che sta già effettuando). ssh.exe -R dice a sshd.exe di ascoltare (oltre all'ascolto che sta già facendo).
barlop

@ 0x4a6f4672, che cosa 0x4a6f4672significa?
Pacerier,

@Pacerier solo le mie iniziali "JoFr" in notazione esadecimale :-)
0x4a6f4672

3

Con il port forwarding locale, l'utente (client) apre un socket di ascolto sul computer e collega il client del protocollo a livello di applicazione a questo socket. Ora la connessione viene inoltrata tramite SSH al server. Il server si collega all'host remoto e esegue il tunneling dei dati dal client del protocollo alla destinazione finale.

Con il port forwarding remoto il server apre un socket di ascolto sull'host del server. Alcune applicazioni remote si connettono a questo host e inviano informazioni che vengono trasferite sul computer client. Qui viene stabilita la connessione alla destinazione finale (alcuni server di protocollo a livello di applicazione in esecuzione sul computer o sulla rete) e i dati vengono trasferiti dall'applicazione remota alla destinazione finale.


grazie, ciò ha reso più chiaro il funzionamento del port forwarding. E grazie per aver spostato la domanda - non sapevo nemmeno di questo sito superutente :-)
nandaloo

1

Questo è meglio compreso con piccoli esempi. In questi esempi le connessioni sono strutturate in questo modo:

Server locale - (LAN) - Terminale ----- (SSH, solitamente via Internet) ----- Endpoint tunnel - (LAN) - Macchina remota

Si utilizza il port forwarding locale se si desidera eseguire il tunneling verso una determinata macchina / porta remota, raggiungibile dall'endpoint del tunnel a cui si ha accesso ssh. Pertanto, la porta di quella macchina remota è accessibile anche localmente sul proprio terminale, ovvero http: // localhost: terminal_port /.

Ciò viene fatto utilizzando la sintassi seguente:

ssh -L terminal_port:remote_machine_ip:remote_service_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

È possibile utilizzare il port forwarding remoto se si desidera abilitare QUALSIASI telecomando (!) , Che è in grado di raggiungere la porta di ascolto dell'endpoint del tunnel per poter accedere in remoto a un'ip / porta nella LAN locale. Al tuo server locale, sembra che la connessione dal computer remoto sia avviata dal terminale.

La sintassi è:

ssh -R tunnel_endpoint_listen_port:local_server_ip:local_server_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

0

La manpage per socat lo chiarisce molto bene. Sì, so che ssh e socat sono due cose completamente diverse, ma la documentazione di socat è molto buona.

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.