ssh -D 1080 abre un proxy SOCKS en el puerto 1080 de tu equipo y reenvía cada conexión a través del servidor SSH, que es quien sale a Internet o a su red interna. Basta configurar el navegador con SOCKS5 en 127.0.0.1:1080 para navegar como si estuvieras en el servidor, con el tramo hasta él cifrado dentro del túnel SSH.

Cómo funciona ssh -D 1080 como proxy SOCKS

La opción -D [bind_address:]port de OpenSSH crea un reenvío dinámico. El cliente escucha en ese puerto local y habla SOCKS4 o SOCKS5. Cuando el navegador pide una web, la petición viaja por la conexión SSH, normalmente al puerto TCP 22, y el servidor abre la conexión final. El destino ve la IP del servidor, no la tuya.

El comando mínimo, sin abrir shell remota:

ssh -D 1080 -N -C [email protected]
  • -D 1080: proxy SOCKS en el puerto local 1080.
  • -N: no ejecuta ningún comando remoto; solo mantiene los reenvíos.
  • -C: comprime el tráfico, útil en enlaces lentos.
  • -f (opcional): pasa ssh a segundo plano tras autenticarse.

Los puertos por debajo de 1024 solo los puede reenviar el superusuario, por eso 1080 es la elección habitual. La referencia completa de flags está en la página man de ssh.

Configurar DynamicForward en ~/.ssh/config para el proxy SOCKS

DynamicForward es el equivalente de -D en el fichero de configuración y acepta la misma sintaxis [bind_address:]port. Así no hay que recordar flags cada vez:

Host proxy-oficina
    HostName servidor.example.com
    User usuario
    Port 22
    IdentityFile ~/.ssh/id_ed25519
    DynamicForward 127.0.0.1:1080
    ExitOnForwardFailure yes
    ServerAliveInterval 30
    Compression yes

Con ese bloque, ssh -N proxy-oficina levanta el túnel. ExitOnForwardFailure yes hace que ssh termine si no puede abrir el puerto 1080, en lugar de dejarte una sesión sin proxy. Recuerda los permisos: ~/.ssh en 700 y la clave privada en 600. Si todavía usas RSA, desde OpenSSH 8.8 la firma ssh-rsa con SHA-1 está desactivada por defecto; una clave Ed25519, admitida desde OpenSSH 6.5, evita el problema.

Configuración del navegador para usar el proxy SOCKS de ssh -D

El navegador debe apuntar a SOCKS5 en 127.0.0.1, puerto 1080, y resolver los nombres a través del proxy. Si el DNS se resuelve en local, los nombres internos del servidor no funcionan y las consultas salen por tu red.

  1. Firefox: Ajustes → Configuración de red → Configuración manual del proxy. Host SOCKS 127.0.0.1, puerto 1080, SOCKS v5 y marca «Proxy DNS al usar SOCKS v5».
  2. Chrome o Chromium: arráncalo con --proxy-server=socks5://127.0.0.1:1080, idealmente con un perfil aparte para no mezclar tráfico.
  3. curl: usa --socks5-hostname, no --socks5, para que el nombre lo resuelva el servidor.
google-chrome --user-data-dir=/tmp/perfil-socks --proxy-server=socks5://127.0.0.1:1080

curl -I --socks5-hostname 127.0.0.1:1080 https://intranet.example.com

Si curl obtiene cabeceras de un host que solo existe en la red del servidor, el túnel funciona.

ssh -D frente a Mosh: tabla comparativa para el proxy SOCKS

Mosh no hace port forwarding ni X11 forwarding, así que no puede llevar un proxy SOCKS. Cada herramienta cubre un uso distinto:

Qué se midessh -D (SOCKS)Mosh
Transporte y puerto por defectoTCP, puerto 22UDP, puertos 60000-61000
Reenvío de puertos o proxy SOCKSSí, reenvío dinámicoNo lo admite
Cómo se estableceConexión SSH directaArranca mosh-server mediante una conexión SSH inicial
Uso adecuadoNavegar o usar herramientas a través del servidorShell interactiva en redes móviles cambiantes

