DNS
Chute использует собственный DNS-клиент для поддержки расширенных функций. Его поведение может отличаться от DNS-клиента вашей операционной системы.
Chute выступает в роли DNS-сервера, когда к сессии применяется правило DIRECT. Chute сначала проверяет DNS-запись хоста, затем инициализирует сокет с IP-адресом, возвращённым в DNS-записи. При таком подходе все сессии, к которым применяется правило DIRECT, обходят системную конфигурацию DNS и маршрутизируются через DNS-сервер Chute.
Chute iOS настроит системный DNS-сервер на DNS-сервер Chute.
Вышестоящий DNS-сервер
По умолчанию Chute использует адреса DNS-серверов из операционной системы. Вы можете переопределить их с помощью DNS-сервера, DoH (DNS-over-HTTPS), DoT (DNS-over-TLS), DoQ (DNS-over-QUIC) и DoH3 (DNS-over-HTTP/3), используя параметр 'dns-server'.
Раздел DNS
Параметры DNS обычно записываются в [General], но они могут быть равнозначно записаны в разделе верхнего уровня [DNS]: dns-server, doh (псевдонимы doh-server, doh-service), dot, doq, doh3, direct-dns-server, proxy-dns-server, encrypted-dns-server, allow-dns-svcb, encrypted-dns-follow-outbound-mode, hijack-dns и always-real-ip работают одинаково в любом из разделов. Этот же раздел также принимает строки локального сопоставления DNS — форму записи для отдельных доменов, используемую в [Host], — поэтому обе формы строк могут сосуществовать в одном разделе. Любой другой ключ сначала читается как строка сопоставления: ключ = значение без IP-адреса и без префикса вида server: становится псевдонимом, поэтому по ошибке попавший сюда ключ [General] — optimistic-dns = false — молча сопоставляет имя optimistic-dns со значением false, а не вызывает ошибку. С уведомлением в журнале игнорируется только та строка, которую отвергает и парсер сопоставлений. fallback-dns-server и encrypted-dns-skip-cert-verification читаются и здесь.
[DNS]
doh = https://dns.google/dns-query
always-real-ip = *.lan
*.example.com = server:1.1.1.1
Подробности
Chute одновременно запрашивает все DNS-серверы для повышения производительности, аналогично dnsmasq с параметром '--all-servers'. Используется первый ответ от серверов. Приложение Chute iOS и Chute Dashboard покажут, какой сервер ответил первым. Если Chute не получил ответа в течение 2 секунд, он снова запросит все серверы. Обратите внимание, что в повторных попытках участвуют только вышестоящие серверы типов DNS-сервер, DoT и DoQ; DoH, DoH3 и syslib запрашиваются только в первом раунде. После 3 повторных попыток (всего 4 попытки) или 10 секунд Chute прекратит попытки и сообщит об ошибке DNS. Эти повторные попытки касаются собственных запросов Chute и запросов, которые он перехватывает из интерфейса TUN и ретрансляции UDP через SOCKS5; запрос, отправленный напрямую на DNS-порт, который слушает Chute, уходит на серверы один раз и не повторяется, поэтому повторные попытки берёт на себя его клиент.
Какие серверы опрашиваются, зависит от имени. Домен, для которого правило выносит решение DIRECT, использует direct-dns-server, если он задан; имена хостов прокси-серверов используют proxy-dns-server; домен с локальным сопоставлением DNS использует назначенный там сервер; всё остальное использует основной пул (dns-server, doh, dot, doq, doh3). direct-dns-server обслуживает разрешения, которые Chute выполняет, когда устанавливает прямое соединение, а запрос приложения — только если этот запрос доходит до резолвера Chute: при работе через TUN на запросы A и AAAA от приложений вместо этого выдаются поддельные IP-адреса. Если отдельный пул не вернул ни одного ответа, запрос повторяется через основной пул; если ни одного ответа не вернул основной пул, перед сообщением об ошибке один раз опрашивается fallback-dns-server.
Некоторые доменные имена могут иметь плохо работающие авторитетные серверы имён, из-за чего вышестоящие DNS-серверы возвращают пустой ответ из-за тайм-аута на стороне сервера или других проблем с подключением. Chute сообщит об ошибке «пустой ответ DNS», если вышестоящие DNS-серверы явно возвращают пустые DNS-ответы, или если некоторые серверы возвращают пустые ответы, а другие не отвечают в течение 3 секунд.
У некоторых DNS-записей из-за настроек очень короткий TTL, поэтому Chute применяет минимальный TTL в 60 секунд: более короткие TTL повышаются до 60 секунд. Оптимистичный DNS включён по умолчанию — кэшированный результат DNS возвращается немедленно, обновляясь в фоновом режиме. Его можно отключить с помощью optimistic-dns = false. Ответ NXDOMAIN, содержащий SOA-запись зоны, тоже кэшируется — на время, которое эта запись задаёт для отрицательных ответов, но не меньше 60 секунд и не больше суток; пока оно не истечёт, на это имя отвечается NXDOMAIN без повторного обращения к серверам. Ответ NXDOMAIN от вышестоящего сервера не кэшируется, если имя покрывается сопоставлением или псевдонимом в [Host]; сопоставление или псевдоним имеет приоритет.
Кэш DNS хранит 200 записей. На iOS и tvOS ему никогда не разрешается расти без ограничения: запрос неограниченного кэша отклоняется, кэш на 200 записей сохраняется, и об этом записывается уведомление.
Когда IPv6 доступен и включён, DNS-клиент Chute будет отправлять как A-, так и AAAA-запросы вышестоящим DNS-серверам. Будет использован первый возвращённый ответ A или AAAA. В сетях с одним стеком ответ для семейства адресов, которое в данный момент не маршрутизируется, откладывается в пользу другого семейства и используется только как запасной вариант, когда другое семейство ничего не даёт.
Эта страница — перевод английской версии. При расхождениях приоритет имеет английская версия.