La gent tracta socks5h com a socks5 amb una ortografia més amable, i espera que tots dos enviïn la mateixa petició al mateix lloc. La lletra extra mou la consulta DNS en lloc d'això. En una màquina on el resolutor i el proxy són en xarxes diferents, aquesta és la diferència entre una petició que funciona i una que falla.

Una lletra, dos resolutors

L'esquema decideix on el nom de destinació es converteix en adreça. La resolució local fa servir el resolutor configurat a la vostra màquina. La resolució remota posa el nom d'amfitrió dins de la petició SOCKS, i el proxy el busca amb el seu propi resolutor i la seva pròpia visió de la xarxa. Les dues formes es connecten encara a la mateixa adreça de proxy al mateix port, així que la diferència és al cos de la petició, no al camí.

Res de l'esquema no canvia el xifratge ni l'autenticació; només es mou el camí DNS. Per això la lletra és fàcil d'ignorar i cara d'equivocar.

Mateix proxy, petició diferent

Les dues invocacions difereixen en un sol caràcter. Tota la resta és idèntica:

curl --proxy socks5://proxy.example:1080 https://service.example/
curl --proxy socks5h://proxy.example:1080 https://service.example/

La referència del proxy de curl documenta aquests esquemes per separat, i aquesta és la raó autoritzada per no tractar-los com a àlies. Executeu tots dos contra un punt final inofensiu que tingueu permís d'usar i llegiu la diferència. Una cerca remota reeixida no diu res sobre altres aplicacions, perquè els navegadors, els gestors de paquets i els entorns d'execució dels llenguatges trien cadascú per si mateix.

El nom propi del proxy es resol localment

En aquesta ordre, proxy.example ha de convertir-se en una adreça abans que passi res més, i aquesta cerca sempre és local. Moure la resolució de service.example al proxy no fa res pel nom propi del proxy, que encara necessita un resolutor que la vostra màquina pugui assolir. Aquí és on una VPN canvia la imatge.

Si el nom del proxy només es resol dins del túnel, la connexió depèn que el túnel estigui aixecat abans que curl arrenqui. Quina esquema guanya llavors depèn de quin costat pot respondre. Quan la vostra màquina no pot resoldre la destinació però el proxy sí, socks5 falla i socks5h té èxit. Quan la vostra màquina la resol a través del túnel i el proxy no pot, socks5 funciona i socks5h falla.

L'esquema no posa la connexió amb el proxy dins o fora de la VPN; ho fa la taula d'encaminament, i l'esquema no la veu mai. Per això un túnel pot arreglar una esquema i trencar l'altra a la mateixa màquina. La lletra només decideix qui fa la pregunta.

Què pot resoldre cada costat

Un proxy públic no pot resoldre un nom exclusiu de l'empresa, així que enviar-l'hi el nom d'amfitrió falla al proxy i apareix com un error de proxy en lloc d'un error DNS local. Un proxy dins de la mateixa xarxa privada normalment pot resoldre aquests noms, i aquí és on socks5h es guanya el lloc. Trieu la ubicació del resolutor segons la política que realment necessiteu, perquè el DNS remot no és automàticament més capaç i sí que lliura el nom a un tercer. Per a una destinació pública funciona qualsevol de les dues formes, així que preferiu la que ja fan servir les vostres altres eines.

Escriviu aquesta tria al runbook i no en un comentari, i manteniu les credencials fora de l'historial compartit i de la sortida de diagnòstic. Després canvieu una variable cada vegada: mateixa destinació, mateix binari, mateix resolutor, una lletra.

Quin binari ha respost

Dos binaris curl a la mateixa màquina poden diferir en versió i característiques de compilació. En un shell tipus Unix, type -a curl llista cada coincidència al camí i curl --version mostra les característiques del que s'executaria. Un script embolcall o un àlies més amunt al camí és una causa habitual que els resultats no coincideixin amb el binari que creieu que proveu.

Una esquema no suportada, un proxy que no pot resoldre el nom i una destinació inabastable són tres errors diferents, així que llegiu el missatge abans de canviar la lletra. Una compilació sense la sintaxi socks5h informa que la cadena de proxy no és suportada, cosa que no és el mateix que un nom que no s'ha pogut resoldre. No convertiu un informe antic sobre un curl del sistema en una regla permanent per a cada plataforma.

Articles relacionats