curl socks5h frente a socks5: quién resuelve el nombre de host
La letra extra mueve la consulta DNS, no el cifrado. Compare ambas formas y luego compruebe qué nombre de host sigue necesitando un resolutor local.
La gente trata socks5h como socks5 con una ortografía más amable, y espera que ambas envíen la misma petición al mismo lugar. La letra extra mueve la consulta DNS en su lugar. En una máquina cuyo resolutor y cuyo proxy están en redes distintas, esa es la diferencia entre una petición que funciona y una que falla.
Una letra, dos resolutores
El esquema decide dónde el nombre de destino se convierte en dirección. La resolución local usa el resolutor configurado en su máquina. La resolución remota pone el nombre de host dentro de la petición SOCKS, y el proxy lo busca con su propio resolutor y su propia visión de la red. Ambas formas siguen conectando a la misma dirección de proxy en el mismo puerto, así que la diferencia está en el cuerpo de la petición, no en la ruta.
Nada del esquema cambia el cifrado ni la autenticación; solo se mueve la ruta DNS. Por eso la letra es fácil de ignorar y cara de equivocar.
Mismo proxy, petición distinta
Las dos invocaciones difieren en un solo carácter. Todo lo demás es idéntico:
curl --proxy socks5://proxy.example:1080 https://service.example/
curl --proxy socks5h://proxy.example:1080 https://service.example/La referencia del proxy de curl documenta estos esquemas por separado, y esa es la razón autorizada para no tratarlos como alias. Ejecute ambas contra un extremo inofensivo que tenga permiso de usar y lea la diferencia. Una búsqueda remota exitosa no dice nada sobre otras aplicaciones, porque los navegadores, los gestores de paquetes y los entornos de ejecución de lenguajes eligen cada uno por su cuenta.
El nombre propio del proxy se resuelve localmente
En ese comando, proxy.example tiene que convertirse en una dirección antes de que ocurra nada más, y esa búsqueda siempre es local. Mover la resolución de service.example al proxy no hace nada por el nombre propio del proxy, que sigue necesitando un resolutor que su máquina pueda alcanzar. Aquí es donde una VPN cambia el panorama.
Si el nombre del proxy solo se resuelve dentro del túnel, la conexión depende de que el túnel esté levantado antes de que curl arranque. Qué esquema gana entonces depende de qué lado puede responder. Cuando su máquina no puede resolver el destino pero el proxy sí, socks5 falla y socks5h tiene éxito. Cuando su máquina lo resuelve a través del túnel y el proxy no puede, socks5 funciona y socks5h falla.
El esquema no coloca la conexión con el proxy dentro o fuera de la VPN; lo hace la tabla de rutas, y el esquema nunca la ve. Por eso un túnel puede arreglar un esquema y romper el otro en la misma máquina. La letra solo decide quién hace la pregunta.
Qué puede resolver cada lado
Un proxy público no puede resolver un nombre exclusivo de la empresa, así que enviarle el nombre de host falla en el proxy y aparece como un error de proxy en lugar de un error DNS local. Un proxy dentro de la misma red privada suele poder resolver esos nombres, y ahí es donde socks5h se gana su sitio. Elija la ubicación del resolutor según la política que realmente necesite, porque el DNS remoto no es automáticamente más capaz y sí entrega el nombre a un tercero. Para un destino público funcionan ambas formas, así que prefiera la que ya usan sus otras herramientas.
Escriba esa elección en el runbook y no en un comentario, y mantenga las credenciales fuera del historial compartido y de la salida de diagnóstico. Después cambie una variable cada vez: mismo destino, mismo binario, mismo resolutor, una letra.
Qué binario respondió
Dos binarios de curl en la misma máquina pueden diferir en versión y características de compilación. En un shell tipo Unix, type -a curl enumera cada coincidencia en la ruta y curl --version muestra las características del que se ejecutaría. Un script envoltorio o un alias más arriba en la ruta es una causa habitual de que los resultados no coincidan con el binario que cree que está probando.
Un esquema no admitido, un proxy que no puede resolver el nombre y un destino inalcanzable son tres errores distintos, así que lea el mensaje antes de cambiar la letra. Una compilación sin la sintaxis socks5h informa que la cadena de proxy no se admite, lo que no es lo mismo que un nombre que no se pudo resolver. No convierta un informe antiguo sobre un curl del sistema en una regla permanente para cada plataforma.