Leute behandeln socks5h wie socks5 mit einer freundlicheren Schreibweise und erwarten, dass beide dieselbe Anfrage an denselben Ort schicken. Der zusätzliche Buchstabe verschiebt stattdessen die DNS-Abfrage. Auf einem Rechner, dessen Resolver und dessen Proxy in verschiedenen Netzen liegen, ist das der Unterschied zwischen einer Anfrage, die funktioniert, und einer, die scheitert.

Ein Buchstabe, zwei Resolver

Das Schema entscheidet, wo der Zielname zu einer Adresse wird. Die lokale Auflösung nutzt den Resolver, der auf Ihrem Rechner konfiguriert ist. Die entfernte Auflösung legt den Hostnamen in die SOCKS-Anfrage, und der Proxy sucht ihn mit seinem eigenen Resolver und seiner eigenen Sicht auf das Netz. Beide Formen verbinden sich weiterhin mit derselben Proxy-Adresse am selben Port, der Unterschied liegt also im Anfragekörper, nicht im Pfad.

Nichts am Schema ändert die Verschlüsselung oder die Authentifizierung; nur der DNS-Pfad verschiebt sich. Deshalb ist der Buchstabe leicht zu übersehen und teuer, wenn man ihn falsch macht.

Derselbe Proxy, andere Anfrage

Die beiden Aufrufe unterscheiden sich um ein einziges Zeichen. Alles andere ist identisch:

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

Die curl-Proxy-Referenz dokumentiert diese Schemata getrennt, und das ist der maßgebliche Grund, sie nicht als Aliase zu behandeln. Führen Sie beide gegen einen harmlosen Endpunkt aus, den Sie verwenden dürfen, und lesen Sie den Unterschied. Eine erfolgreiche entfernte Auflösung sagt nichts über andere Anwendungen, denn Browser, Paketmanager und Sprachlaufzeiten entscheiden jeweils selbst.

Der eigene Name des Proxys wird lokal aufgelöst

In diesem Befehl muss proxy.example zu einer Adresse werden, bevor irgendetwas anderes passiert, und diese Suche ist immer lokal. Die Auflösung von service.example zum Proxy zu verschieben, ändert nichts am eigenen Namen des Proxys, der weiterhin einen Resolver braucht, den Ihr Rechner erreichen kann. Hier ändert ein VPN das Bild.

Wenn der Proxy-Name nur innerhalb des Tunnels aufgelöst wird, hängt die Verbindung davon ab, dass der Tunnel steht, bevor curl startet. Welches Schema dann gewinnt, hängt davon ab, welche Seite antworten kann. Wenn Ihr Rechner das Ziel nicht auflösen kann, der Proxy aber schon, scheitert socks5 und socks5h gelingt. Wenn Ihr Rechner es durch den Tunnel auflöst und der Proxy nicht, funktioniert socks5 und socks5h scheitert.

Das Schema legt die Verbindung zum Proxy nicht in oder außerhalb des VPN; das macht die Routing-Tabelle, und das Schema sieht sie nie. Deshalb kann ein Tunnel auf demselben Rechner ein Schema reparieren und das andere kaputt machen. Der Buchstabe entscheidet nur, wer die Frage stellt.

Was jede Seite auflösen kann

Ein öffentlicher Proxy kann einen firmeninternen Namen nicht auflösen, deshalb scheitert der Hostname beim Proxy und erscheint als Proxy-Fehler statt als lokaler DNS-Fehler. Ein Proxy im selben privaten Netz kann solche Namen meist auflösen, und dort spielt socks5h seine Stärke aus. Wählen Sie den Ort des Resolvers nach der Richtlinie, die Sie wirklich brauchen, denn entferntes DNS ist nicht automatisch leistungsfähiger und es gibt den Namen tatsächlich an Dritte weiter. Für ein öffentliches Ziel funktionieren beide Formen, also bevorzugen Sie die, die Ihre anderen Werkzeuge bereits nutzen.

Schreiben Sie diese Wahl ins Runbook statt in einen Kommentar, und halten Sie Zugangsdaten aus gemeinsamen Verläufen und Diagnoseausgaben heraus. Ändern Sie dann jeweils eine Variable: dasselbe Ziel, dieselbe Binärdatei, derselbe Resolver, ein Buchstabe.

Welche Binärdatei geantwortet hat

Zwei curl-Binärdateien auf demselben Rechner können sich in Version und Build-Funktionen unterscheiden. In einer Unix-ähnlichen Shell listet type -a curl jeden Treffer im Pfad auf und curl --version zeigt die Funktionen derjenigen, die laufen würde. Ein Wrapper-Skript oder ein Alias weiter vorn im Pfad ist ein häufiger Grund, warum Ergebnisse nicht zu der Binärdatei passen, die Sie zu testen glauben.

Ein nicht unterstütztes Schema, ein Proxy, der den Namen nicht auflösen kann, und ein unerreichbares Ziel sind drei verschiedene Fehler, lesen Sie also die Meldung, bevor Sie den Buchstaben ändern. Ein Build ohne die socks5h-Syntax meldet die Proxy-Zeichenkette als nicht unterstützt, was nicht dasselbe ist wie ein Name, der nicht aufgelöst werden konnte. Machen Sie aus einem alten Bericht über ein System-curl keine dauerhafte Regel für jede Plattform.

Ähnliche Artikel