DNS 서버
이 옵션을 사용하여 시스템의 DNS 설정을 재정의할 수 있습니다. Chute는 DNS 서버, DoH(DNS-over-HTTPS), DoT(DNS-over-TLS), DoQ(DNS-over-QUIC), 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
system 키워드를 사용하여 시스템 설정에 추가 DNS 서버를 덧붙일 수 있습니다. (중복 서버는 무시됩니다)
syslib 키워드를 사용하여 시스템 내장 API로 DNS 결과를 가져올 수 있습니다. macOS에서는 TUN 인터페이스가 활성화되어 있는 동안 풀 수준의 syslib을 건너뜁니다. 그때는 시스템 리졸버가 다시 Chute를 가리키기 때문입니다. [Host]의 server:syslib과 .local 경로는 그대로 사용합니다.
[General]
dns-server = system, syslib, 8.8.8.8, 8.8.4.4
항목에는 포트를 붙일 수 있습니다. 192.0.2.53:5353, IPv6는 [2001:db8::1]:5353처럼 씁니다. dns-server에는 호스트 이름을 쓸 수 없으므로, 이름으로 알려진 리졸버에는 DoH, DoT, DoQ, DoH3를 사용하세요. 이들도 스킴(https://, tls://, quic://, h3://)을 붙이면 바로 이곳에 적을 수 있으며, encrypted-dns-server에서처럼 각각 doh, dot, doq, doh3에 들어갑니다.
현재 5개의 내장 DoH 서비스가 있습니다. 식별자는 소문자이며 대소문자를 구분합니다:
cloudflare(Cloudflare)google(Google)1111(1.1.1.1)securedns(SecureDNS)dnssb(DNS.SB)
개인 DoH 서비스를 구성할 수도 있습니다. 예를 들어, NextDNS DoH 엔드포인트로 https://dns.nextdns.io/xxxxxx를 사용하는 경우 다음과 같이 구성할 수 있습니다:
[General]
doh = google, dns.nextdns.io/xxxxxx
유효하지 않은 DoH 항목은 구성 오류로 보고되며 해당 doh 줄은 거부됩니다.
Surge 구성과의 호환성을 위해 doh-server와 doh-service 표기도 doh의 별칭으로 허용됩니다.
DNS-over-TLS (DoT) 서비스
TLS를 통해 DNS 질의를 암호화하기 위해 DoT 서비스를 구성할 수 있습니다.
[General]
dot = dns.google, cloudflare-dns.com
각 DoT 서비스 항목은 DNS-over-TLS를 지원하는 도메인 이름이어야 합니다. Chute는 기본적으로 포트 853으로 호스트명에 연결하며, 항목을 host:port 또는 host:port:peer-name 형식으로 작성하여(IPv6 주소는 [IPv6]:port 사용) 포트와 TLS 피어 이름을 재정의할 수도 있습니다.
DoT 호스트명을 해석할 수 없거나 도달할 수 없는 경우 조용히 건너뜁니다.
동일한 구성에서 DoT, DoH, DoQ, DoH3 및 기존 DNS 서버를 혼합할 수 있습니다:
[General]
dns-server = system, 8.8.8.8
doh = cloudflare
dot = dns.google
doq = dns.adguard.com
doh3 = https://dns.google/dns-query
DNS-over-QUIC (DoQ) 서비스
QUIC를 통해 DNS 질의를 암호화하기 위해 DoQ 서버를 구성할 수 있습니다.
[General]
doq = dns.adguard.com
각 DoQ 항목은 DNS-over-QUIC를 지원하는 도메인 이름 또는 IP 주소여야 합니다. 기본적으로 포트 853이 사용되며, 항목을 host:port 또는 host:port:peer-name 형식으로 작성하여(IPv6 주소는 [IPv6]:port 사용) 포트와 TLS 피어 이름을 재정의할 수도 있습니다. Chute는 DNS 질의에 QUIC 전송을 사용하여 TCP 기반 DNS 암호화에 비해 지연 시간을 줄입니다.
여러 DoQ 서버를 쉼표로 구분하여 지정할 수 있습니다:
[General]
doq = dns.adguard.com, dns.nextdns.io
DoQ 서버에 도달할 수 없는 경우 조용히 건너뜁니다.
DNS-over-HTTP/3 (DoH3) 서비스
HTTP/3(QUIC) 전송을 사용하는 DNS-over-HTTPS를 위해 DoH3 서비스를 구성할 수 있습니다.
[General]
doh3 = https://dns.google/dns-query
각 DoH3 항목은 HTTP/3을 지원하는 DNS 리졸버의 전체 HTTPS URL이어야 합니다. 여러 DoH3 서버를 쉼표로 구분하여 지정할 수 있습니다:
[General]
doh3 = https://dns.google/dns-query, https://cloudflare-dns.com/dns-query
DoH3는 DNS-over-HTTPS의 프라이버시와 QUIC 전송의 성능 이점을 결합합니다. DoH3 서버가 HTTP/3을 지원하지 않거나 도달할 수 없는 경우 조용히 건너뜁니다.
DNS over TCP
[General]
dns-server = tcp://8.8.8.8, tcp://[2001:4860:4860::8888]:53
tcp://IP[:port]로 적은 리졸버에는 UDP 대신 TCP(RFC 7766)로 질의합니다. 포트 기본값은 53입니다. UDP DNS를 버리거나 변조하는 네트워크에서 사용하세요. 일반 리졸버를 쓸 수 있는 곳이면 어디서나 받습니다: dns-server, 전용 DNS 풀, SSID 일시 중단 항목의 dns-server=, [Host]의 server: 목록입니다. 일반 리졸버처럼 IP 주소만 받으며 호스트 이름, system, syslib은 쓸 수 없습니다. #disable-qtype= 같은 서버별 옵션은 평소처럼 적용됩니다. #proxy를 붙이면 질의는 그 정책을 거쳐 전송되며, 정책을 거치는 일반 질의와 마찬가지로 TCP를 사용합니다. encrypted-dns-server에는 쓸 수 없습니다.
전용 DNS 풀
위의 기본 풀 외에, 특정 이름을 담당하는 선택적 풀이 세 가지 있습니다.
[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
규칙 판정이 DIRECT인 도메인을 해석합니다. Chute가 직접 연결을 맺을 때 스스로 하는 조회, 그리고 Chute의 리졸버에 도달한 앱의 질의 — Chute의 DNS 수신 포트로 보낸 질의, always-real-ip에 나열된 이름에 대한 질의, 또는 A와 AAAA가 아닌 레코드 유형의 질의 — 가 해당됩니다. TUN에서는 앱의 A와 AAAA 질의가 리졸버에 도달하지 않습니다: 규칙이 무엇이라 하든 가짜 IP 계층이 직접 응답합니다. 도메인 규칙만 참조하므로, 어떤 도메인 규칙과도 일치하지 않는 도메인 — 판정이 IP-CIDR나 GEOIP 같은 IP 규칙에 달려 있는 도메인 — 에 대한 앱의 질의는 FINAL을 따릅니다. FINAL이 DIRECT이면 이 풀이, 프록시이면 기본 풀이 응답합니다. 그런 도메인에 대해 Chute가 스스로 하는 조회는 연결이 아직 DIRECT로 확정되지 않았으므로 기본 풀을 사용합니다. 이 키를 설정하지 않으면 모든 질의에 기본 풀이 응답합니다.
proxy-dns-server
프록시 서버 자체의 호스트 이름을 해석합니다. 이 키를 설정하지 않으면 기본 풀을 사용합니다.
fallback-dns-server
기본 풀이 아무 응답도 주지 않을 때, 조회가 실패하기 직전에 한 번 질의합니다. 다른 DNS 키와 마찬가지로 [General]이나 [DNS]에 쓸 수 있으며, 한 번만 쓸 수 있습니다.
이 풀들의 항목에는 여러 전송 방식을 섞어 쓸 수 있습니다. ip[:port], [v6][:port], system, syslib, DoH URL(https://…), DoT용 tls://host[:port], DoQ용 quic://host[:port], DoH3용 h3://…입니다. 일반 DNS 항목과 DoH, DoT, DoQ, DoH3 항목 끝에는 #proxy 접미사를 붙일 수 있습니다. system#proxy와 syslib#proxy는 경고와 함께 건너뜁니다. direct-dns-server나 proxy-dns-server가 응답하지 않으면 기본 풀로 다시 질의합니다. 각 키는 한 번만 쓸 수 있습니다. tcp://IP[:port] 항목은 DNS over TCP로 질의합니다.
Shadowrocket과의 호환을 위해 dns-direct-system = true는 direct-dns-server = system으로 읽히며, 그 형태로 저장됩니다. 마찬가지로 dns-fallback-system = true는 fallback-dns-server에 system을 추가하며, 프로필이 fallback-dns-server도 선언한 경우 둘은 하나의 풀로 합쳐집니다.
암호화된 DNS 옵션
encrypted-dns-server
encrypted-dns-server = https://dns.google/dns-query, tls://dns.google, quic://dns.adguard.com, h3://cloudflare-dns.com/dns-query
암호화 리졸버를 한데 적는 Surge의 목록입니다. 각 항목은 스킴(https://, tls://, quic://, h3://)에 따라 doh, dot, doq, doh3 중 하나에 들어갑니다. tcp://와 그 밖의 스킴은 알림을 남기고 무시됩니다. DNS over TCP는 tcp://를 dns-server나 전용 풀에 적으세요 — DNS over TCP를 참고하세요.
encrypted-dns-follow-outbound-mode (기본값: false)
encrypted-dns-follow-outbound-mode = true
DoH, DoT, DoQ, DoH3 업스트림으로 가는 연결이 다른 요청처럼 아웃바운드 모드와 규칙을 따르게 합니다. 다이렉트 모드에서는 직접 연결하고, 글로벌 모드에서는 선택된 정책을, 규칙 모드에서는 일치한 규칙의 정책을 사용합니다. PROTOCOL,DOH, PROTOCOL,DOT, PROTOCOL,DOQ, PROTOCOL,DOH3 규칙이 이 연결에 일치합니다. 판정이 REJECT인 업스트림은 건너뜁니다. DoQ와 DoH3는 QUIC을 쓰므로 그 연결은 선택된 정책의 UDP 릴레이를 거칩니다. 그 정책(그룹이면 현재 선택)이 UDP를 나르지 않으면 udp-policy-not-supported-behaviour가 결정합니다. 기본값 REJECT는 그 업스트림을 건너뛰고, DIRECT는 직접 질의합니다.
encrypted-dns-skip-cert-verification (기본값: false)
encrypted-dns-skip-cert-verification = true
DoH, DoT, DoQ, DoH3 업스트림의 인증서를 검증하지 않습니다. 자체 서명 인증서를 쓰는 리졸버를 위한 옵션이며, 리졸버 사칭에 대한 보호도 함께 사라집니다.
정책을 거쳐 질의 보내기
[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
dns-server, doh, dot, doq, doh3 또는 전용 풀의 항목 끝에 #proxy나 #proxy=<policy>를 붙이면, 질의가 직접 나가지 않고 그 정책을 거쳐 전송됩니다. #proxy만 쓰면 글로벌 모드에서 선택된 정책을, 없으면 FINAL 규칙의 정책을 사용합니다. #proxy=<name>은 정책이나 정책 그룹을 지정하며, 이름의 공백은 %20으로 씁니다. 모든 정책이 UDP를 중계할 수 있는 것은 아니므로 일반 DNS 항목은 DNS over TCP로 바뀝니다. DoQ나 DoH3 항목은 QUIC을 그대로 쓰며, 그 연결은 정책의 UDP 릴레이를 거칩니다. 정책(그룹이면 현재 선택)이 UDP를 나르지 않으면 그 업스트림은 경고와 함께 건너뛰며, 직접 질의하는 일은 없습니다. 존재하지 않거나 REJECT로 해석되는 정책이면 그 업스트림은 건너뜁니다. 프록시 서버 자체의 호스트 이름 조회는 프록시를 거치는 업스트림을 절대 사용하지 않습니다.
서버별 옵션
[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
같은 # 조각에는 그 서버에만 적용되는 옵션도 담을 수 있습니다. 여러 개는 &로 잇고, =true는 생략할 수 있습니다.
h3=true— 해당 DoH 서버에 HTTP/2 대신 HTTP/3으로 질의합니다.skip-cert-verify=true— 이 업스트림 하나의 인증서를 검증하지 않습니다. 그 서버에 대해서는 위장된 리졸버로부터의 보호가 사라지며, 전역encrypted-dns-skip-cert-verification이 모든 업스트림에 대해 하는 것과 같습니다.disable-ipv4=true/disable-ipv6=true— 그 서버에 A / AAAA 레코드를 절대 묻지 않습니다.disable-qtype=65— 그 레코드 유형을 묻지 않습니다.disable-qtype-65도 같은 뜻이며, 쉼표로 나열하면 여러 유형을 한 번에 끕니다.8.8.8.8#disable-qtype=65,64는 두 유형을 모두 끈 하나의 항목입니다. 항목을 나눌 때#조각을 함께 고려하므로, 조각 바깥의 쉼표는 여전히 서버를 구분합니다.8.8.8.8#proxy, 1.1.1.1은 서버 두 개입니다.
질의 유형이 비활성화된 서버는 질의를 보내기 전에 건너뛰므로 시도 횟수도 타임아웃도 쓰지 않습니다. 풀의 모든 서버가 그 유형을 거부하면, 아무도 보내지 않은 응답을 기다리지 않고 조회가 실패합니다.
HTTPS 및 SVCB 질의
allow-dns-svcb = true
기본값은 꺼짐입니다. 앱이 보내는 HTTPS(유형 65)와 SVCB(유형 64) 질의에는 업스트림으로 전달하지 않고 빈 NOERROR 응답을 돌려줍니다. 이 레코드의 주소 힌트를 쓰면 앱이 가짜 IP와 규칙을 우회해 연결할 수 있기 때문입니다. true로 설정하면 전달합니다. 이 스위치는 앱이 TUN을 거쳐 보내는 질의에도 적용되며, Chute 자체의 DNS 주소로 보낸 질의와 hijack-dns가 하이재킹하는 리졸버로 보낸 질의 모두가 해당됩니다. Chute 자체의 ECH 조회에는 영향이 없습니다.
이 페이지는 영어판의 번역본입니다. 내용이 다를 경우 영어판이 우선합니다.