Туннель поднят, сайты открываются — а DNS-запросы, возможно, до сих пор гуляют открытым текстом, объявляя локальной сети каждый домен, который вы посещаете. Это и есть утечка DNS, и она перечёркивает добрую часть приватности прокси. Разбираемся, как Clash резолвит имена и как закрыть дыру.

Утечка DNS: запросы на порт 53 обходят туннель, шифрованный DNS остаётся внутри
Суть утечки: трафик идёт туннелем, но намерение было объявлено заранее

Как возникает утечка

С одним лишь системным прокси браузеры обычно резолвят имена через прокси удалённо — терпимо. Но под TUN с небрежным DNS, или когда приложение зовёт системный резолвер напрямую, запросы уходят открытым UDP на резолвер провайдера (порт 53). Полезная нагрузка — в туннеле; о цели поездки вы прокричали заранее.

Ответ Clash: резолвить самому

В Mihomo встроен DNS-модуль с двумя режимами:

  • fake-ip (рекомендуется): на вопрос «какой IP у google.com» ядро мгновенно отвечает адресом из служебного диапазона (198.18.x.x). Приложение подключается к фиктивному адресу, ядро по нему восстанавливает домен и маршрутизирует по доменным правилам. Настоящий резолв происходит на выходе прокси. Локальная сеть видит только фиктивные адреса — утечки нет, плюс сэкономлен круг ожидания.
  • redir-host: возвращает настоящие IP. Совместимее с капризным софтом, но заметно «дырявее». Используйте только когда конкретное приложение всерьёз конфликтует с fake-ip.

Проверенный шаблон

В Merge-конфиг (как это делается), поверх DNS-секции подписки:

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "+.local"
    - "+.msftconnecttest.com"   # системные проверки сети хотят честных ответов
  nameserver:
    - https://1.1.1.1/dns-query
  fallback:
    - https://8.8.8.8/dns-query
  fallback-filter:
    geoip: true

Две идеи: резолверы — DoH (HTTPS-шифрование), так что даже запрос вне туннеля не открытый текст; а fake-ip-filter исключает локальные имена и системные проверки из фиктивных адресов, чтобы принтеры и порталы авторизации не сломались.

Последний штрих: DNS hijack под TUN

С включённым TUN держите «DNS hijack» на значении по умолчанию any:53: он силой заворачивает в ядро всякий оставшийся открытый запрос — от приложений, игнорирующих любые настройки. Сам TUN: инструкция.

Тест на утечки

  1. С включённым прокси запустите Extended-тест на dnsleaktest.com или browserleaks.com/dns;
  2. Все резолверы в результатах должны относиться к региону выходного узла или к вашему DoH-провайдеру;
  3. Резолвер вашего интернет-провайдера в списке = утечка. Проверьте, что fake-ip активен и hijack работает.

После смены DNS-настроек перезапустите ядро, чтобы сбросить кеш fake-ip. Смесь старых и новых соответствий делает пару сайтов недоступными и выглядит страшнее, чем есть.