Questão encaminhamento de porta no linux sem raiz ou ssh


Eu queria saber se é possível obter o encaminhamento de porta sem ser root ou ssh.

Atualmente eu faço

ssh -L 20080:othermachine:80 localhost

Usando o ssh você pode obter certos benefícios, como a criação de túneis criptografados, etc. No exemplo acima, eu não faço isso, portanto, usar o ssh parece ser uma sobrecarga desnecessária. Existe uma maneira mais fácil de fazer isso?

Eu suponho que não é tão difícil criar um programa que lê todos os dados em um soquete e os envia para outro e vice-versa. Deve haver alguma ferramenta que faça esse trabalho melhor do que eu posso escrever.


4


origem


Você não precisaria de root para esse exemplo. - Arjan
Acho que deveria ter deixado claro que não tinha um problema em particular. Foi mais que, embora isso funcionasse, eu pensei que deveria haver outras soluções que poderiam ser melhores. (Quanto à parte raiz, eu seria capaz de usar o encaminhamento de porta com iptables, mas isso exigiria raiz.) - BlackShift


Respostas:


Eu também prefiro ssh por causa da criptografia, mas 'socat'deve funcionar bem para você também.


8



Obrigado! Nunca ouvi falar de socat, este programa pode fazer muito mais do que eu esperava. Tenho certeza de que encontrarei mais usos para isso do que apenas o encaminhamento de porta. - BlackShift


Você pergunta: Is there an easier way to do this?  A resposta simples seria "não". O SSH faz o que você precisa, e é um programa bem usado, bem conhecido e muito eficiente, com (eu imagino) muito poucos bugs, está disponível em todas as plataformas que você pode imaginar, e é seguro inicializar. Você não afirma que o desempenho é um problema, então não vejo razão para não usar o SSH pessoalmente.

Se você quiser encaminhar uma porta local para uma porta em uma máquina diferente, precisará de algo que será autenticado nesse host remoto. Isso é SSH. Se você só quer mexer com portas locais, então, como já mencionado, socat pode ser exatamente o que você está procurando.


3



Não havia uma razão específica para não usar o ssh neste momento, mas eu queria ampliar minha coleção de ferramentas, e o socat parece muito poderoso. (akira foi a primeira a propor, então eu verifiquei sua resposta). - BlackShift
btw, três razões quando o ssh não é ideal: 1) não está disponível (como no meu telefone, mas duvido que eu possa instalar o socat lá), 2) no sshd, ou no meu caso uma quantidade limitada de logins permitidos, 3) nenhuma conta na máquina remota (portanto, um túnel criptografado / comprimido não é possível) - BlackShift
Outro caso em que o ssh não é ideal é quando você está movendo grandes quantidades de dados e tem poder de processamento limitado disponível. A carga da CPU imposta pela criptografia do ssh é grande neste caso e também diminui as transferências. Ainda assim, isso não significa que você pode negligenciar a segurança por causa do desempenho, no entanto, em alguns casos, a camada de segurança é desnecessária (como você está se comunicando em uma rede privada) - wojtow


Se o que você está fazendo funciona e você não está vendo nenhum problema de desempenho, eu não mudaria nada. Se você não está transferindo grandes quantidades de dados, isso não deve causar muito impacto. E se você estiver, o ssh pode compactar os dados, para que você ainda possa estar em melhor situação.

O único problema pode estar na latência. Parece que você está tunelando o tráfego HTTP, por isso deve ser insignificante.


1



(Por man ssh: A compactação é desejável em linhas de modem e outras conexões lentas, mas só retardará as coisas em redes rápidas.) - Arjan
Eu vi isso, mas não concordo totalmente. Depende da velocidade da rede, da velocidade da rede e da quantidade de dados que estão sendo movidos. Eu tive uma boa experiência de usá-lo para grandes quantidades de dados (gigabytes) através de redes GigE usando servidores rápidos. - KeithB


Apenas uma nota rápida, parece que ncat que vem com o novo nmap 5 pode fazer coisas parecidas como socat: http://nmap.org/ncat/


1





Qualquer ferramenta que você use: quando não estiver usando o Windows, você sempre (e ) precisa ser executado com privilégios de superusuário ao usar portas privilegiadas ("portas bem conhecidas"). Então: quando usar portas até e incluindo 1023.


0



O encaminhamento para uma porta baixa (que já está escutando) não requer privilégios de superusuário, apenas para a porta de aceitação (que era 10080 no meu exemplo). - BlackShift