Respostas:
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.
Encaminharemos o tráfego UDP / 53 local para o TCP, depois o tráfego TCP com o mecanismo de encaminhamento de porta do SSH para a outra máquina e, em seguida, o TCP para o UDP / 53 na outra extremidade.
Normalmente, você pode fazer isso com o openvpn.
Mas aqui, faremos isso com ferramentas mais simples, apenas openssh e netcat.
No final dessa página, há outro comentário com uma referência a ' socat
',
O mesmo acesso UDP / DNS é feito com,
Lado do servidor:
socat tcp4-listen:5353,reuseaddr,fork UDP:nameserver:53
Lado do cliente:socat udp4-listen:53,reuseaddr,fork tcp:localhost:5353
Consulte exemplos sociais para mais.
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
ou Tunnel
no ssh
cliente, você pode criar um tun
dispositivo nas duas extremidades, que pode ser usado para encaminhar qualquer tipo de tráfego IP. (Veja também Tunnel
na página de manual de ssh_config(5)
.) Observe que isso requer o OpenSSH (e provavelmente privilégios de root) nas duas extremidades.
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 entendi Tunnel 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:
#>./ssfc -U 53:192.168.1.1:53 server.foo.com
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):
#>./ssfs
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/
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:
client$ ssh -L 10000:localhost:10000 server
server$ socat -T10 TCP4-LISTEN:10000,fork UDP4:switch:161
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:
client$ sudo socat UDP4-LISTEN:161,fork TCP4:localhost:10000
Isso configura o socat no cliente. Isso deve resolver.