Mensen behandelen socks5h als socks5 met een vriendelijker spelling, en verwachten dat beide dezelfde aanvraag naar dezelfde plek sturen. De extra letter verplaatst in plaats daarvan de DNS-query. Op een machine waarvan de resolver en de proxy in verschillende netwerken staan, is dat het verschil tussen een aanvraag die werkt en een die mislukt.

Eén letter, twee resolvers

Het schema bepaalt waar de bestemmingsnaam een adres wordt. Lokale resolutie gebruikt de resolver die op uw machine is geconfigureerd. Externe resolutie zet de hostnaam in de SOCKS-aanvraag, en de proxy zoekt die op met zijn eigen resolver en zijn eigen beeld van het netwerk. Beide vormen verbinden nog steeds met hetzelfde proxyadres op dezelfde poort, dus het verschil zit in de aanvraagbody, niet in het pad.

Niets aan het schema verandert de versleuteling of de authenticatie; alleen het DNS-pad verschuift. Daarom is de letter makkelijk te negeren en duur om fout te doen.

Dezelfde proxy, andere aanvraag

De twee aanroepen verschillen met één teken. Al het andere is identiek:

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

De curl-proxyreferentie documenteert deze schema's apart, en dat is de gezaghebbende reden om ze niet als aliassen te behandelen. Voer beide uit tegen een onschadelijk eindpunt dat u mag gebruiken en lees het verschil. Een geslaagde externe opzoeking zegt niets over andere toepassingen, want browsers, pakketbeheerders en taalruntimes kiezen elk voor zichzelf.

De eigen naam van de proxy wordt lokaal opgelost

In dat commando moet proxy.example een adres worden voordat er iets anders gebeurt, en die opzoeking is altijd lokaal. Het verplaatsen van de resolutie van service.example naar de proxy doet niets voor de eigen naam van de proxy, die nog steeds een resolver nodig heeft die uw machine kan bereiken. Hier verandert een VPN het beeld.

Als de proxynaam alleen binnen de tunnel wordt opgelost, hangt de verbinding af van of de tunnel actief is voordat curl begint. Welk schema dan wint, hangt af van welke kant kan antwoorden. Wanneer uw machine de bestemming niet kan oplossen maar de proxy wel, mislukt socks5 en slaagt socks5h. Wanneer uw machine die via de tunnel oplost en de proxy niet, werkt socks5 en mislukt socks5h.

Het schema plaatst de verbinding met de proxy niet binnen of buiten de VPN; dat doet de routingtabel, en het schema ziet die nooit. Daarom kan één tunnel het ene schema repareren en het andere op dezelfde machine breken. De letter bepaalt alleen wie de vraag stelt.

Wat elke kant kan oplossen

Een openbare proxy kan een naam die alleen binnen het bedrijf bestaat niet oplossen, dus de hostnaam erheen sturen mislukt bij de proxy en verschijnt als een proxyfout in plaats van een lokale DNS-fout. Een proxy binnen hetzelfde privénetwerk kan zulke namen meestal wel oplossen, en daar is socks5h zijn geld waard. Kies de plaats van de resolver op basis van het beleid dat u echt nodig heeft, want externe DNS is niet automatisch capabeler en het geeft de naam wel aan een derde partij. Voor een openbare bestemming werken beide vormen, dus geef de voorkeur aan degene die uw andere hulpmiddelen al gebruiken.

Schrijf die keuze in het runbook in plaats van in een opmerking, en houd inloggegevens buiten gedeelde geschiedenis en diagnostische uitvoer. Wijzig daarna één variabele per keer: dezelfde bestemming, hetzelfde programma, dezelfde resolver, één letter.

Welk programma heeft geantwoord

Twee curl-programma's op dezelfde machine kunnen verschillen in versie en buildfuncties. In een Unix-achtige shell somt type -a curl elke overeenkomst op het pad op en curl --version toont de functies van degene die zou draaien. Een wrapperscript of een alias eerder op het pad is een veelvoorkomende reden dat resultaten niet overeenkomen met het programma dat u denkt te testen.

Een niet-ondersteund schema, een proxy die de naam niet kan oplossen en een onbereikbare bestemming zijn drie verschillende fouten, dus lees de melding voordat u de letter wijzigt. Een build zonder de socks5h-syntaxis meldt de proxystring als niet ondersteund, wat niet hetzelfde is als een naam die niet kon worden opgelost. Maak van één oud rapport over een systeem-curl geen vaste regel voor elk platform.

Gerelateerde artikelen