配置如下:
[General]
dns-server = 52.80.52.52, 117.50.10.10
doh-server = https://dns.cloudflare.com/dns-query
doh-follow-outbound-mode = true
[Rule]
DOMAIN,dns.pub,DIRECT
[Host]
dns.pub = server:52.80.52.52
AAA = server:https://dns.pub/dns-query
以上配置已验证过可以让指定的DoH走直连
在随机时间之后,会出现规则内指定的DoH不可用的问题,需要切换Final对应的节点才能恢复可用,即使切换两次回到原来的节点这种操作也是可以的
将Surge日志切换至verbose可看到返回503,但实际与此同时DoH服务器并不是不可用的状态,直接访问构造出来的url解析也是没有问题的:
2022-01-12 03:56:36.301347 <VERBOSE> [SGIncomingConnection-138] Request header: GET http://AAA/ HTTP/1.1
Host: AAA
Proxy-Connection: keep-alive
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 15_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.3 Mobile/15E148 Safari/604.1
Accept-Language: zh-HK,zh-Hant;q=0.9
Accept-Encoding: gzip, deflate
Connection: keep-alive
2022-01-12 03:56:36.301396 <VERBOSE> [SGIncomingConnection-138] <testRule (SGIncomingConnection.m:375)> Start policy test
2022-01-12 03:56:36.301471 <VERBOSE> [SGOutgoingSelector] <policyWithDescriptor:logger:callback: (SGOutgoingSelector.m:268)> Create new test context: AAA|(null)|Mozilla/5.0 (iPhone; CPU iPhone OS 15_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.3 Mobile/15E148 Safari/604.1|http://AAA/|127.0.0.1|6152|80|HTTP
2022-01-12 03:56:36.301600 <VERBOSE> [SGDNSClient] <lookupDomain:logger:completionHandler: (SGDNSClient.m:255)> Lookup domain: AAA
2022-01-12 03:56:36.301903 <VERBOSE> [SGDNSClient] <lookupDomain:logger:completionHandler: (SGDNSClient.m:313)> Found local item
2022-01-12 03:56:36.301939 <INFO> [SGDNSClient] New DNS lookup context: AAA
2022-01-12 03:56:36.301993 <VERBOSE> [SGDNSClient] <startQueryWithDomain:logger:upstreamServers:completionHandler: (SGDNSClient.m:515)> Disable traditional DNS for: AAA
2022-01-12 03:56:36.302028 <INFO> [SGDNSClient] Send DNS query #217 AAA
2022-01-12 03:56:36.302074 <VERBOSE> [SGDNSOverHTTPSSession-2] <_queryDomainWithDNSMessage:type:completionHandler: (SGDNSOverHTTPSSession.m:161)> Request with dns-message: AAA
2022-01-12 03:56:36.302107 <VERBOSE> [SGDNSOverHTTPSSession-2] <_queryDomainWithDNSMessage:type:completionHandler: (SGDNSOverHTTPSSession.m:162)> Type: 1
2022-01-12 03:56:36.302151 <VERBOSE> [SGDNSOverHTTPSSession-2] <queryWithRawData:completionHandler: (SGDNSOverHTTPSSession.m:185)> Reqeuest ID: 3066351483
2022-01-12 03:56:36.302228 <VERBOSE> [SGHTTPClient] <dataTaskWithURLRequest:configuration:completionHandler: (SGHTTPClient.m:101)> Request: https://dns.pub/dns-query?dns=AAA
2022-01-12 03:56:36.302277 <VERBOSE> [SGDNSClient] <startTimerIfNecessary (SGBaseObjectWithDispatchQueue.m:201)> Resume timer
2022-01-12 03:56:36.302371 <VERBOSE> [SGHTTPClient] <dataTaskWithURLRequest:configuration:completionHandler: (SGHTTPClient.m:114)> New data task created: https://dns.pub/dns-query?dns=AAA
2022-01-12 03:56:36.302432 <VERBOSE> [SGHTTPClient] <dataTaskWithURLRequest:configuration:completionHandler: (SGHTTPClient.m:145)> Reuse session: _SGHTTPClientSiteSession-8
2022-01-12 03:56:36.302470 <VERBOSE> [_SGHTTPClientSiteSession-8] <startTask: (SGHTTPClient.m:199)> Start task: SGHTTPClientDataTask-216
2022-01-12 03:56:36.302509 <VERBOSE> [_SGHTTPClientSiteSession-8] <h2ProcessTask (SGHTTPClient.m:834)> process task: SGHTTPClientDataTask-216 https://dns.pub/dns-query?dns=AAA
2022-01-12 03:56:36.302619 <VERBOSE> [_SGHTTPClientSiteSession-8] <h2ProcessTask (SGHTTPClient.m:908)> Add header: :method: GET
2022-01-12 03:56:36.302655 <VERBOSE> [_SGHTTPClientSiteSession-8] <h2ProcessTask (SGHTTPClient.m:908)> Add header: :scheme: https
2022-01-12 03:56:36.302689 <VERBOSE> [_SGHTTPClientSiteSession-8] <h2ProcessTask (SGHTTPClient.m:908)> Add header: :authority: dns.pub
2022-01-12 03:56:36.302724 <VERBOSE> [_SGHTTPClientSiteSession-8] <h2ProcessTask (SGHTTPClient.m:908)> Add header: :path: /dns-query?dns=AAA
2022-01-12 03:56:36.302770 <VERBOSE> [_SGHTTPClientSiteSession-8] <h2ProcessTask (SGHTTPClient.m:908)> Add header: accept: application/dns-message
2022-01-12 03:56:36.302804 <VERBOSE> [_SGHTTPClientSiteSession-8] <h2ProcessTask (SGHTTPClient.m:908)> Add header: accept-encoding: gzip, deflate, br
2022-01-12 03:56:36.302837 <VERBOSE> [_SGHTTPClientSiteSession-8] <h2ProcessTask (SGHTTPClient.m:908)> Add header: user-agent: CFNetwork/1327.0.4 Darwin/21.3.0
2022-01-12 03:56:36.302875 <VERBOSE> [_SGHTTPClientSiteSession-8] <h2ProcessTask (SGHTTPClient.m:941)> New stream ID: 275
2022-01-12 03:56:36.325018 <VERBOSE> [_SGHTTPClientSiteSession-8] <on_begin_headers_callback: (SGHTTPClient.m:598)> Response headers for stream ID=275
2022-01-12 03:56:36.325088 <VERBOSE> [_SGHTTPClientSiteSession-8] <on_header_callback:name:value: (SGHTTPClient.m:565)> Header :status: 503
2022-01-12 03:56:36.325129 <VERBOSE> [_SGHTTPClientSiteSession-8] <on_header_callback:name:value: (SGHTTPClient.m:565)> Header server: nginx
2022-01-12 03:56:36.325167 <VERBOSE> [_SGHTTPClientSiteSession-8] <on_header_callback:name:value: (SGHTTPClient.m:565)> Header date: Tue, 11 Jan 2022 19:56:36 GMT
2022-01-12 03:56:36.325200 <VERBOSE> [_SGHTTPClientSiteSession-8] <on_header_callback:name:value: (SGHTTPClient.m:565)> Header content-type: application/json; charset=UTF-8
2022-01-12 03:56:36.325234 <VERBOSE> [_SGHTTPClientSiteSession-8] <on_header_callback:name:value: (SGHTTPClient.m:565)> Header content-length: 114
2022-01-12 03:56:36.325265 <VERBOSE> [_SGHTTPClientSiteSession-8] <on_header_callback:name:value: (SGHTTPClient.m:565)> Header access-control-allow-origin: *
2022-01-12 03:56:36.325297 <VERBOSE> [_SGHTTPClientSiteSession-8] <on_header_callback:name:value: (SGHTTPClient.m:565)> Header strict-transport-security: max-age=31536000; includeSubDomains; preload
2022-01-12 03:56:36.325351 <VERBOSE> [_SGHTTPClientSiteSession-8] <on_frame_recv_callback: (SGHTTPClient.m:619)> on_frame_recv_callback, type: 1
2022-01-12 03:56:36.325377 <VERBOSE> [_SGHTTPClientSiteSession-8] <on_frame_recv_callback: (SGHTTPClient.m:624)> All headers received ID=275
2022-01-12 03:56:36.325407 <VERBOSE> [_SGHTTPClientSiteSession-8] <on_frame_recv_callback: (SGHTTPClient.m:619)> on_frame_recv_callback, type: 0
2022-01-12 03:56:36.325434 <VERBOSE> [_SGHTTPClientSiteSession-8] <on_stream_close_callback:errorCode: (SGHTTPClient.m:679)> Stream closed: 275, error code: 0
2022-01-12 03:56:36.325583 <VERBOSE> [SGDNSOverHTTPSSession-2] <queryWithRawData:completionHandler: (SGDNSOverHTTPSSession.m:197)> Receive DNS response in 23.43 ms, ID: 3066351483
2022-01-12 03:56:36.325618 <WARNING> [SGDNSOverHTTPSSession-2] DoH server returned an unexpected status code: 503, {"Status":2,"Comment":"DNS query failure (read udp 127.0.0.1:37361-\u003e127.0.0.1:53: read: connection refused)"}
2022-01-12 03:56:36.325653 <INFO> [SGDNSClient] Receive empty answer for AAA from https://dns.pub/dns-query
2022-01-12 03:56:36.325681 <INFO> [SGDNSClient] All server has return an empty A answer
2022-01-12 03:56:36.325709 <VERBOSE> [SGDNSClient] <completeLookup: (SGDNSClient.m:750)> completeLookup: AAA
2022-01-12 03:56:36.325755 <VERBOSE> [SGDNSClient] <endContext:withResult:error: (SGDNSClient.m:786)> endContext: AAA
2022-01-12 03:56:36.325805 <VERBOSE> [SGDNSClient] <closeSocketsForContext: (SGDNSClientBase.m:38)> closeSocketsForContext: SGDNSClientContext-218
2022-01-12 03:56:36.325861 <INFO> [SGOutgoingSelector] (DNS failed): AAA
2022-01-12 03:56:36.325900 <VERBOSE> [SGOutgoingSelector] <finalPolicyForPolicyName:targetHostname:userAgent:dnsResult:completionHandler: (SGOutgoingSelector+PolicyGroup.m:64)> finalPolicyForPolicyName: Selector
想起来有一点忘记补充了.. 只要不切,永远就是503,DNSPod虽然知了名的SLA坑,但总不能一整天都挂掉吧..