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'