Настройка DNS в mihomo: fake-ip против redir-host
Содержание
DNS в конфигурации mihomo — не второстепенная деталь, а половина работы прокси. Именно на этапе разрешения имени решается, какой адрес получит приложение, попадёт ли соединение под нужное правило маршрутизации и не уйдёт ли сам запрос имени мимо туннеля. Большинство жалоб вида «прокси включён, но сайт не открывается» упирается в эту секцию.
Ядро умеет работать как собственный резолвер и предлагает два режима перехвата — fake-ip и redir-host. Разберём, зачем прокси вообще вмешивается в разрешение имён, чем режимы отличаются на практике и как выглядит рабочая секция dns.
Зачем прокси перехватывает DNS
Обычный DNS-запрос уходит открытым текстом к резолверу провайдера. Отсюда две проблемы. Первая — подмена и фильтрация ответов: имя разрешается в неверный адрес, и соединение уходит в никуда. Вторая — утечка: даже когда трафик идёт через прокси, список запрошенных имён виден стороне, обслуживающей DNS.
Собственный резолвер ядра закрывает оба вопроса: запросы уходят к выбранным вами серверам, при желании по зашифрованным протоколам, а ответы используются для маршрутизации. Плюс появляется важная возможность — разрешать имя не локально, а на стороне выходного узла, что критично для сервисов, отдающих разные адреса в разных регионах.
fake-ip: адрес выдаётся мгновенно
В режиме fake-ip ядро на любой запрос сразу возвращает приложению виртуальный адрес из зарезервированного диапазона (обычно 198.18.0.0/16) и запоминает, какому имени он соответствует. Настоящего разрешения в этот момент не происходит.
Когда приложение открывает соединение на этот адрес, ядро по таблице восстанавливает исходное доменное имя, применяет к нему правила и уже выходной узел разрешает имя в реальный IP. Выгод сразу несколько: приложение не ждёт ответа DNS, доменные правила работают точно, а имена не разрешаются локально, то есть не утекают.
redir-host: классическое разрешение
Режим redir-host ведёт себя привычнее: ядро действительно спрашивает адрес у настроенных серверов и отдаёт приложению настоящий IP. Это медленнее и хуже с точки зрения утечек, зато не ломает сценарии, где программа сверяет полученный адрес с чем-то ещё или сама работает с IP напрямую.
Практический вывод такой: по умолчанию используйте fake-ip — сегодня это основной режим для клиентов на ядре mihomo; переключайтесь на redir-host, только если конкретное приложение отказывается работать и точечные исключения не помогают.
Исключения через fake-ip-filter
У виртуальных адресов есть побочный эффект: часть программ ожидает получить настоящий IP. Типичные пострадавшие — устройства и сервисы в локальной сети, сетевые принтеры, некоторые игры и клиенты, проверяющие адрес самостоятельно. Для них существует список исключений fake-ip-filter: перечисленные в нём имена разрешаются обычным образом.
Совет. Не переключайте весь режим из-за одного проблемного приложения — добавьте его домен в fake-ip-filter. Так вы сохраните преимущества fake-ip для всего остального трафика.
Пример секции dns
Ниже — универсальный вариант, который можно взять за основу. Адреса резолверов подставьте те, которым доверяете:
dns:
enable: true
ipv6: false
listen: 0.0.0.0:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- "*.local"
- "+.internal"
default-nameserver:
- 1.1.1.1
- 8.8.8.8
nameserver:
- https://1.1.1.1/dns-query
- tls://8.8.8.8
fallback:
- https://8.8.8.8/dns-query
Три списка серверов легко перепутать, поэтому запомните их роли. default-nameserver используется один раз в самом начале — чтобы разрешить адреса самих DNS-серверов и узлов; здесь нужны обычные IP, без доменных имён. nameserver — основной набор, к которому ядро обращается за именами. fallback — запасной набор, применяемый, когда ответ основного вызывает сомнение. Если разбираться в тонкостях не хочется, оставьте один надёжный список в nameserver: это уже лучше, чем резолвер по умолчанию.
Диагностика: симптом и что проверить
| Симптом | Вероятная причина | Что сделать |
|---|---|---|
| Одно приложение не работает, остальное в порядке | Ему нужен настоящий IP | Добавить его домен в fake-ip-filter |
| Не открываются устройства локальной сети | Локальные имена попали в fake-ip | Внести *.lan и подобные шаблоны в исключения |
| Сайты открываются с задержкой в несколько секунд | Медленный или недоступный вышестоящий DNS | Сменить серверы в nameserver, сократить списки |
| После включения TUN пропала сеть целиком | Ошибка в секции dns | Проверить конфигурацию командой mihomo -t -f config.yaml |
| Сервис отдаёт контент не того региона | Имя разрешается локально | Убедиться, что включён fake-ip и домен не в исключениях |
Внимание. Ручные настройки DNS в операционной системе конфликтуют с резолвером ядра. Если вы прописывали сторонние серверы в свойствах сетевого адаптера, при отладке верните автоматическое получение.
DNS теснее всего связан с двумя другими темами: с режимом TUN, где ядро обслуживает разрешение имён для всей системы, и с правилами маршрутизации, которые опираются на результат разрешения. Если после правки секции сеть не заработала, пройдите пошаговую диагностику подключения — она начинается как раз с проверки уровней.