Respuestas:
Esta pequeña guía le dice cómo enviar tráfico UDP a través de SSH utilizando herramientas que vienen de manera estándar (ssh, nc, mkfifo) con la mayoría de los sistemas operativos tipo UNIX.
Realización de túneles UDP a través de una conexión SSH
Paso a paso Abra un puerto de reenvío TCP con su conexión SSH
En su máquina local (local), conéctese a la máquina distante (servidor) por SSH, con la opción adicional -L para que SSH con puerto TCP adelante:
local# ssh -L 6667:localhost:6667 server.foo.com
Esto permitirá que las conexiones TCP en el número de puerto 6667 de su máquina local se reenvíen al número de puerto 6667 en server.foo.com a través del canal seguro. Configure el reenvío de TCP a UDP en el servidor
En el servidor, abrimos una escucha en el puerto TCP 6667 que reenviará los datos al puerto UDP 53 de una IP especificada. Si desea reenviar DNS como yo, puede tomar la IP del primer servidor de nombres que encontrará en /etc/resolv.conf. Pero primero, necesitamos crear un fifo. El fifo es necesario para tener comunicaciones bidireccionales entre los dos canales. Una tubería de shell simple solo comunicaría la entrada estándar del proceso izquierdo al proceso estándar.
server# mkfifo /tmp/fifo
server# nc -l -p 6667 < /tmp/fifo | nc -u 192.168.1.1 53 > /tmp/fifo
Esto permitirá que el tráfico TCP en el puerto 6667 del servidor se reenvíe al tráfico UDP en el puerto 53 de 192.168.1.1 y que las respuestas regresen. Configure UDP hacia adelante TCP en su máquina
Ahora, tenemos que hacer lo contrario de lo que se hizo arriba en la máquina local. Necesita acceso privilegiado para enlazar el puerto UDP 53.
local# mkfifo /tmp/fifo
local# sudo nc -l -u -p 53 < /tmp/fifo | nc localhost 6667 > /tmp/fifo
Esto permitirá que el tráfico UDP en el puerto 53 de la máquina local se reenvíe al tráfico TCP en el puerto 6667 de la máquina local. Disfrute de su servidor DNS local :)
Como probablemente haya adivinado ahora, cuando se realice una consulta DNS en la máquina local, por ejemplo, en el puerto UDP local 53, se reenviará al puerto TCP local 6667, luego al puerto TCP 6667 del servidor, luego al servidor DNS del servidor , Puerto UDP 53 de 192.168.1.1. Para disfrutar de los servicios DNS en su máquina local, coloque la siguiente línea como primer servidor de nombres en su /etc/resolv.conf:
nameserver 127.0.0.1
Este ejemplo (creo que la respuesta de John señala lo mismo en un lugar diferente), describe cómo acceder a los servicios UDP / DNS de otra máquina a través de una conexión TCP / SSH.
Reenviaremos el tráfico UDP / 53 local a TCP, luego el tráfico TCP con el mecanismo de reenvío de puertos de SSH a la otra máquina, luego TCP a UDP / 53 en el otro extremo.
Por lo general, puedes hacerlo con openvpn.
Pero aquí, lo haremos con herramientas más simples, solo openssh y netcat.
Al final de esa página, hay otro comentario con una referencia a ' socat
',
Se realiza el mismo acceso UDP / DNS con,
Lado del servidor:
socat tcp4-listen:5353,reuseaddr,fork UDP:nameserver:53
Lado del cliente:socat udp4-listen:53,reuseaddr,fork tcp:localhost:5353
Consulte los ejemplos de socat para obtener más información.
ssh orig_strm_src socat udp4-listen:4003,reuseaddr,fork STDOUT| socat STDIN udp-sendto:localhost:4003
SSH (al menos OpenSSH) tiene soporte para VPN simples. Usando la opción -w
o Tunnel
en el ssh
cliente, puede crear un tun
dispositivo en ambos extremos, que puede usarse para reenviar cualquier tipo de tráfico IP. (Consulte también Tunnel
en la página del manual de ssh_config(5)
). Tenga en cuenta que esto requiere OpenSSH (y probablemente privilegios de root) en ambos extremos.
ip tuntap add
.
tun
dispositivo de la siguiente manera: sudo ip tuntap add mode tun
pero cuando alguna vez utilicé la -w
opción como esta: ssh $Server -w $port
obtengo Tunnel device open failed. Could not request tunnel forwarding.
¿Qué estoy haciendo mal?
O simplemente puede usar ssf (que fue diseñado para manejar este caso de uso), con un comando simple:
Lado del cliente:
#>./ssfc -U 53:192.168.1.1:53 server.foo.com
Este comando redirige el puerto local 53 (dns) al puerto 53 192.168.1.1, a través de un túnel seguro entre localhost y server.foo.com.
Necesitará un servidor ssf (en lugar de - o al lado de - su servidor ssh):
#>./ssfs
Por cierto, tanto el lado del cliente como del servidor de ssf funcionan en Windows / Linux / Mac. Esta es una aplicación de usuario, por lo que no necesita tun / tap o VPN.
Para redirigir el puerto 53, necesitará privilegios administrativos, independientemente de la herramienta que esté utilizando.
Para obtener más información, detalles, casos de uso o descargas: https://securesocketfunneling.github.io/ssf/
No pude nc
trabajar para SNMP, porque los clientes SNMP siguen eligiendo un nuevo puerto UDP de origen, y varios pueden estar activos a la vez.
En cambio, he escrito una publicación que describe cómo hacerlo socat
en esta publicación de blog , utilizando SNMP como ejemplo. Esencialmente, usando dos terminales, comenzando con una descripción general:
Terminal uno:
client$ ssh -L 10000:localhost:10000 server
server$ socat -T10 TCP4-LISTEN:10000,fork UDP4:switch:161
Esto crea el reenvío SSH del puerto TCP 10000 y ejecuta socat en el servidor. Observe cómo la dirección IP del conmutador se menciona en la línea de comando socat como "conmutador".
Terminal dos:
client$ sudo socat UDP4-LISTEN:161,fork TCP4:localhost:10000
Eso configura socat en el cliente. Deberias hacer eso.