dcompass 是一款高性能且可编程的 DNS 工具,使用 Rust 编写
新版本加入了基于 rhai 的脚本式处理功能,相较于之前基于 yaml 的自定义插件等增强了可读性和灵活性。
rhai 是一门类 Rust 的动态脚本语言。下面是一个使用 rhai 和 dcompass 自带的 Geo IP 插件进行防污染的范例:
script:
init: |
let geoip = new_geoip_from_path("../data/full.mmdb").seal();
route: |
let resp = upstreams.send("domestic", query);
let ans = resp.answer[0];
switch ans.rtype.to_string() {
"A" if !geoip.contains(ans.to_a().ip, "CN") => { upstreams.send("secure", query) }
"AAAA" if !geoip.contains(ans.to_aaaa().ip, "CN") => { upstreams.send("secure", query) }
_ => resp
}
在 v0.2.0 版本中,整个 DNS Message 的所有 sections (header, questions, answers, additional, authority) 的所有内容都被完整映射并可以在脚本中访问。结合脚本本身灵活的逻辑判断和流程控制能力,dcompass 可以更加紧凑地实现在之前冗长甚至不可能的规则定义。
目前 dcompass 自带的 utilities 有 Geo IP 插件,域名列表插件,IP CIDR 插件,并支持 DoH, DoT, 和 UDP 的上游转发。未来将支持更多上游协议,有其他插件需求也欢迎留言。
后续版本中将加入对 DNS Message 各个部分的编辑功能,来实现对各个 bitflag 和 record 的灵活控制。
欢迎批评指正!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.