Qual é a diferença entre o encaminhamento de IP local e remoto?

10

Qual é a diferença de funcionalidade entre os dois? Estou um pouco confuso com isso.

O encaminhamento local disponibiliza uma porta remota localmente.

O encaminhamento remoto disponibiliza remotamente uma porta local.

Mas essa 'disponibilidade' funcionará nas duas direções ... ou funciona?

Por exemplo, o seguinte (emitido a partir de um host 'casa')

ssh -R 1234:localhost:2345 user@work

Isso estabelecerá um túnel seguro entre work :: 1234 e home :: 2345, certo?

Se eu colocar alguma coisa em uma extremidade, ela sairá na outra extremidade.

Mas, então, posso conseguir o mesmo com a seguinte chamada do host 'trabalho':

ssh -L 1234:localhost:2345 user@home

Então, a única diferença é de onde eu chamo, certo?

nandaloo
fonte
No seu exemplo, não há diferença na funcionalidade. Você meio que se compensa pelo uso do argumento oposto trocando hosts de destino. Se você não tivesse feito isso e usado os dois em um único host - isso já provocaria um comportamento completamente oposto.
XXL

Respostas:

2

A principal diferença prática é que, se conectar 2 computadores A e B, e B estiver atrás de um firewall ou roteador NAT que você não controla, e está bloqueando a entrada ... Você está sentado em A. Você não pode obter A para conectar-se a B. Mas B não bloqueia a saída .. Então você faz com que B se conecte a A.

- clarificação adicionada--

O acima exposto, que o questionador entendeu .. significa a principal diferença prática entre o encaminhamento local e o remoto. ssh -L e ssh -R quando você usasse cada um. Eu não estava comentando os comandos de exemplo específicos que ele deu, onde ele alterna -L e -R e a qual servidor sshd ele se conecta. Mas agora tentarei comentar sobre isso. Com os comandos ssh que ele deu, da perspectiva do cliente e do servidor regulares, parece não haver diferença, pois não diz "ah, este é um cliente ssh e este é um servidor ssh .. "ele não conhece ssh, e qual é o aspecto cliente / servidor do ssh é irrelevante e desconhecido para o cliente e servidor regulares também. Eles se preocupam apenas com quem está ouvindo e, da perspectiva deles, parece o mesmo. O computador do trabalho está escutando e em 1234. Eles não observe que, em um caso, é um servidor sshd.exe ssh e, no outro, é um cliente ssh.exe, ssh. A propósito, onde está o cliente ssh, é considerado local.

barlop
fonte
ok, obrigado, que exatamente respondeu minha pergunta! :-)
nandaloo
@nandaloo Eu acho que é chamado de túnel ssh reverso. Se usarmos termos inventados iniciador e ouvinte (porque esses termos são menos ambíguos que cliente e servidor). A idéia é que você tenha seu iniciador e ouvinte regular e seu iniciador e ouvinte ssh. Você não pode escolher onde estão o iniciador e o ouvinte regulares. por exemplo, servidor HTTP (ouvinte regular) está em B. B está atrás de um firewall. A possui o cliente HTTP (iniciador regular). Você coloca o iniciador SSH em B. Veja com um túnel reverso o iniciador e o ouvinte do SSH, em computadores opostos ao iniciador e ao ouvinte regulares.
barlop
10

Sim, se eu entendi direito, o encaminhamento de porta local de a para b deve ser idêntico ao encaminhamento de porta remota de b para a (e vice-versa). Um túnel de saída de a para b (visualizado em a) deve ser igual a um túnel de entrada de a para b (visualizado em b).

O encaminhamento de porta local cria um túnel de saída que pode ser usado para levar um computador público da Internet à máquina local. Um usuário local pode acessar uma combinação host: porta remota em um host local, porque a porta especificada no host local (cliente) é encaminhada para o host e a porta especificados no lado remoto:

ssh -L local_port:remote_host:remote_port user@hostname

O encaminhamento de porta remota cria um túnel de entrada que pode ser usado para trazer um computador local para a Internet pública. Um usuário da Internet pode acessar uma certa combinação de host local: porta em um host remoto. A porta fornecida no host remoto (servidor) é encaminhada para o host e a porta fornecidos no lado local:

ssh -R local_port:remote_host:remote_port user@hostname
0x4a6f4672
fonte
1
Suponho que outra diferença, além da sintaxe, seria o processo que ouve o usuário se conectar. ssh.exe -L diz ao ssh.exe para ouvir (além da conexão de saída que já está sendo feita). ssh.exe -R diz ao sshd.exe para escutar (além da escuta que ele já está fazendo).
barlop
@ 0x4a6f4672, O que 0x4a6f4672significa?
Pacerier
@Pacerier apenas minhas iniciais “JoFr” em notação hexadecimal :-)
0x4a6f4672
3

Com o encaminhamento de porta local, você (o cliente) abre um soquete de escuta no computador e conecta seu cliente de protocolo no nível do aplicativo a esse soquete. Agora a conexão é encaminhada pelo SSH para o servidor. O servidor se conecta ao host remoto e encapsula os dados do seu cliente de protocolo para o destino final.

Com o encaminhamento de porta remota, o servidor abre um soquete de escuta no host do servidor. Alguns aplicativos remotos se conectam a esse host e enviam informações que são transferidas para o seu computador cliente. Aqui, a conexão é estabelecida com o destino final (algum servidor de protocolo no nível do aplicativo em execução no seu computador ou na sua rede) e os dados são transferidos do aplicativo remoto para o destino final.

Callback de Eugene Mayevski
fonte
obrigado, isso tornou mais claro como o encaminhamento de porta funciona. E graças para mover a questão - eu simplesmente nem sabia sobre este site superusuário :-)
nandaloo
1

Isso é melhor compreendido com pequenos exemplos. Nesses exemplos, as conexões são estruturadas da seguinte maneira:

Servidor Local - (LAN) - Terminal ----- (SSH, geralmente via Internet) ----- Tunnel Endpoint - (LAN) - Máquina Remota

Você usa o encaminhamento de porta local se desejar encapsular para uma determinada máquina / porta remota, acessível pelo ponto final do encapsulamento ao qual você tem acesso ssh. Portanto, a porta dessa máquina remota também pode ser acessada localmente em seu próprio terminal, ou seja, http: // localhost: terminal_port /.

Isso é feito usando a seguinte sintaxe:

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

Você pode usar o encaminhamento de porta remota se desejar habilitar QUALQUER UM (!) Remoto, capaz de acessar a porta de escuta do ponto final do túnel para poder acessar remotamente um ip / porta na LAN local. Para o servidor local, parece que a conexão da máquina remota foi iniciada pelo terminal.

A sintaxe é:

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

A página de manual para socat esclarece isso muito bem. Sim, eu sei que ssh e socat são duas coisas completamente diferentes - mas a documentação do socat é simplesmente muito boa.

user400344
fonte