DNS项目
1、启动时使用bootstrap-nameservers中定义的type为doh的域名进行dns解析,将解析结果缓存到缓冲池中(程序内部需要维护一个dns查询缓冲池,使用乐观缓存的异步查询模式,严格遵守ttl) 2、解析每个nameservers,形成nameserver对象,对象需要实现dns查询
1、启动时使用bootstrap-nameservers中定义的type为doh的域名进行dns解析,将解析结果缓存到缓冲池中(程序内部需要维护一个dns查询缓冲池,使用乐观缓存的异步查询模式,严格遵守ttl)
2、解析每个nameservers,形成nameserver对象,对象需要实现dns查询的方法
3、启动后监听listen端口,接受udp的dns查询请求
4、加载nameserver-group,nameserver-policy中的配置,用于对dns查询的结果进行规则匹配,如果匹配到了- GEOIP:CN,CN,则判断这个ip是否在CN中,如果在,则使用name为CN的nameserver-group中返回返回结果的dns结果返回
5、当listen的端收到dns查询请求时,并发调用所有nameservers中配置的dns服务器进行dns查询
6、启动时需要加载geox-url中定义的dat文件到内存中,
7、ecs-override和ecs暂不考虑支持
8、当并发查询的dns服务器有返回结果时,立即进行nameserver-policy的规则匹配,如果匹配到的nameserver-group中没有任何nameserver返回了结果,则等待只最快的该组的的第一个返回之后在返回结果
listen: "[::]:1053"
bootstrap-nameservers:
- 223.5.5.5
- 119.29.29.29
nameservers:
- name: cn1
type: ip
server: 223.5.5.5
ecs-override: true
ecs: 222.91.149.0/24
- name: cn2
type: ip
server: 119.29.29.29
ecs-override: true
ecs: 222.91.149.0/24
- name: cn3
type: doh
server: https://hk.raito.xns.one/nK92WKAW_0A/dns-query
ecs-override: true
ecs: 222.91.149.0/24
- name: hk1
type: doh
server: https://hk2.beta.xns.one/@dish1653/dns-query
ecs-override: true
ecs: 154.3.33.0/24
- name: hk2
type: doh
server: https://hk.kahkee.xns.one/@dish1653/dns-query
ecs-override: true
ecs: 154.3.33.0/24
- name: hk3
type: doh
server: https://hk.raito.xns.one/@dish1653/dns-query
ecs-override: true
ecs: 154.3.33.0/24
nameserver-group:
- name: CN
nameservers: [cn1, cn2, cn3]
ecs-override: true
ecs: 222.91.149.0/24
- name: HK
nameservers: [hk1, hk2, hk3]
ecs-override: true
ecs: 154.3.33.0/24
nameserver-policy:
- GEOIP:CN,CN
- GEOIP:PRIVATE,CN
- MATCH,HK
geox-url: https://cdn.jsdelivr.net/gh/Loyalsoldier/geoip@release/geoip-only-cn-private.datyaml