DNS
Chute utilise un client DNS personnalisé afin de prendre en charge des fonctions avancées. Son comportement peut différer de celui du client DNS de votre système d'exploitation.
Chute joue le rôle de serveur DNS lorsqu'une session applique la règle DIRECT. Chute vérifie d'abord l'enregistrement DNS de l'hôte, puis établit le socket avec l'IP renvoyée dans cet enregistrement. Avec cette méthode, toute session appliquant la règle DIRECT contourne la configuration DNS du système et passe par le serveur DNS de Chute.
Chute iOS configure le serveur DNS du système sur le serveur DNS de Chute.
Serveur DNS amont
Chute utilise par défaut les adresses de serveur DNS du système d'exploitation. Vous pouvez les remplacer par des serveurs DNS ou des services DoH (DNS-over-HTTPS), DoT (DNS-over-TLS), DoQ (DNS-over-QUIC) et DoH3 (DNS-over-HTTP/3) au moyen de l'option 'dns-server'.
Section DNS
Les options DNS s'écrivent normalement dans [General], mais elles peuvent tout aussi bien figurer dans une section de premier niveau [DNS] : dns-server, doh (alias 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 et always-real-ip se comportent de la même façon dans l'une ou l'autre section. Cette même section accepte également les lignes de mappage DNS local, la forme par domaine utilisée dans [Host] ; les deux formes de ligne peuvent donc coexister dans une même section. Toute autre clé est d'abord lue comme une ligne de mappage : un clé = valeur sans adresse IP ni préfixe de la forme server: devient un alias, si bien qu'une clé [General] mal placée ici — optimistic-dns = false — fait silencieusement pointer le nom optimistic-dns vers false au lieu de lever une erreur. Seule une ligne que l'analyseur de mappage rejette lui aussi est ignorée avec un avis dans le journal. fallback-dns-server et encrypted-dns-skip-cert-verification sont également lus ici.
[DNS]
doh = https://dns.google/dns-query
always-real-ip = *.lan
*.example.com = server:1.1.1.1
Détails
Chute interroge simultanément tous les serveurs DNS afin d'améliorer les performances, à la manière de dnsmasq avec le paramètre « --all-servers ». La première réponse reçue est utilisée. L'app Chute iOS et Chute Dashboard indiquent quel serveur a répondu en premier. Si Chute n'a reçu aucune réponse en 2 secondes, il interroge à nouveau tous les serveurs. Notez que seuls les serveurs DNS classiques, DoT et DoQ participent aux nouvelles tentatives ; DoH, DoH3 et syslib ne sont interrogés que lors du premier tour. Après 3 nouvelles tentatives (4 tentatives au total) ou 10 secondes, Chute abandonne et signale une erreur DNS. Ces nouvelles tentatives couvrent les résolutions que Chute effectue lui-même et les questions qu'il prend en charge depuis l'interface TUN et le relais UDP SOCKS5 ; une question envoyée directement au port d'écoute DNS de Chute n'est transmise aux serveurs qu'une seule fois, sans nouvelle tentative : ce sont alors les nouvelles tentatives de son propre client qui prennent le relais.
Les serveurs interrogés dépendent du nom. Un domaine dont la règle aboutit à DIRECT utilise direct-dns-server s'il est défini, les noms d'hôte des serveurs proxy utilisent proxy-dns-server, un domaine doté d'un mappage DNS local utilise le serveur qui y est indiqué, et tout le reste utilise le pool principal (dns-server, doh, dot, doq, doh3). direct-dns-server traite les résolutions que Chute effectue lorsqu'il établit une connexion directe, et la question d'une app uniquement lorsque cette question atteint le résolveur de Chute : avec TUN, les questions A et AAAA des apps reçoivent plutôt de fausses adresses IP en réponse. Si un pool dédié ne renvoie aucune réponse, la requête est relancée sur le pool principal ; si le pool principal ne renvoie aucune réponse, fallback-dns-server est interrogé une fois avant que l'erreur ne soit signalée.
Certains noms de domaine possèdent des serveurs de noms faisant autorité peu performants, ce qui amène les serveurs DNS amont à renvoyer une réponse vide en raison d'un délai dépassé côté serveur ou d'autres problèmes de connectivité. Chute signale une erreur de DNS vide lorsque les serveurs DNS amont renvoient explicitement des réponses DNS vides, ou lorsque certains serveurs renvoient des réponses vides tandis que d'autres ne répondent pas en 3 secondes.
Certains enregistrements DNS ont un TTL très court du fait de leur configuration ; Chute impose un TTL minimal de 60 secondes : les TTL plus courts sont portés à 60 secondes. Le DNS optimiste est activé par défaut — le résultat DNS en cache est renvoyé immédiatement pendant qu'il est actualisé en arrière-plan. Il peut être désactivé via optimistic-dns = false. Une réponse NXDOMAIN qui porte l'enregistrement SOA de la zone est elle aussi mise en cache, pour la durée que cet enregistrement fixe pour les réponses négatives, bornée entre 60 secondes et un jour ; jusqu'à son expiration, le nom reçoit la réponse NXDOMAIN sans que les serveurs soient interrogés de nouveau. Une réponse NXDOMAIN du serveur amont n'est pas mise en cache si le nom est couvert par un mappage ou un alias [Host] ; le mappage ou l'alias est prioritaire.
Le cache DNS conserve 200 enregistrements. Sous iOS et tvOS, il n'est jamais autorisé à croître sans limite : une demande de cache illimité est refusée, le cache de 200 enregistrements est conservé et un avis le signale.
Lorsque l'IPv6 est disponible et activé, le client DNS de Chute envoie à la fois des questions A et AAAA aux serveurs DNS amont. La première réponse A ou AAAA reçue est utilisée. Sur les réseaux à pile unique, une réponse portant sur une famille d'adresses actuellement non routable est mise en retrait au profit de l'autre famille, et n'est utilisée qu'en secours lorsque l'autre famille ne donne rien.