dnsdist 是一款高度 DNS、DoS 和滥用感知的负载均衡器。其目标是将流量路由到最佳服务器,为合法用户提供最佳性能,同时分流或阻止滥用流量 文档:https://dnsdist.org/
addLocal("127.0.0.1:5200")
newServer{address="127.0.0.1:5373", useClientSubnet=true,pool="china"}
newServer({address="127.0.0.1:443", tls="openssl", subjectName="xxxx", dohPath="/dns-query", validateCertificates=true,pool="default",useClientSubnet=true})
local shuntset = newDNSNameSet()
for line in io.lines("/etc/dnsdist/domains.txt") do
local trimmed_line = line:match("^%s*(.-)%s*$")
if trimmed_line ~= "" then
shuntset:add(newDNSName(line))
end
end
function matchChinaDomain(qname,shuntset)
local primary_domain = qname:toStringNoDot():match("([^.]+%.[^.]+)$")
domain = newDNSName(qname:toStringNoDot())
-- infolog("Query domain: " .. qname:toStringNoDot())
-- infolog("Query domain: " .. primary_domain)
if shuntset:check(domain) then
return true
else
primarydomain = newDNSName(primary_domain)
-- infolog("Exact match: " .. tostring(shuntset:check(primarydomain)))
return shuntset:check(primarydomain)
end
end
addAction(LuaRule(
function(dq) return matchChinaDomain(dq.qname,shuntset) end
), PoolAction("china"))
addAction(AllRule(), PoolAction("default"))
这是来自 /etc/dnsdist/dnsdist.conf dnsdist的配置文件下面简单解释一下
- addLocal 监听地址就是你要把dnsdist服务运行在哪个ip:端口上
- newServer 把dns转发到哪个递归服务器 useClientSubnet就是是否转发edns pool可以理解为一个标签这里有两个第一个是转发常规udp第二个是转发到doh服务器上去
- addAction 这个就是控制发送到哪个newServer的规则了 AllRule()表示默认也就是所有流量都转发到标签为default的递归服务器上去 LuaRule表示通过lua代码处理后的规则然后发送到标签为china的递归服务器上去
- 剩下的就是dnsdist 内置的lua函数和lua原生的一些东西了这里就不过多解释了
下面是shell脚本用于生成domains.txt文件
#!/bin/bash
cd /root/app/china
rm -f i*.txt
rm -f tmp*.txt
wget -O i1.txt https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf
wget -O i2.txt https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/apple-cn.txt
cat i1.txt | grep -E -v "^#" > tmp1.txt
sed -i s'/server=\//\//g' tmp1.txt
sed -i s'/\/114.114.114.114//g' tmp1.txt
sed -i s'/full:/\//g' i2.txt
cat zdy.dd i2.txt tmp1.txt > tump.txt
sed -i s'/^\///g' tump.txt
rm -f i*.txt
mv tump.txt /etc/dnsdist/domains.txt
zdy.dd 这个文件就是自定义的域名了虽然来自github的中国大陆的域名列表挺完善的但也有覆盖不到的
当然dnsdist不仅仅只能实现基于域名分流还可以实现更多的功能(基于ip分流、基于ip和域名分流、基于恶意域名列表拦截、基于威胁情报ip源进行拦截、正则匹配拦截,改写edns、改写dns回复数据等等)
如果有什么好的想法可以发布到评论区或者加群讨论QQ群:1009133646如果能够实现的话后续会再发布文章
© 版权声明
原创文章未经允许请勿转载。
THE END
请登录后查看评论内容