curl socks5h contra socks5: quem resolve o nome do host
A letra extra move a consulta DNS, não a encriptação. Compare as duas formas e depois verifique qual nome de host ainda precisa de um resolver local.
As pessoas tratam socks5h como socks5 com uma ortografia mais amigável, e esperam que ambos enviem o mesmo pedido para o mesmo lugar. A letra extra move a consulta DNS em vez disso. Numa máquina cujo resolver e cujo proxy estão em redes diferentes, essa é a diferença entre um pedido que funciona e um que falha.
Uma letra, dois resolvers
O esquema decide onde o nome de destino se torna um endereço. A resolução local usa o resolver configurado na sua máquina. A resolução remota coloca o nome do host dentro do pedido SOCKS, e o proxy procura-o com o seu próprio resolver e a sua própria visão da rede. Ambas as formas continuam a ligar ao mesmo endereço de proxy na mesma porta, pelo que a diferença está no corpo do pedido, não no caminho.
Nada no esquema altera a encriptação ou a autenticação; só o caminho DNS se move. É por isso que a letra é fácil de ignorar e cara de errar.
Mesmo proxy, pedido diferente
As duas invocações diferem num único carácter. Todo o resto é idêntico:
curl --proxy socks5://proxy.example:1080 https://service.example/
curl --proxy socks5h://proxy.example:1080 https://service.example/A referência do proxy do curl documenta estes esquemas separadamente, e essa é a razão com autoridade para não os tratar como aliases. Execute ambos contra um ponto final inofensivo que tenha autorização para usar e leia a diferença. Uma pesquisa remota bem-sucedida não diz nada sobre outras aplicações, porque navegadores, gestores de pacotes e ambientes de execução das linguagens escolhem cada um por si.
O nome do próprio proxy é resolvido localmente
Nesse comando, proxy.example tem de se tornar um endereço antes de acontecer mais alguma coisa, e essa pesquisa é sempre local. Mover a resolução de service.example para o proxy não faz nada pelo nome do próprio proxy, que ainda precisa de um resolver que a sua máquina consiga alcançar. É aqui que uma VPN muda o quadro.
Se o nome do proxy só for resolvido dentro do túnel, a ligação depende de o túnel estar de pé antes de o curl arrancar. Qual esquema ganha então depende de que lado consegue responder. Quando a sua máquina não consegue resolver o destino mas o proxy consegue, socks5 falha e socks5h tem sucesso. Quando a sua máquina o resolve através do túnel e o proxy não consegue, socks5 funciona e socks5h falha.
O esquema não coloca a ligação ao proxy dentro ou fora da VPN; é a tabela de encaminhamento que o faz, e o esquema nunca a vê. É por isso que um túnel pode corrigir um esquema e quebrar o outro na mesma máquina. A letra decide apenas quem faz a pergunta.
O que cada lado consegue resolver
Um proxy público não consegue resolver um nome que só existe na empresa, por isso enviar-lhe o nome do host falha no proxy e aparece como erro de proxy em vez de erro DNS local. Um proxy dentro da mesma rede privada normalmente consegue resolver esses nomes, e é aí que socks5h se justifica. Escolha a localização do resolver segundo a política de que realmente precisa, porque o DNS remoto não é automaticamente mais capaz e entrega mesmo o nome a um terceiro. Para um destino público ambas as formas funcionam, por isso prefira a que as suas outras ferramentas já usam.
Escreva essa escolha no runbook e não num comentário, e mantenha as credenciais fora do histórico partilhado e da saída de diagnóstico. Depois mude uma variável de cada vez: mesmo destino, mesmo binário, mesmo resolver, uma letra.
Qual binário respondeu
Dois binários curl na mesma máquina podem diferir em versão e funcionalidades de compilação. Numa shell do tipo Unix, type -a curl lista cada correspondência no caminho e curl --version mostra as funcionalidades do que seria executado. Um script envolvente ou um alias mais acima no caminho é uma causa comum de os resultados não corresponderem ao binário que pensa estar a testar.
Um esquema não suportado, um proxy que não consegue resolver o nome e um destino inalcançável são três erros diferentes, por isso leia a mensagem antes de mudar a letra. Uma compilação sem a sintaxe socks5h reporta a cadeia de proxy como não suportada, o que não é o mesmo que um nome que falhou a resolução. Não transforme um relatório antigo sobre um curl do sistema numa regra permanente para todas as plataformas.