Люди ставляться до socks5h як до socks5 зі зручнішим написанням і чекають, що обидві форми надішлють той самий запит у те саме місце. Зайва літера натомість переносить DNS-запит. На машині, чий розв'язувач і чиє проксі перебувають у різних мережах, це різниця між запитом, який працює, і тим, що завершується помилкою.

Одна літера, два розв'язувачі

Схема вирішує, де ім'я призначення стає адресою. Локальне розв'язання використовує розв'язувач, налаштований на вашій машині. Віддалене розв'язання поміщає ім'я хоста всередину запиту SOCKS, і проксі шукає його власним розв'язувачем і власним поглядом на мережу. Обидві форми все ще підключаються до тієї самої адреси проксі на тому самому порту, тож різниця в тілі запиту, а не в шляху.

Ніщо у схемі не змінює шифрування чи автентифікацію; переноситься лише шлях DNS. Тому літеру легко не помітити, а помилка дорого коштує.

Той самий проксі, інший запит

Два виклики різняться одним символом. Усе інше ідентичне:

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

The довідка curl про проксі описує ці схеми окремо, і це авторитетна причина не вважати їх синонімами. Запустіть обидві проти нешкідливої кінцевої точки, яку вам дозволено використовувати, і прочитайте різницю. Успішний віддалений пошук нічого не каже про інші застосунки, бо браузери, менеджери пакетів і середовища виконання мов вибирають кожен сам.

Власне ім'я проксі розв'язується локально

У цій команді proxy.example має стати адресою перш ніж станеться будь-що інше, і цей пошук завжди локальний. Перенесення розв'язання service.example на проксі нічого не робить для власного імені проксі, якому все ще потрібен розв'язувач, доступний вашій машині. Ось тут VPN змінює картину.

Якщо ім'я проксі розв'язується лише всередині тунелю, з'єднання залежить від того, чи тунель піднятий до запуску curl. Яка схема тоді переможе, залежить від того, яка сторона може відповісти. Коли ваша машина не може розв'язати призначення, а проксі може, socks5 зазнає невдачі, а socks5h вдається. Коли ваша машина розв'язує його через тунель, а проксі не може, socks5 працює, а socks5h зазнає невдачі.

Схема не розміщує з'єднання з проксі всередині чи ззовні VPN; це робить таблиця маршрутизації, і схема її ніколи не бачить. Тому один тунель може виправити одну схему й зламати іншу на тій самій машині. Літера вирішує лише, хто ставить запитання.

Що може розв'язати кожна сторона

Публічний проксі не може розв'язати ім'я, що існує лише всередині компанії, тож надсилання йому імені хоста зазнає невдачі на проксі й виглядає як помилка проксі, а не як локальна помилка DNS. Проксі в тій самій приватній мережі зазвичай може розв'язувати такі імена, і саме там socks5h виправдовує себе. Виберіть місце розв'язувача відповідно до політики, яка вам справді потрібна, бо віддалений DNS не стає автоматично більш здатним і він справді передає ім'я третій стороні. Для публічного призначення працюють обидві форми, тож віддайте перевагу тій, яку вже використовують ваші інші інструменти.

Запишіть цей вибір у runbook, а не в коментар, і тримайте облікові дані поза спільною історією та діагностичним виводом. Потім змінюйте по одній змінній за раз: те саме призначення, той самий бінарник, той самий розв'язувач, одна літера.

Який бінарник відповів

Два бінарники curl на одній машині можуть різнитися версією та можливостями збірки. У Unix-подібній оболонці type -a curl перелічує всі збіги в шляху, а curl --version показує можливості того, який запустився б. Скрипт-обгортка або псевдонім раніше в шляху — часта причина того, що результати не відповідають бінарнику, який ви, на вашу думку, тестуєте.

Непідтримувана схема, проксі, який не може розв'язати ім'я, і недосяжне призначення — це три різні помилки, тож прочитайте повідомлення, перш ніж змінювати літеру. Збірка без синтаксису socks5h повідомляє про рядок проксі як про непідтримуваний, і це не те саме, що ім'я, яке не вдалося розв'язати. Не перетворюйте один старий звіт про системний curl на постійне правило для кожної платформи.

Схожі статті