简单易用的DNS分组/转发器
Telescope DNS
支持多 hosts 文件 + 手动指定 hosts
支持按手动后缀匹配 /半智能污染检测 /GFWList 进行分组
DNS 查询支持 socks5 代理
简单 DNS 记录缓存
GitHub地址:https://github.com/wolf-joe/ts-dns
基本特性
默认基于CN IP列表 + GFWList进行域名分组;
支持DNS over UDP/TCP/TLS/HTTP;
支持并发请求/socks5代理请求上游DNS;
支持多Hosts文件 + 自定义Hosts;
支持配置文件自动重载;
支持DNS查询缓存(TTL倒计时、ECS缓存);
支持将查询结果添加至IPSet。
DNS查询请求处理流程
当域名匹配指定规则(配置文件里各组的rules)时,将请求转发至对应组上游DNS并直接返回;
如未匹配规则,则假设域名为clean组,向clean组的上游DNS转发查询请求,并做如下判断:
如果该域名匹配GFWList列表,则向dirty组的上游DNS转发查询请求并返回;
否则返回查询结果。
如果查询结果中所有IPv4地址均为CN IP,则直接返回;
如果查询结果中出现非CN IP,进一步判断:
Telescope DNS使用说明
在Releases页面下载对应系统和平台的压缩包;
解压后按需求编辑配置文件ts-dns.toml(可选)并运行进程:
# ./ts-dns -c ts-dns.toml # 指定配置文件名 # ./ts-dns -r # 自动重载配置文件 ./ts-dns
Telescope DNS配置示例
完整配置文件参见ts-dns.full.toml
1.默认配置(ts-dns.toml),开箱即用
listen = ":53" gfwlist = "gfwlist.txt" cnip = "cnip.txt" [groups] [groups.clean] dns = ["119.29.29.29", "223.5.5.5", "114.114.114.114"] concurrent = true [groups.dirty] dns = [""] # 省略
2.指定hosts文件和自定义hosts
# ... hosts_files = ["adaway.txt"] [hosts] "www.example.com" = "1.1.1.1" # ...
3.使用socks5代理转发DNS请求
# ... [groups.dirty] socks5 = "127.0.0.1:1080" # ...
4.自定义域名分组
# ... [groups.work] dns = ["10.1.1.1"] rules = ["company.com"] # ...
5.动态添加IPSet记录(使用前请阅读ts-dns.full.toml对应说明)
# ... [groups.dirty] ipset = "blocked" ipset_ttl = 86400 # ...
完整配置示例
listen = ":53" gfwlist = "gfwlist.txt" hosts_files = ["/etc/hosts"] [redis] host = "localhost:6379" password = "" db = 10 [hosts] "example.com" = "8.8.8.8" [groups] [groups.clean] dns = ["119.29.29.29", "223.5.5.5", "114.114.114.114"] [groups.dirty] socks5 = "127.0.0.1:1080" dns = ["8.8.8.8", "1.1.1.1"] suffix = ["google.com", "twimg.com", "quoracdn.net"] [groups.work] dns = ["10.1.1.1"] suffix = ["company.com"]
TODO
ping测速择优
完善单元测试
设置fallback DNS
使用ECS转发DNS请求
官方QQ群号码:922069959(空)、1093596563(空)