Chute uses a customized DNS client to support advanced features. It may behave differently from the DNS client of your operating system.
Chute will play as DNS server when session applied DIRECT rule. Chute will check the DNS record of host first, then initial the socket with IP returned in the DNS record. With this method, all session applied DIRECT rule will bypass system DNS configuration and route with Chute DNS server.
Chute iOS will config system DNS server to Chute DNS server.
Upstream DNS Server
Chute uses the DNS server addresses from the operating system by default. You can override them with DNS server and DoH (DNS-over-HTTPS) service using 'dns-server' option.
Chute simultaneously queries all DNS servers to improve performance, similar to dnsmasq with '--all-servers' parameter. The first answer from servers will be used. Chute iOS app and Chute Dashboard will show which server responds first. If Chute has not received any answer in 2 seconds, it will query all servers again. After 4 retries, Chute will give up and report DNS error.
Some domain names may have poorly-performing authoritative name servers, causing upstream DNS servers to return empty answer due to server-side timeout or other connectivity issues. Chute will report empty DNS error to upstream DNS servers explicitly return empty DNS answers, or if some servers return empty answers and others fail to respond in 2 seconds.
Some DNS record has very short TTL due to configuration, Chute will not follow and TTL under 5 minutes. Optimistic DNS will be implemented in future version.
When IPv6 is available and enabled, Chute DNS client will send both A and AAAA questions to upstream DNS Servers. The first A or AAAA answer returned will be used.