Serveur DNS
Vous pouvez utiliser cette option pour remplacer les réglages DNS du système. Chute prend en charge les serveurs DNS ainsi que les services DoH (DNS-over-HTTPS), DoT (DNS-over-TLS), DoQ (DNS-over-QUIC) et DoH3 (DNS-over-HTTP/3).
[General]
dns-server = 8.8.8.8, 8.8.4.4
doh = cloudflare, google, 1111
dot = dns.google, cloudflare-dns.com
doq = dns.adguard.com
doh3 = https://dns.google/dns-query
Vous pouvez utiliser le mot-clé system pour ajouter des serveurs DNS supplémentaires au réglage du système. (Les serveurs en double seront ignorés)
Vous pouvez utiliser le mot-clé syslib pour obtenir le résultat DNS via l'API intégrée du système. Sur macOS, le syslib au niveau du pool est écarté tant que l'interface TUN est active, puisque le résolveur du système renvoie alors vers Chute ; server:syslib dans [Host] et le chemin .local continuent de l'utiliser.
[General]
dns-server = system, syslib, 8.8.8.8, 8.8.4.4
Une entrée peut comporter un port — 192.0.2.53:5353, ou [2001:db8::1]:5353 en IPv6. Les noms d'hôte ne sont pas acceptés dans dns-server ; pour un résolveur désigné par son nom, utilisez DoH, DoT, DoQ ou DoH3. Ceux-ci peuvent d'ailleurs s'écrire ici même, avec leur schéma — https://, tls://, quic:// ou h3:// — et rejoignent alors doh, dot, doq ou doh3, comme dans encrypted-dns-server.
Actuellement, il existe 5 services DoH intégrés. Les identifiants sont en minuscules et sensibles à la casse :
cloudflare(Cloudflare)google(Google)1111(1.1.1.1)securedns(SecureDNS)dnssb(DNS.SB)
Vous pouvez également configurer votre propre service DoH. Par exemple, si vous utilisez https://dns.nextdns.io/xxxxxx comme point de terminaison DoH NextDNS, vous pouvez procéder ainsi :
[General]
doh = google, dns.nextdns.io/xxxxxx
Une entrée DoH non valide est signalée comme une erreur de configuration et la ligne doh est rejetée. Une entrée qui ne donne qu'un hôte, sans chemin, est interrogée sur /dns-query.
Par compatibilité avec les configurations Surge, les orthographes doh-server et doh-service sont acceptées comme alias de doh.
Service DNS-over-TLS (DoT)
Vous pouvez configurer des services DoT pour chiffrer les requêtes DNS via TLS.
[General]
dot = dns.google, cloudflare-dns.com
Chaque entrée de service DoT doit être un nom de domaine prenant en charge DNS-over-TLS. Chute se connecte par défaut au nom d'hôte sur le port 853 ; une entrée peut également s'écrire host:port ou host:port:peer-name (utilisez [IPv6]:port pour les adresses IPv6) afin de remplacer le port et le nom de pair TLS.
Si le nom d'hôte DoT ne peut pas être résolu ou est injoignable, il sera silencieusement ignoré.
Vous pouvez mélanger DoT, DoH, DoQ, DoH3 et serveurs DNS traditionnels dans une même configuration :
[General]
dns-server = system, 8.8.8.8
doh = cloudflare
dot = dns.google
doq = dns.adguard.com
doh3 = https://dns.google/dns-query
Service DNS-over-QUIC (DoQ)
Vous pouvez configurer des serveurs DoQ pour chiffrer les requêtes DNS via QUIC.
[General]
doq = dns.adguard.com
Chaque entrée DoQ doit être un nom de domaine ou une adresse IP prenant en charge DNS-over-QUIC. Le port 853 est utilisé par défaut ; une entrée peut également s'écrire host:port ou host:port:peer-name (utilisez [IPv6]:port pour les adresses IPv6) afin de remplacer le port et le nom de pair TLS. Chute utilise le transport QUIC pour les requêtes DNS, ce qui offre une latence réduite par rapport au chiffrement DNS basé sur TCP.
Plusieurs serveurs DoQ peuvent être indiqués, séparés par des virgules :
[General]
doq = dns.adguard.com, dns.nextdns.io
Si un serveur DoQ est injoignable, il sera silencieusement ignoré.
Service DNS-over-HTTP/3 (DoH3)
Vous pouvez configurer des services DoH3 pour du DNS-over-HTTPS utilisant le transport HTTP/3 (QUIC).
[General]
doh3 = https://dns.google/dns-query
Chaque entrée DoH3 doit être une URL HTTPS complète vers un résolveur DNS prenant en charge HTTP/3. Plusieurs serveurs DoH3 peuvent être indiqués, séparés par des virgules :
[General]
doh3 = https://dns.google/dns-query, https://cloudflare-dns.com/dns-query
DoH3 combine la confidentialité de DNS-over-HTTPS aux avantages de performance du transport QUIC. Si un serveur DoH3 ne prend pas en charge HTTP/3 ou est injoignable, il sera silencieusement ignoré.
DNS sur TCP
[General]
dns-server = tcp://8.8.8.8, tcp://[2001:4860:4860::8888]:53
Un résolveur écrit tcp://IP[:port] est interrogé en TCP (RFC 7766) plutôt qu'en UDP ; le port par défaut est 53. C'est utile sur un réseau qui abandonne ou altère le DNS en UDP. Il est accepté partout où un résolveur classique l'est : dans dns-server, les pools DNS dédiés, le dns-server= d'une entrée de Suspension SSID et une liste server: de [Host]. Comme un résolveur classique, il n'accepte qu'une adresse IP — ni nom d'hôte, ni system, ni syslib. Les options par serveur, comme #disable-qtype=, s'appliquent normalement. Avec #proxy, la requête passe par cette politique, en TCP comme toute requête classique envoyée via une politique. encrypted-dns-server ne l'accepte pas.
Comment les serveurs sont interrogés
Lorsqu'un pool contient des serveurs chiffrés — DoH, DoT, DoQ ou DoH3 —, eux seuls sont interrogés, tous en même temps, et la première réponse est retenue. Les serveurs classiques de dns-server ne participent pas à une résolution ordinaire : une réponse non chiffrée peut être falsifiée par le réseau, et elle l'emporterait dès qu'elle arrive la première. Ils ne sont interrogés que dans deux cas : lorsqu'aucun serveur chiffré ne donne de réponse — chacun a échoué ou a dépassé le délai — et pour résoudre les noms d'hôte des serveurs chiffrés eux-mêmes. « Ce nom n'existe pas » et « aucun enregistrement de ce type », venant d'un serveur chiffré, sont des réponses et terminent la résolution. Un nom que seul le serveur DNS de votre propre réseau connaît — un routeur, un NAS, un hôte d'un réseau d'entreprise — n'est donc plus résolu dès que le pool contient un serveur chiffré ; dirigez ces noms vers ce serveur avec server: dans [Host]. Un pool sans serveur chiffré interroge ses serveurs classiques en même temps et retient la première réponse.
Un serveur qui laisse trois questions de suite sans réponse est ignoré pendant 5 secondes, puis deux fois plus longtemps à chaque fois qu'il reste muet, jusqu'à 60 secondes ; toute réponse de sa part le rétablit. Il est tout de même interrogé lorsque l'ignorer ne laisserait personne à interroger. Tant que tous les serveurs chiffrés d'un pool sont ignorés, ou réessayés après l'avoir été, ce sont les serveurs classiques qui répondent à leur place.
Une résolution qui échoue est mémorisée pendant 3 secondes — deux fois plus longtemps à chaque échec consécutif, jusqu'à 30 secondes — et, dans l'intervalle, le même nom échoue aussitôt au lieu d'attendre de nouveau les serveurs. Un changement de réseau efface cette mémoire.
Pools DNS dédiés
En plus du pool principal ci-dessus, trois pools facultatifs servent des noms particuliers :
[General]
direct-dns-server = 223.5.5.5, https://doh.pub/dns-query, system
proxy-dns-server = 1.1.1.1, tls://dns.google
fallback-dns-server = 8.8.8.8
direct-dns-server
Résout les domaines dont la règle aboutit à DIRECT : les résolutions que Chute effectue lorsqu'il établit une connexion directe, et la question d'une app lorsque cette question atteint le résolveur de Chute — une question envoyée au port d'écoute DNS de Chute, un nom figurant dans always-real-ip ou un type d'enregistrement autre que A et AAAA. Avec TUN, les questions A et AAAA des apps n'atteignent pas ce résolveur : la couche de fausse IP y répond directement, quoi que disent les règles. Seules les règles de domaine sont consultées : une question posée par une app pour un domaine qu'aucune règle de domaine ne couvre — un domaine dont le verdict dépend d'une règle IP telle que IP-CIDR ou GEOIP — suit donc FINAL : ce pool si FINAL vaut DIRECT, le pool principal s'il désigne un proxy. La résolution que Chute effectue lui-même pour un tel domaine passe par le pool principal, car la connexion n'est pas encore liée à DIRECT. Si la clé n'est pas définie, le pool principal répond à tout.
proxy-dns-server
Résout les noms d'hôte de vos serveurs proxy. Si la clé n'est pas définie, ils utilisent le pool principal. Si elle est définie, ce pool répond pour ces noms quel que soit le demandeur : Chute qui se connecte à un serveur, le rafraîchissement d'un enregistrement en cache ou la requête d'une application.
fallback-dns-server
Interrogé une fois lorsque le pool principal ne renvoie aucune réponse, juste avant l'échec de la résolution. Comme les autres clés DNS, elle peut être écrite dans [General] ou dans [DNS], et une seule fois.
Les entrées de ces pools peuvent mélanger les transports : ip[:port], [v6][:port], system, syslib, une URL DoH (https://…), tls://host[:port] pour DoT, quic://host[:port] pour DoQ et h3://… pour DoH3. Les entrées DNS classiques, DoH, DoT, DoQ et DoH3 peuvent se terminer par le suffixe #proxy ; system#proxy et syslib#proxy sont écartés avec un avertissement. Si direct-dns-server ou proxy-dns-server ne renvoie aucune réponse, la requête est relancée sur le pool principal. Chaque clé ne peut apparaître qu'une fois. Une entrée tcp://IP[:port] est interrogée en DNS sur TCP.
Pour la compatibilité avec Shadowrocket, dns-direct-system = true est lu comme direct-dns-server = system et enregistré sous cette forme. De même, dns-fallback-system = true ajoute system à fallback-dns-server ; lorsque le profil déclare aussi fallback-dns-server, les deux sont fusionnés en un seul pool.
Options du DNS chiffré
encrypted-dns-server
encrypted-dns-server = https://dns.google/dns-query, tls://dns.google, quic://dns.adguard.com, h3://cloudflare-dns.com/dns-query
La liste unique de Surge pour les résolveurs chiffrés. Chaque entrée rejoint doh, dot, doq ou doh3 selon son schéma (https://, tls://, quic://, h3://) ; tcp:// et les autres schémas sont ignorés avec un avis. Pour le DNS sur TCP, écrivez plutôt tcp:// dans dns-server ou dans un pool dédié — voir DNS sur TCP.
encrypted-dns-follow-outbound-mode (Par défaut : false)
encrypted-dns-follow-outbound-mode = true
Fait suivre aux connexions vers les serveurs DoH, DoT, DoQ et DoH3 le mode de sortie et les règles, comme n'importe quelle autre requête : en direct en mode Direct, via la politique sélectionnée en mode Global, et en mode Règle via la politique de la règle qui correspond — PROTOCOL,DOH, PROTOCOL,DOT, PROTOCOL,DOQ et PROTOCOL,DOH3 les reconnaissent. Un serveur dont le verdict est REJECT est ignoré. DoQ et DoH3 parlent QUIC : leur connexion passe donc par le relais UDP de la politique choisie. Quand cette politique — pour un groupe, son choix actuel — ne transporte pas d'UDP, udp-policy-not-supported-behaviour tranche : REJECT, la valeur par défaut, ignore ce serveur, et DIRECT l'interroge directement.
encrypted-dns-skip-cert-verification (Par défaut : false)
encrypted-dns-skip-cert-verification = true
Ne vérifie pas les certificats des serveurs DoH, DoT, DoQ et DoH3 — pour un résolveur doté d'un certificat autosigné. Cela supprime aussi la protection contre l'usurpation du résolveur.
Envoyer une requête via une politique
[General]
dns-server = 1.1.1.1#proxy, 8.8.8.8#proxy=HK
doh = https://dns.google/dns-query#proxy=Proxy%20Group
doq = dns.adguard.com#proxy=HK
Une entrée de dns-server, doh, dot, doq, doh3 ou de l'un des pools dédiés peut se terminer par #proxy ou #proxy=<policy> : la requête passe alors par cette politique au lieu de partir en direct. #proxy seul utilise la politique sélectionnée pour le mode Global ou, à défaut, la politique de la règle FINAL ; #proxy=<name> désigne une politique ou un groupe, les espaces s'écrivant %20. Une entrée DNS classique passe au DNS sur TCP, car toutes les politiques ne peuvent pas relayer l'UDP. Une entrée DoQ ou DoH3 garde QUIC, et sa connexion passe par le relais UDP de la politique : si la politique — pour un groupe, son choix actuel — ne transporte pas d'UDP, ce serveur est ignoré avec un avertissement, jamais interrogé directement. Si la politique n'existe pas ou aboutit à REJECT, ce serveur est ignoré. La résolution du nom d'hôte d'un serveur proxy lui-même n'utilise jamais un serveur passant par un proxy.
Options par serveur
[General]
dns-server = 1.1.1.1#disable-ipv6, 8.8.8.8#disable-qtype=65
doh = https://dns.google/dns-query#h3=true, https://10.0.0.1/dns-query#skip-cert-verify=true
Le même fragment # porte aussi des options qui ne valent que pour ce serveur. Plusieurs options se joignent avec &, et =true peut être omis :
h3=true— interroger ce serveur DoH en HTTP/3 plutôt qu'en HTTP/2.skip-cert-verify=true— ne pas vérifier le certificat de ce seul amont. Pour ce serveur, la protection contre un résolveur usurpé disparaît, exactement comme le faitencrypted-dns-skip-cert-verificationpour tous.disable-ipv4=true/disable-ipv6=true— ne jamais demander d'enregistrement A / AAAA à ce serveur.disable-qtype=65— ne jamais lui demander ce type d'enregistrement.disable-qtype-65a le même sens, et une liste séparée par des virgules en désactive plusieurs d'un coup :8.8.8.8#disable-qtype=65,64est une seule entrée dont les deux types sont désactivés. Le découpage en entrées tient compte du fragment#, si bien qu'une virgule située en dehors sépare toujours les serveurs —8.8.8.8#proxy, 1.1.1.1en fait deux.
Un serveur pour lequel un type de question est désactivé est écarté avant l'envoi de la requête : il ne consomme ni tentative ni délai d'attente. Si tous les serveurs du pool refusent ce type, la résolution échoue au lieu d'attendre des réponses que personne n'a envoyées.
Requêtes HTTPS et SVCB
allow-dns-svcb = true
Désactivé par défaut : les requêtes HTTPS (type 65) et SVCB (type 64) des apps reçoivent une réponse NOERROR vide au lieu d'être transmises, car les indications d'adresse de ces enregistrements permettraient à une app de se connecter en contournant la fausse IP et les règles. Réglez sur true pour les transmettre. Ce réglage couvre aussi les requêtes que les apps envoient par TUN, aussi bien vers l'adresse DNS de Chute elle-même que vers un résolveur que hijack-dns détourne. Les propres requêtes ECH de Chute ne sont pas concernées.