Eu tenho um servidor de desenvolvimento, que só é acessível a partir de 127.0.0.1:8000, não 192.168.1.x: 8000. Como um hack rápido, existe uma maneira de configurar algo para escutar em outra porta (por exemplo, 8001) para que, a partir da rede local, eu possa conectar 192.168.1.x: 8001 e encapsular o tráfego entre o cliente e o 127.0 .0.1: 8000?
networking
tcp
tunneling
port-forwarding
waitinforatrain
fonte
fonte
Respostas:
Usar ssh é a solução mais fácil.
Isso encaminha a porta local 8001 em sua estação de trabalho para o endereço localhost na remote-server.com porta 8000.
-g
significa permitir que outros clientes na minha rede se conectem à porta 8001 na minha estação de trabalho. Caso contrário, apenas clientes locais em sua estação de trabalho poderão se conectar à porta encaminhada.-N
significa que tudo o que estou fazendo é encaminhar portas, não inicie um shell.-f
significa entrar em segundo plano depois de uma conexão e login SSH bem-sucedidos.A porta 8001 permanecerá aberta para muitas conexões, até que o ssh morra ou seja morto. Se você estiver no Windows, o excelente cliente SSH PuTTY também poderá fazer isso. Use 8001 como a porta local e localhost: 8000 e o destino e adicione um encaminhamento de porta local nas configurações. Você pode adicioná-lo após uma conexão bem-sucedida com o PuTTY.
fonte
[email protected]
faz? Definitivamente, não é necessário o encaminhamento de porta, no entanto, o ssh exige que esse argumento, mais ainda, tente se conectar a ele. E ao definir essa opção traquina para nome de host que ela gera…port 22: Connection refused
(não, eu não usei a porta 22) . A menos que esteja faltando alguma coisa, o comando claramente não funciona.[email protected]
é apenas um exemplo e você não deve interpretar isso literalmente. É necessário substituí-lo por um nome de computador ao qual você deseja se conectar e seu nome de usuário neste computador. Esta informação é necessária para estabelecer a conexão ssh. Somente após o estabelecimento da conexão ssh, as portas podem ser encaminhadas por essa conexão.-N
não significa que não há conexão SSH. Simplesmente significado not execute a remote command
(veja a página de manual ). O<user>@<host>
argumento é necessário, porque este faz abrir uma conexão SSH para<host>
(o que para o caso de OP serialocalhost
), e encaminha a porta desejada através desse túnel SSH. É uma solução para o problema do OP, mas não a mais simples. Para encaminhar para localhost sem o uso de ssh, você pode usarsocat
ounetcat
como em StephaneChazelas e 's not-a-user respostasCom
socat
no servidor:Por padrão,
socat
escutará na porta TCP 8001 em qualquer endereço IPv4 ou IPv6 (se suportado) na máquina. Você pode restringi-lo ao IPv4 / 6 substituindotcp-listen
portcp4-listen
outcp6-listen
ou para um endereço local específico adicionando a,bind=that-address
.O mesmo para o soquete de conexão ao qual você está executando o proxy, você pode usar qualquer endereço no lugar de
localhost
e substituirtcp
portcp4
outcp6
se desejar restringir a resolução do endereço aos endereços IPv4 ou IPv6.Note-se que para o servidor escuta na porta 8000, a conexão aparecerá como provenientes do proxy (no caso de
localhost
, que serálocalhost
), e não o cliente original. Você precisaria usar abordagens DNAT (mas que requerem privilégios de superusuário) para que o servidor possa saber quem é o cliente.fonte
range
etcpwrap
nasocat
página de manual).Usar o tradicional
nc
é a solução mais fácil:Esta versão do
nc
está nonetcat-traditional
pacote no Ubuntu. (Você precisaupdate-alternatives
ou chamanc.traditional
.)Observe que, ao contrário do ssh, isso não é criptografado. Lembre-se disso se você o usar fora de um host.
fonte
netcat-openbsd
?netcat
a versão que está incluído nobusybox
:nc -v -lk -p 8001 -e /usr/bin/nc 127.0.0.1 8000
. ( Descrição dos parâmetros )nc
comando termina após a primeira conexão remota. Adicione-k
se você precisar mantê-lo em execução.nc: cannot use -p and -l
no CentOS 6.4. Existe uma solução alternativa?O OpenBSD netcat está disponível por padrão no Linux e também no OS X.
OSX:
Linux:
Uma alternativa que funciona no bash do OS X é usar um tubo bidirecional . Pode funcionar em outros Unixes:
fonte
ss -tan
ounetstat -tan
.Citando um David Spillett 's resposta em ServerFault
É um binário simples que pega um arquivo de configuração no formato
bindaddress bindport connectaddress connectport
Por exemplo:
192.168.1.1 8001 127.0.0.1 8000
ou
0.0.0.0 8001 127.0.0.1 8000
se você deseja vincular a porta de entrada a todas as interfaces.
fonte
fonte
dport
, comonc -v localhost 2345
estou recebendoConnection refused
. Eu não sou muito bom em iptables, mas acho que o dport precisa ter um aplicativo de escuta.Com base na resposta de Mark A. , tive que fazer um pequeno ajuste para que ele funcionasse no meu Mac (pelo menos no macOS Mojave versão 10.14.4)
Essa declaração printf parece ser crucial. Caso contrário, o comando netcat para conectar-se à porta 8000 nunca tentará realmente se conectar, e o comando netcat para escutar na porta 8001 nunca escutará na porta 8001. Sem o printf, sempre que eu tentasse conectar-me à porta 8001, obteria Ligação recusada.
Minha suposição é que o netcat deve de alguma forma bloquear o stdin (talvez esteja tentando lê-lo por algum motivo) antes de realmente executar qualquer operação do soquete. Como tal, sem a instrução printf escrevendo para fifo a, o comando netcat nunca começará a escutar na porta 8001.
Nota: eu teria deixado uma resposta na postagem de Mark, mas ainda não tenho reputação.
fonte
Esta é uma nova maneira de encapsular duas portas udp no servidor: https://github.com/9crk/udpeer
udpeer 8001 8002
Testar:
fonte