Lo práctico es combinarlos: Mosh para la shell desde el móvil y una conexión SSH aparte con -D o DynamicForward cuando necesitas el proxy.

4 errores al montar un proxy SOCKS con ssh -D

  1. Esperar que Mosh reenvíe el proxy: no lo hace; el túnel tiene que ser SSH puro.
  2. Fugas de DNS: sin «Proxy DNS» en Firefox o con --socks5 en curl, los nombres se resuelven en tu red local.
  3. Reenvío desactivado en el servidor: si sshd_config tiene AllowTcpForwarding no o DisableForwarding yes, el canal se rechaza aunque el login funcione.
  4. Escuchar en todas las interfaces: -D 0.0.0.0:1080 convierte tu equipo en un proxy abierto para cualquiera de tu red. Fija 127.0.0.1 salvo que sepas por qué no.

Gestionar el servidor del proxy SOCKS desde el móvil con termi1

El túnel ssh -D se suele levantar desde el portátil, pero el servidor que lo sirve se puede revisar desde el teléfono. Con la terminal SSH termi1 abres /etc/ssh/sshd_config en el editor que prefieras usando su teclado propio, que incluye Esc, Ctrl, Tab y flechas, o lo descargas por SFTP sin salir de la sesión.

Antes de reiniciar el servicio, valida la sintaxis:

sudo sshd -t
grep -Ei 'allowtcpforwarding|disableforwarding' /etc/ssh/sshd_config

Si le pides a la IA «comprueba la configuración de sshd», escribe el comando en el prompt sin pulsar Intro. En conexiones etiquetadas como producción, Production Guard retiene lo que detiene o cambia algo, como un reinicio de sshd, antes de que llegue al prompt. Las claves generadas en el móvil se guardan en el almacén seguro del sistema y la privada no sale del dispositivo. Si el servidor no tiene IP pública, una red privada en malla como Prialo, o Tailscale, permite alcanzarlo sin abrir puertos. termi1 está disponible en la App Store para iPhone y en Google Play.

Preguntas frecuentes

¿Qué hace exactamente ssh -D 1080?

ssh -D 1080 abre un proxy SOCKS4/SOCKS5 en el puerto local 1080 y envía cada conexión que recibe a través del servidor SSH. El servidor abre la conexión final, de modo que los sitios visitados ven su IP y no la del equipo cliente.

¿Cuál es la diferencia entre ssh -D y DynamicForward?

ssh -D y DynamicForward hacen lo mismo: el primero es la opción de línea de comandos y el segundo la directiva de ~/.ssh/config. Ambos aceptan la sintaxis [bind_address:]port, y DynamicForward evita repetir el flag cada vez que te conectas al mismo host.

¿Puedo usar Mosh para crear un proxy SOCKS?

Mosh no puede crear un proxy SOCKS porque no hace port forwarding ni X11 forwarding. Usa UDP en los puertos 60000-61000 solo para la shell interactiva. Para el proxy necesitas una conexión SSH normal con -D o con DynamicForward en el fichero de configuración.

¿Cómo evito fugas de DNS con el proxy SOCKS de ssh?

Las fugas de DNS con el proxy SOCKS de ssh se evitan resolviendo nombres en el servidor: en Firefox, marca «Proxy DNS al usar SOCKS v5»; en curl, usa --socks5-hostname; en Chrome, pasa --proxy-server=socks5://127.0.0.1:1080 con un perfil separado.

¿Por qué el servidor rechaza el túnel de ssh -D?

El servidor rechaza el túnel de ssh -D cuando sshd_config contiene AllowTcpForwarding no o DisableForwarding yes. El inicio de sesión funciona, pero los canales de reenvío se deniegan. Cambia la directiva, valida con sudo sshd -t y reinicia el servicio SSH.