SOCKS5 и SOCKS5h: где выполняется DNS-разрешение
Сравните локальное разрешение DNS и разрешение на прокси в curl, разберите ошибки имён и узнайте границы защиты socks5h.
В curl выбирайте socks5h://, если имя целевого сервера должен разрешать прокси. Выбирайте socks5://, если curl должен разрешить его локально и передать прокси адрес. В обоих случаях используется SOCKS5; завершающая h — это соглашение о записи URL на стороне клиента.
Сравните режимы, подставив свою конечную точку SOCKS5 вместо локального слушающего порта:
curl --noproxy '' --proxy socks5://127.0.0.1:1080 --connect-timeout 5 --max-time 15 --verbose https://example.com/
curl --noproxy '' --proxy socks5h://127.0.0.1:1080 --connect-timeout 5 --max-time 15 --verbose https://example.com/Меняется только режим разрешения имён. --noproxy '' очищает правила обхода прокси для этих вызовов, а ограничения времени задают предел длительности сравнения. Равнозначные отдельные параметры — --socks5 и --socks5-hostname. В качестве цели используйте имя хоста: IP-адрес, указанный напрямую, не требует разрешения имени назначения и не покажет эту разницу.
Имя может быть известно лишь одной стороне
Допустим, прокси работает в сети разработки, DNS которой знает имя внутреннего сервиса. Ноутбук может не разрешить это имя в режиме socks5, а socks5h позволит передать разрешение прокси. В обратной ситуации, когда имя задано только в файле hosts ноутбука, неудачным может оказаться уже удалённое разрешение.
Публичный DNS тоже может возвращать разные адреса из разных сетей. Разница в результатах — повод сравнить выбранные адреса и их доступность, а не немедленно менять прокси.
- Не удаётся разрешить имя хоста прокси: ни один режим не сможет начать работу. Клиент по-прежнему разрешает
proxy.exampleвsocks5h://proxy.example:1080. - Локальное разрешение имени назначения завершается ошибкой: проверьте резолвер клиента или сравните с режимом передачи имени хоста прокси.
- SOCKS-сервер отклоняет назначение: изучите его ответ и политику. Успешное локальное разрешение не доказывает доступность с удалённой стороны.
- Туннель работает, но проверка сертификата не проходит: разбирайтесь с TLS целевого сервера; смена режима DNS не является универсальным решением проблем доверия.
Контролируемое тестовое имя и серверные журналы помогут подтвердить, какой тип адреса получил прокси под вашим управлением. Страница с внешним IP этого не покажет: она сообщает об исходящем соединении, а не о месте выполнения DNS-запроса.
Польза для приватности имеет чёткие границы
Разрешение на стороне прокси позволяет избежать локального разрешения имени назначения для этого запроса. Оно не шифрует SOCKS, не доказывает, что прокси использует зашифрованный DNS, и не перенаправляет трафик других приложений или предварительной загрузки браузера. Requests с поддержкой SOCKS использует то же различие между локальным разрешением и разрешением на прокси; в других клиентах вместо записи URL curl может быть отдельная настройка. Выберите протокол, который поддерживает ваше приложение, прежде чем копировать конечную точку из списка SOCKS5-прокси.