DNSdist 实施 DOT/DOH 记录

2022-05-07 38点热度 0人点赞 0条评论

dnsmasq 不支持 doh 和 dot 怎么办,想自建 doh 和 dot 服务端怎么办,总有 ddos 想限速怎么办,快用 dnsdist


1 、 dnsdist 是什么

dnsdist 是一个抗 DoS 的 DNS 负载均衡器。其设计目标是路由流量到优选的服务器,同时分流或阻止恶意流量。 [ 链接 ]


2 、 dnsdist 基础配置

使用 Nginx 作为 dot/doh 网关 [ 链接 ]

DOH 服务搭建 [ 链接 ]

Nginx+doh [ 链接 ]

集群 DNS 基础解析 [ 链接 ]

2.1 、指定后台服务器

newServer({address="2001:db8::1", qps=10})
newServer({address="[2001:db8::2]:5300", name="dns1"})
newServer("192.0.2.1")
newServer({address="192.0.2.1", source="[email protected]"})

-- 涉及 QPS 必须指定查询方式从默认的 空闲轮询 变为 QPS 均值 轮询
setServerPolicy(firstAvailable)

2.2 、设定监听地址

addLocal("0.0.0.0:53")
addLocal("[::]:53")

2.3 、限制访问来源

addACL("0.0.0.0/0")
addACL("::/0")

setACL({'192.0.2.0/28', '2001:db8:1::/56'})
rmACL("192.0.2.10")
addACL('2001:db8:2::/56')

2.4 、安全策略

-- 执行 EDNS 查询时,保留查询者的 IP 信息位数
newServer({address="8.8.8.8",useClientSubnet=true})
setECSSourcePrefixV4(24)
setECSSourcePrefixV6(64)
-- 禁用安全更新通知
setSecurityPollSuffix("")

3 、 dnsdist+doh/dot

在 dnsdist 中配置 dot 的方式如下 [ 链接 ]
reusePort = TCP/UDP 双端口绑定

addTLSLocal("0.0.0.0:853", "/etc/ssl/certs/example.com.pem", "/etc/ssl/certs/example.com.key", {reusePort=true})

如果你需要同时支持多个证书,则可以一起加载进去

addTLSLocal("0.0.0.0:853", {"/etc/ssl/certs/example.com.rsa.pem", "/etc/ssl/certs/example.com.ecdsa.pem"}, {"/etc/ssl/private/example.com.rsa.key", "/etc/ssl/private/example.com.ecdsa.key"}, {reusePort=true})

在 dnsdist 中配置 doh 的方式如下 [ 链接 ] 多证书和 dot 的配置方法一致

addDOHLocal("0.0.0.0:8443", "/etc/ssl/certs/example.com.pem", "/etc/ssl/certs/example.com.key", "/resolve", {reusePort=true})

如果需要指定 DOT 的默认回执页面,可以额外添加参数

-- addDOHLocal('0.0.0.0:8443', '/etc/ssl/certs/example.com.pem', '/etc/ssl/private/example.com.key', "/", {customResponseHeaders={["link"]="<https://example.com/policy.html> rel=\\"service-meta\\"; type=\\"text/html\\""}})

如果涉及到 Nginx 代理转发,则 DOH 的方式可以取消证书加密 [ 链接 ]

addDOHLocal("127.0.0.1:8053", nil, nil, "/resolve", {reusePort=true})
location /dns-query {
  proxy_http_version 1.0;
  proxy_cache doh_cache;
  proxy_cache_key $scheme$proxy_host$uri$is_args$args$request_body;
  proxy_pass http://127.0.0.1:8053;
}

dnsdist 不支持 使用 json 格式的 doh,有关信息查阅 [ 链接 ]

配置完毕后想测试,可以使用以下测试命令(apt 安装包名分别为 curl 和 getdns-utils)

getdns_query @1.0.0.1~cloudflare-dns.com -m -s -L -A www.landiannews.com
curl --doh-url https://1.0.0.1/dns-query https://www.landiannews.com
curl -H 'accept: application/dns-json' 'https://1.0.0.1/dns-query?name=www.landiannews.com&type=A'

StarryVoid

Have a good time