DNS代理¶
与域名解析器类似,DNS代理服务支持多种协议类型,支持自定义域名解析(映射器),具有缓存功能,并支持转发链。
mode
(string, default=udp)- DNS代理模式
udp
- UDP模式(DNS over UDP)tcp
- TCP模式(DNS over TCP)tls
- TLS模式(DNS over TLS)https
- HTTPS模式(DNS over HTTPS)
每个上级DNS服务的格式为:[protocol://]ip[:port]
。
protocol
支持的类型有udp,tcp,tls,https。默认值为udp。
port
默认值为53。
例如:
- udp://1.1.1.1:53,或udp://1.1.1.1
- tcp://1.1.1.1:53
- tls://1.1.1.1:853
- https://1.0.0.1/dns-query
自定义域名解析¶
通过设置主机IP映射器,可以对域名进行自定义解析。
services:
- name: service-0
addr: :10053
hosts: hosts-0
handler:
type: dns
listener:
type: dns
metadata:
mode: udp
forwarder:
nodes:
- name: target-0
addr: 1.1.1.1
hosts:
- name: hosts-0
mappings:
- ip: 127.0.0.1
hostname: example.org
- ip: ::1
hostname: example.org
- ip: 2001:db8::1
hostname: example.com
此时解析example.org会匹配到映射器而不会使用1.1.1.1查询。
DNS查询example.org(ipv4)
DNS查询example.org(ipv6)
解析example.com时,由于ipv4在映射器中无对应项,因此会使用1.1.1.1进行解析。
DNS查询example.com(ipv4)
DNS查询example.com(ipv6)
分流¶
通过在DNS代理服务上和转发器的节点上设置分流器可以实现对DNS查询的分流。
服务上的分流器¶
当DNS代理服务本身设置了分流器,如果DNS查询的域名未通过分流器规则测试(未匹配白名单规则或匹配黑名单规则),则DNS代理服务返回空结果。
当查询example.com
时,未通过服务上的分流器bypass-0,查询将返回空结果。
当查询example.org
时,通过服务上的分流器bypass-0,查询将正常返回结果。
DNS查询example.org(ipv4)
目标节点上的分流器¶
类似于转发链节点上的分流器,DNS代理服务的转发器节点上也可以通过设置转发器来实现精细化分流。
当查询example.org
时,未通过目标节点target-0上的分流器bypass-0,通过了目标节点target-1的分流器bypass-1,查询将转发给节点target-1进行处理。
当查询example.com
时,通过目标节点target-0上的分流器bypass-0,未通过目标节点target-1的分流器bypass-1,查询将转发给节点target-0进行处理。
缓存¶
通过ttl
选项可以设置缓存时长,默认使用DNS查询返回结果中的TTL,当设置为负值则不使用缓存。
异步查询¶
通过async
选项设置对上级DNS服务的查询请求为异步,此时当缓存失效后仍旧返回客户端缓存中的结果,同时再向上级DNS代理服务异步发送查询请求并更新缓存。
ECS¶
通过clientIP
选项设置客户端IP,开启ECS(EDNS Client Subnet)扩展功能。