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 yesCon 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.
- 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».
- Chrome o Chromium: arráncalo con
--proxy-server=socks5://127.0.0.1:1080, idealmente con un perfil aparte para no mezclar tráfico. - 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.comSi 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 mide | ssh -D (SOCKS) | Mosh |
|---|---|---|
| Transporte y puerto por defecto | TCP, puerto 22 | UDP, puertos 60000-61000 |
| Reenvío de puertos o proxy SOCKS | Sí, reenvío dinámico | No lo admite |
| Cómo se establece | Conexión SSH directa | Arranca mosh-server mediante una conexión SSH inicial |
| Uso adecuado | Navegar o usar herramientas a través del servidor | Shell 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
- Esperar que Mosh reenvíe el proxy: no lo hace; el túnel tiene que ser SSH puro.
- Fugas de DNS: sin «Proxy DNS» en Firefox o con
--socks5en curl, los nombres se resuelven en tu red local. - Reenvío desactivado en el servidor: si
sshd_configtieneAllowTcpForwarding nooDisableForwarding yes, el canal se rechaza aunque el login funcione. - Escuchar en todas las interfaces:
-D 0.0.0.0:1080convierte tu equipo en un proxy abierto para cualquiera de tu red. Fija127.0.0.1salvo 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_configSi 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.