Este pequeno guia mostra como enviar tráfego UDP via SSH usando ferramentas que são padrão (ssh, nc, mkfifo) com a maioria dos sistemas operacionais do tipo UNIX.
Executando o tunelamento UDP através de uma conexão SSH
Passo a passo Abra uma porta de encaminhamento TCP com sua conexão SSH
Na sua máquina local (local), conecte-se à máquina distante (servidor) pelo SSH, com a opção -L adicional para que o SSH com encaminhamento de porta TCP:
local# ssh -L 6667:localhost:6667 server.foo.com
Isso permitirá que as conexões TCP na porta 6667 da sua máquina local sejam encaminhadas para a porta 6667 em server.foo.com através do canal seguro. Configure o encaminhamento de TCP para UDP no servidor
No servidor, abrimos um ouvinte na porta TCP 6667 que encaminhará os dados para a porta UDP 53 de um IP especificado. Se você deseja fazer o encaminhamento de DNS como eu, pode pegar o IP do primeiro servidor de nomes que encontrará em /etc/resolv.conf. Mas primeiro, precisamos criar um fifo. O fifo é necessário para ter comunicação bidirecional entre os dois canais. Um pipe de shell simples comunicaria apenas a entrada padrão 'saída padrão para processo direito' do processo esquerdo.
server# mkfifo /tmp/fifo
server# nc -l -p 6667 < /tmp/fifo | nc -u 192.168.1.1 53 > /tmp/fifo
Isso permitirá que o tráfego TCP na porta 6667 do servidor seja encaminhado para o tráfego UDP na porta 53.1 192.168.1.1 e as respostas retornem. Configure o encaminhamento UDP para TCP na sua máquina
Agora, precisamos fazer o oposto do que foi feito na parte superior da máquina local. Você precisa de acesso privilegiado para ligar a porta UDP 53.
local# mkfifo /tmp/fifo
local# sudo nc -l -u -p 53 < /tmp/fifo | nc localhost 6667 > /tmp/fifo
Isso permitirá que o tráfego UDP na porta 53 da máquina local seja encaminhado para o tráfego TCP na porta 6667 da máquina local. Aproveite o servidor DNS local :)
Como você provavelmente já adivinhou agora, quando uma consulta DNS será realizada na máquina local, por exemplo, na porta UDP local 53, ela será encaminhada para a porta TCP local 6667, para a porta TCP do servidor 6667 e para o servidor DNS do servidor. , Porta UDP 53 de 192.168.1.1. Para aproveitar os serviços DNS em sua máquina local, coloque a seguinte linha como primeiro servidor de nomes em seu /etc/resolv.conf:
nameserver 127.0.0.1
Este exemplo (acho que a resposta de John aponta a mesma coisa para outro local) descreve como acessar os serviços UDP / DNS de outra máquina através de uma conexão TCP / SSH.
No final dessa página, há outro comentário com uma referência a '
socat
',O mesmo acesso UDP / DNS é feito com,
Consulte exemplos sociais para mais.
fonte
ssh orig_strm_src socat udp4-listen:4003,reuseaddr,fork STDOUT| socat STDIN udp-sendto:localhost:4003
O SSH (pelo menos o OpenSSH) tem suporte para VPNs simples. Usando a opção
-w
ouTunnel
nossh
cliente, você pode criar umtun
dispositivo nas duas extremidades, que pode ser usado para encaminhar qualquer tipo de tráfego IP. (Veja tambémTunnel
na página de manual dessh_config(5)
.) Observe que isso requer o OpenSSH (e provavelmente privilégios de root) nas duas extremidades.fonte
ip tuntap add
.tun
dispositivo da seguinte maneira:sudo ip tuntap add mode tun
mas sempre que uso a-w
opção assim:ssh $Server -w $port
eu entendiTunnel device open failed. Could not request tunnel forwarding.
O que estou fazendo de errado?Ou você pode simplesmente usar ssf (que foi projetado para lidar com este caso de uso), com um comando simples:
Lado do cliente:
Este comando redireciona a porta local 53 (dns) para a porta 192.168.1.1 53, através de um túnel seguro entre localhost e server.foo.com.
Você precisará de um servidor ssf (em vez de - ou ao lado de - seu servidor ssh):
A propósito, o cliente e o servidor do ssf funcionam no Windows / Linux / Mac. Este é um aplicativo da área de usuário, portanto você não precisa de tun / tap ou VPN.
Para redirecionar a porta 53, você precisará de privilégios administrativos - independentemente da ferramenta que está usando.
Para obter mais informações, detalhes, caso de uso ou download: https://securesocketfunneling.github.io/ssf/
fonte
Não pude
nc
trabalhar no SNMP, porque os clientes SNMP continuam escolhendo uma nova porta UDP de origem e vários podem estar ativos ao mesmo tempo.Em vez disso, escrevi uma postagem descrevendo como fazê-la
socat
nesta postagem de blog , usando o SNMP como exemplo. Essencialmente, usando dois terminais, começando com uma visão geral:Terminal um:
Isso cria o encaminhamento SSH da porta TCP 10000 e executa socat no servidor. Observe como o endereço IP do comutador é mencionado na linha de comando socat como "comutador".
Terminal dois:
Isso configura o socat no cliente. Isso deve resolver.
fonte
Uma VPN é uma solução melhor se você tiver acesso a uma porta UDP.
Se você tiver acesso apenas à porta TCP SSH, um túnel SSH será tão bom quanto uma VPN, pelo menos para retorno de ping e pacote.
fonte