地址: https://github.com/wolf-joe/ts-dns 欢迎尝试~
TODO:
默认情况(配置文件读取失败)时使用如下配置:
listen = ":53"
[groups]
[groups.clean]
dns = ["119.29.29.29", "223.5.5.5", "114.114.114.114"]
[groups.dirty]
dns = ["208.67.222.222:5353", "176.103.130.130:5353"]
suffix = ["google.com", "twimg.com", "quoracdn.net"]
完整配置示例:
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"]
特别鸣谢: /t/649297 @suspended @XiaoxiaoPu
1
marquina OP GO 新手,持续开发中,欢迎试用、交流~
|
2
1847bell 2020-03-09 15:17:03 +08:00
插眼看能活多久
|
4
wysnylc 2020-03-09 16:12:19 +08:00
建议一个新功能:同时请求多个 DNS,根据返回的 IP 进行 tcping,使用响应最快的 ip
|
7
sujin190 2020-03-09 17:11:33 +08:00
支持 edns 缓存不呐?试了好几个 dns 服务,对指定了 client ip 的 dns 缓存都有问题
|
11
wysnylc 2020-03-09 17:31:14 +08:00
@marquina #5 如果你说的响应一个 IP 是指最终访问的 IP,那么是的因为这个 ip 是可访问并且最快的
类似原理的有 SmartDNS DnsChooser(这个我在用),通过并发请求多个 DNS 来获取可用且最快的 IP 可以解决部分 dns 污染且不会触犯任何"规定",因为本质上只是买票买了多张票选一个最快的其他的退票而已 |
12
xenme 2020-03-09 17:38:54 +08:00 1
chinadns-ng
freedns-go 目前再用 chinadns-ng,还没发现 DNS 还有其他更好的玩儿法。 测速真没啥必要,国内不污染,没有太大的区别 要是支持 ipset 联动的话,可能和去广告,分流等结合,项目前景更大点。虽然 dnsmasq 可以。 |
14
marquina OP @sujin190 12 楼提到了 chinadns-ng,这个项目的 github 主页写着支持 edns,你可以去看看~
|
15
wzw 2020-03-09 18:07:05 +08:00 via iPhone
今晚试试,支持
|
17
xenme 2020-03-09 18:16:55 +08:00 1
@marquina
目前来看,chinadns-ng 的抗污染逻辑还是比较合理的。 缺的几个功能: 1. 没法支持类似 dnsmasq 针对特定域名指定 dns 的需求,只有国内和国外,没有比如局域网等特定域名,不过可以套 dnsmasq 解决 2. 没法修改 ipset,也可以套 dnsmasq 3. 没有 cache,也可以套 dnsmasq 目前 dnsmasq 套 chinadns-ng 基本完美了。 主要是没看到一些亮眼的或者独到的点,不过还是支持下 |
18
miaomiao888 2020-03-09 18:29:16 +08:00 1
基于列表的还是麻烦,像 smartdns 那种就不错,真正做到开箱既用,不仅能加速还解决污染问题,只可惜它没有 win 版
|
20
sujin190 2020-03-09 19:57:01 +08:00
@marquina #14 之前测试过 freedns、smartdns、unbound,似乎转发请求时可以的,但是缓存管理都有问题,首次请求之后,我换个 ip 再请求还是刚才的,unbound 支持好一点,如果首次时带 ip 请求,缓存管理似乎就正常了,如果不是那么后面无论带啥 ip 请求都是第一次的结果,坑死。。
|
21
marquina OP @miaomiao888 可以配置一个 suffix 为.的 group,匹配所有域名,然后再基于这个 group 实现和 smartdns 类似的 dns 并发+测速,哈哈
|
22
kios 2020-03-10 08:17:38 +08:00
mark。正好也学习一下,哈哈
|
23
suspended 2020-03-10 10:33:49 +08:00
啊哈,既然派生自我的算法,还希望在 repo 里 credit 一下我的 repo 呢。^_^
|
24
marquina OP @miaomiao888 看了一下,smartdns 解决污染问题的手段是设置 ip 黑名单和 ip 白名单……感觉有点绕了
|
27
nogoodren 2020-03-10 11:50:00 +08:00
本地系统的 dns 需要修改为 127.0.0.1 吗
|
31
nogoodren 2020-03-10 21:02:42 +08:00
groups 参数里面,是不是不同的域名,使用不同的 dns 解析?
|
32
marquina OP @nogoodren 对。核心思想是将域名划分为不同的 group,每个 group 可以独立指定上游 dns、匹配规则、代理、ipset。
虽然一个 group 可以指定多个上游 dns,但目前还只是顺序请求,一般只会用到第一个 dns。 |
33
marquina OP v0.2.0 发布,欢迎大家尝试、交流~
|
34
marquina OP @sujin190 #20 测试了一下,可以做 edns client subnet 缓存的支持,预计会在 v0.3.0 添加该功能。不过我本身对 edns 不太熟,就算支持也只会是对 client subnet 特殊照顾~
|
35
marquina OP @sujin190 我用 socks5 代理搭配 8.8.8.8 测试 EDNS Client-Subnet 通过,代码推到 github 上了,你也可以先自行编译。现在的缓存策略是 address 和 mask 有任何变动就重新请求。
|
36
wzw 2020-03-12 09:00:14 +08:00 1
@marquina #35 有些地方可以参考 https://github.com/shawn1m/overture 这个项目
是否有考虑自动加一些 ***list_domain china_ip_list , 这样会更加 老少皆宜, 开箱即用 |
37
marquina OP @wzw v0.2.0 的 release 包内添加了 gfwlist.txt 并强制开启 gfwlist 模式。不过目前还没有打算添加 china_ip_list 相关的功能~
|
39
marquina OP |
42
wzw 2020-03-15 15:53:51 +08:00
@marquina #41 Macos launchd 难用... 还想问问你计划弄到 brew 不?
v0.4.0 已发布 * 增加支持 DNS over TCP/TLS/HTTPS 丰富的差不多了,,, 可以用了 |
43
marquina OP @wzw 刚发布了 v0.6.0,支持配置文件自动重载,在 64bit win/linux 上测试通过,mac 上应该也可以用。brew 之类的发布渠道目前没有支持的计划。
|
44
ety001 2020-03-15 16:24:04 +08:00
要不要考虑支持 namebase ?
|
46
nogoodren 2020-03-15 21:11:51 +08:00
多 hosts 文件,应该如何设置
|
47
marquina OP @nogoodren 在 toml 配置文件里添加相应记录,格式为:hosts_files = ["hosts1.txt", "hosts2.txt"]
|
48
nogoodren 2020-03-16 11:44:00 +08:00
ts-dns.full.toml 和 ts-dns.toml 两个配置文件,程序默认使用那一个啊?
|
49
marquina OP @nogoodren 默认使用 ts-dns.toml,在 readme 里、执行./ts-dns -h 时都可以看到。
|
50
nogoodren 2020-03-16 17:35:57 +08:00
[groups.dirty]里面有 socks5、dot、doh 等几种方式,那么默认使用哪一个?还是一个不行换另外一个?
|
51
ety001 2020-03-16 18:25:49 +08:00
|
52
marquina OP @nogoodren #50 优先级分别为 dns、dot、doh,每次请求时会依次请求(故障转移) dns 列表。socks5 是代理请求 dns,和优先级无关。
|
54
nogoodren 2020-03-17 11:44:41 +08:00
请问“DNS 查询支持 socks5 代理”这个功能怎么实现,我通过火狐浏览器的 socks5 代理测试失败。
|
56
marquina OP @nogoodren 我不知道火狐浏览器的测试是什么情况……ts-dns 在国内直接向 8.8.8.8 解析 google.com ,大概率会因为 dns 污染而得到错误结果,这时就可以找一个“干净”的 socks5 代理(比如本地运行的 fq 软件),让 ts-dns 通过这个 socks5 代理向 8.8.8.8 解析 google.com 来避免污染。
|
57
marquina OP v0.7.0 发布~支持并发请求上游 DNS
|
60
wzw 2020-03-31 09:38:14 +08:00
|
61
marquina OP @wzw 某个 group 配置了 ipset,但系统里没有 ipset 命令,所以报错。这个功能还是比较小众的,不需要的可以注释掉相关配置
|
62
derekwei 2020-03-31 10:59:17 +08:00
不知 Ping 是 ICMP 还是 TCP 的?
|
66
marquina OP @derekwei v0.10.0 发布,支持用 tcp ping 对 ipv4 进行测速,还修复了之前的测速 bug 。
|
67
marquina OP v0.11.0:支持默认附带 ECS 信息转发 DNS 请求;可选是否以 base64 解码 gfwlist ;支持 debug 模式。
v0.12.0:支持从文件中读取 group 的匹配规则(#10);支持通配符 hosts(#8);修复 gfwlist 文件换行符 bug(#11)。 v0.13.0:支持监听监听 TCP 端口 (#18);提升 ABPlus 规则兼容性 (||ads.example.com^)。 v0.13.1:修复自 v0.11.0 以来的默认添加 ecs 相关 bug (#20);默认同时监听 TCP/UDP 端口 (#19)。 |
68
Bunnyranch 2020-05-29 09:38:23 +08:00
“ prefetch-domain ”域名预先获取功能 和“ serve-expired”过期缓存服务功能 有这两个应该就很完善了。
那样我就不用 win10 装 WSL 跑 smartdns 了。。 |
69
marquina OP @Bunnyranch prefetch-domain 功能挺好,serve-expired 就有待商榷了……chrome 和 firefox 都不关心 DNS 记录的 ttl,当 chrome 得到一个 ttl 为 0 的查询结果(已过期+开启 serve-expired ),chrome 还是会将这个结果缓存 1 分钟。
|
70
Bunnyranch 2020-05-30 09:37:07 +08:00
@marquina 而且 serve-expired 设置不当,有时候地址变的快的网页不能正常浏览。
另外我说一点 ts-dns 试用的感觉,真没 smartDNS 丝滑。。 我打开网页前还是会顿一下,看着 chrome 左下角显示“正在解析主机”,时间长的时候能等一秒才开始加载网页,反复打开同一个网页好像就没这现象了,但是重启了电脑又来。(我打开了并发查询和 TCP 测速,以及缓存等基本功能) 这个是因为没 prefetch 功能的原因么,之前使用 smartDNS 没这种体验。。 不过我的 WSL ubuntu 升级 20.04 之后有问题。。就索性都卸载了来用的 ts-dns... |
71
marquina OP @Bunnyranch 在启用响应 ip 测速( icmp 或 tcp )时,ts-dns 会等待所有上游 dns 的响应(或超时)。只要有一个上游 dns 的延迟很大(或者丢包超时),就会影响解析速度。我觉得如果不是硬性需求,ip 测速功能还是没有必要开启。
比如我的北方联通家宽向 114.114.114.114 解析 baidu.com ,得到的两个 ip 的 ping 值均小于 10ms,测速只会拖慢解析速度( 10ms->100ms )。 |
72
Bunnyranch 2020-05-31 11:01:27 +08:00
@marquina 一些网站不在 dirty 组里面的,于是乎我只能在 clean 组里加上干净但是很慢的服务器,然后开并发和测速,应该是这个原因导致变慢。 不过。。还是用 smartDNS 的时候这样配置 解析速度也很快,反馈是为了让软件变得更棒,加油!
|
73
marquina OP @Bunnyranch 不在 dirty 组……为啥不写 rules 呢?
|
74
Bunnyranch 2020-06-02 09:13:55 +08:00
@marquina 因为我笨笨。。。 而且我怕我一直说 smartDNS 好你会生气气
另外我想过学学怎么写 rules,但比如搜索了某个关键词,点进去的网站,其实是随机的。只是写入特定规则,有时候还是会碰到被污染的情况(虽然这种情况比较少)。 从体验上来说,clean 组也配上一个干净的服务器,这样碰到打不开的网站,也不用怀疑到底是被污染了 还是不在规则内,比较万无一失(只不过这样 ts-dns 会慢一点)。。 |
75
marquina OP @Bunnyranch 默认的 gfwlist+cnip 匹配模式已经足以应付绝大多数情况了,除非是特别冷门的网站……就目前的 ts-dns 处理逻辑来说,将干净的 dns 服务器加到 clean 组只会极大拉低使用体验。rules 配置的话,可以看看我在 ts-dns-full.toml 里写的简单说明,也可以看看 adblock plus 的过滤规则,觉得有兼容性问题也可以提 issue 。
https://github.com/wolf-joe/ts-dns/blob/master/ts-dns-full.toml#L33 https://adblockplus.org/filter-cheatsheet |