Transfere uma conexão TCP de uma caixa do Linux para outra por trás do NAT?

3

Embora tenha uma taxa de download extremamente lenta em uma das minhas conexões HTTP, achei que seria interessante transferir a conexão do meu PC para um servidor doméstico que economiza energia e compartilha o mesmo endereço IP externo.

Do jeito que eu imagino, gostaria de executar um comando que assumiria a conexão de um IP e de uma porta específica, permitindo que eu enviasse todos os dados que chegam através dele para um arquivo sem permitir que o proprietário original de a conexão para fechá-lo.

Já existem ferramentas para isso?

    
por d33tah 31.05.2013 / 01:47

3 respostas

1

Isso não faz sentido na maioria dos casos. Anule o download, copie o que já foi baixado para o servidor e use wget para retomar o download.

    
por 31.05.2013 / 02:15
1

Não creio que isso seja possível devido aos fundamentos de como funciona uma conexão TCP / IP, além do firewall NAT, permitindo que você compartilhe seu endereço IP externo entre vários computadores em sua LAN. Dito isto, há algumas dicas / truques que podem ajudar, você entende como eles funcionam.

Dica # 1 - tela / tmux

Normalmente, o que eu faço é se eu tiver um arquivo grande para fazer o download, vou ssh para outro computador na minha rede e execute o screen / tmux lá. Com uma sessão screen / tmux, posso executar programas de longa duração (como um download) em um terminal sem que eles parem quando eu desconectar a conexão ssh desta máquina secundária.

O padrão é assim:

laptop$ ssh remotemachine

...login...

remote$ screen -S mydownload

...now have a screen session called "mydownload"...

remote$ wget http://www.bigfiles.com/somebigfile

...Ctrl+A Ctrl+D.... <--- (disconnect from screensession)

...a little while later...

laptop$ ssh remotemachine
remote$ screen -r mydownload

...wget is still running in here...

Dica # 2 - xdg-open

Este programa permite que você execute arquivos e / ou URLs através do aplicativo preferido. Por exemplo, configurei o Firefox em uma máquina remota na minha LAN para que ele tenha uma associação para o manipulador 'magnet: //'. Com isso na máquina remota, posso executar comandos como este:

ssh remotemachine "DISPLAY=:0.0; xdg-open magnet://url_of_magnet_link...."

No meu laptop, ele acionará minha máquina remota para iniciar o download desse link magnético pelo Firefox, que então passará a URL para o aplicativo associado ao manuseio dos links magnet: //. Neste caso, estou usando o Vuze para fazer o manuseio.

Se você está curioso para saber como configurar o Firefox para fazer isso, escrevi sobre isso no meu blog há algum tempo. Os artigos intitulados: [one-liner]: Como obter o Firefox 10.x para iniciar um cliente BitTorrent através de um link Magnet no Linux .

    
por 31.05.2013 / 02:34
0

De uma perspectiva IP, TCP e NAT, isso é definitivamente possível. Eu posso imaginar o servidor assumir o endereço IP dos PCs. Eu também posso imaginar o kernel Linux do servidor preparar uma transferência de conexão, inicializando as estruturas de dados de soquete necessárias e bloco de controle de protocolo. A transferência de conexão real exigiria alguma coordenação entre os dois kernels do Linux.

E, de fato, existe uma abordagem promissora: TCP Connection Passing . Ele consiste em um patch de kernel que estende a API de soquete para passagem de conexão e um conjunto de ferramentas para iniciar a passagem. Essa abordagem leva em conta o papel da camada de aplicativos.

A coisa é: uma conexão TCP também envolve um estado de aplicativo compartilhado entre as duas extremidades. Ambas as extremidades esperam que o outro aja de acordo com esse estado. Então, se você substituir uma extremidade por alguma entidade genérica que apenas suga os dados, não respondendo nada, corre o risco de quebrar o estado (e, portanto, a conexão) apenas por não se comportar corretamente. Isso pode não ser um problema para o cenário descrito, mas limita a aplicabilidade do esquema de passagem de conexão genérico que você tem em mente. Então, não, eu não acho que tal coisa exista, mas o TCP Connection Passing é um bom começo. Você pode adaptá-lo às suas necessidades.

    
por 29.06.2013 / 16:59

Tags