DNS
Chute는 고급 기능을 지원하기 위해 사용자 정의 DNS 클라이언트를 사용합니다. 운영 체제의 DNS 클라이언트와 다르게 동작할 수 있습니다.
Chute는 세션에 DIRECT 규칙이 적용될 때 DNS 서버 역할을 합니다. Chute는 먼저 호스트의 DNS 레코드를 확인한 후, DNS 레코드에서 반환된 IP로 소켓을 초기화합니다. 이 방법을 통해 DIRECT 규칙이 적용된 모든 세션은 시스템 DNS 설정을 우회하고 Chute DNS 서버로 라우팅됩니다.
Chute iOS는 시스템 DNS 서버를 Chute DNS 서버로 구성합니다.
업스트림 DNS 서버
Chute는 기본적으로 운영 체제의 DNS 서버 주소를 사용합니다. 'dns-server' 옵션을 사용하여 DNS 서버, DoH(DNS-over-HTTPS), DoT(DNS-over-TLS), DoQ(DNS-over-QUIC), DoH3(DNS-over-HTTP/3) 서비스로 재정의할 수 있습니다.
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: 형식의 접두사도 없는 key = value는 별칭이 되므로, 여기에 잘못 놓인 [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는 '--all-servers' 매개변수를 사용하는 dnsmasq와 유사하게 성능 향상을 위해 모든 DNS 서버에 동시에 질의합니다. 서버에서 가장 먼저 응답한 결과가 사용됩니다. Chute iOS 앱과 Chute Dashboard는 어떤 서버가 먼저 응답했는지 표시합니다. Chute가 2초 내에 응답을 받지 못하면 모든 서버에 다시 질의합니다. 단, 재시도에는 DNS 서버, DoT, DoQ 업스트림만 참여하며, DoH, DoH3, syslib은 첫 번째 라운드에서만 질의됩니다. 3회 재시도(총 4회 시도) 후 또는 10초가 지나면 Chute는 포기하고 DNS 오류를 보고합니다. 이 재시도는 Chute 자체의 조회와, Chute가 TUN 인터페이스 및 SOCKS5 UDP 릴레이에서 넘겨받은 질의에 적용됩니다. Chute의 DNS 수신 포트로 직접 보낸 질의는 서버에 한 번만 전달되고 재시도되지 않으므로, 그 클라이언트 자체의 재시도가 이를 대신합니다.
어떤 서버에 질의할지는 도메인 이름에 따라 달라집니다. 규칙 판정이 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 응답을 반환하거나, 일부 서버가 빈 응답을 반환하고 다른 서버가 3초 내에 응답하지 못하는 경우 빈 DNS 오류를 보고합니다.
일부 DNS 레코드는 설정으로 인해 TTL이 매우 짧지만, Chute는 최소 TTL 60초를 강제합니다: 60초보다 짧은 TTL은 60초로 올립니다. 낙관적 DNS는 기본적으로 활성화되어 있으며, 캐시된 DNS 결과를 즉시 반환하면서 백그라운드에서 새로고침합니다. optimistic-dns = false로 비활성화할 수 있습니다. 영역의 SOA 레코드를 담은 NXDOMAIN 응답도 캐시되며, 그 기간은 SOA 레코드가 부정 응답에 대해 지정한 시간이되 60초에서 하루 사이로 제한됩니다. 만료될 때까지 그 이름에는 서버에 다시 묻지 않고 NXDOMAIN으로 응답합니다. [Host] 매핑 또는 별칭이 우선하는 이름에는 업스트림 NXDOMAIN 응답을 캐시하지 않습니다.
DNS 캐시는 200개 레코드를 보관합니다. iOS와 tvOS에서는 무제한으로 커지도록 허용되지 않습니다. 무제한 캐시 요청은 거부되고 200개 레코드 캐시가 유지되며 알림이 기록됩니다.
IPv6를 사용할 수 있고 활성화된 경우, Chute DNS 클라이언트는 업스트림 DNS 서버에 A 및 AAAA 질의를 모두 보냅니다. 가장 먼저 반환된 A 또는 AAAA 응답이 사용됩니다. 단일 스택 네트워크에서는 현재 라우팅할 수 없는 주소 패밀리의 응답은 다른 패밀리를 위해 보류되며, 다른 패밀리에서 아무 결과도 얻지 못한 경우에만 대안으로 사용됩니다.
이 페이지는 영어판의 번역본입니다. 내용이 다를 경우 영어판이 우선합니다.