用 Go 写了一个老少皆宜的 DNS 分流/转发器: TS-DNS

2020-03-09 14:59:37 +08:00
 marquina

Telescope DNS

地址: 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

2793 次点击
所在节点    分享创造
75 条回复
marquina
2020-03-09 15:11:08 +08:00
GO 新手,持续开发中,欢迎试用、交流~
1847bell
2020-03-09 15:17:03 +08:00
插眼看能活多久
marquina
2020-03-09 15:20:13 +08:00
@1847bell 没这么夸张吧,我鸣谢的那个帖子一周了也还在啊😂
wysnylc
2020-03-09 16:12:19 +08:00
建议一个新功能:同时请求多个 DNS,根据返回的 IP 进行 tcping,使用响应最快的 ip
marquina
2020-03-09 17:08:58 +08:00
@wysnylc 那最后是不是只会响应一个 ip ?
mwylaoma
2020-03-09 17:10:30 +08:00
@marquina 刚刚用 go get 编译了,不错,在用,redis 如果不使用,应该没什么大问题吧
sujin190
2020-03-09 17:11:33 +08:00
支持 edns 缓存不呐?试了好几个 dns 服务,对指定了 client ip 的 dns 缓存都有问题
marquina
2020-03-09 17:13:36 +08:00
@mwylaoma 现在可以直接下载二进制包了~如果不是经常重启的话不用 redis 也没关系
mwylaoma
2020-03-09 17:15:02 +08:00
@marquina #8 好的,谢谢,建议把配置说明详细注释下,哈哈
marquina
2020-03-09 17:28:31 +08:00
@sujin190 不好意思,这个暂不支持😅
wysnylc
2020-03-09 17:31:14 +08:00
@marquina #5 如果你说的响应一个 IP 是指最终访问的 IP,那么是的因为这个 ip 是可访问并且最快的
类似原理的有 SmartDNS DnsChooser(这个我在用),通过并发请求多个 DNS 来获取可用且最快的 IP
可以解决部分 dns 污染且不会触犯任何"规定",因为本质上只是买票买了多张票选一个最快的其他的退票而已
xenme
2020-03-09 17:38:54 +08:00
chinadns-ng
freedns-go

目前再用 chinadns-ng,还没发现 DNS 还有其他更好的玩儿法。
测速真没啥必要,国内不污染,没有太大的区别

要是支持 ipset 联动的话,可能和去广告,分流等结合,项目前景更大点。虽然 dnsmasq 可以。
marquina
2020-03-09 17:45:08 +08:00
@mwylaoma 在配置文件里注释了一通,已提交至 github
marquina
2020-03-09 17:51:18 +08:00
@sujin190 12 楼提到了 chinadns-ng,这个项目的 github 主页写着支持 edns,你可以去看看~
wzw
2020-03-09 18:07:05 +08:00
今晚试试,支持
marquina
2020-03-09 18:08:32 +08:00
@xenme 人嘛,总要有点成就感才算活着,哪怕是虚假的成就感。
xenme
2020-03-09 18:16:55 +08:00
@marquina

目前来看,chinadns-ng 的抗污染逻辑还是比较合理的。
缺的几个功能:
1. 没法支持类似 dnsmasq 针对特定域名指定 dns 的需求,只有国内和国外,没有比如局域网等特定域名,不过可以套 dnsmasq 解决
2. 没法修改 ipset,也可以套 dnsmasq
3. 没有 cache,也可以套 dnsmasq

目前 dnsmasq 套 chinadns-ng 基本完美了。

主要是没看到一些亮眼的或者独到的点,不过还是支持下
miaomiao888
2020-03-09 18:29:16 +08:00
基于列表的还是麻烦,像 smartdns 那种就不错,真正做到开箱既用,不仅能加速还解决污染问题,只可惜它没有 win 版
mwylaoma
2020-03-09 18:30:18 +08:00
@marquina #13
sujin190
2020-03-09 19:57:01 +08:00
@marquina #14 之前测试过 freedns、smartdns、unbound,似乎转发请求时可以的,但是缓存管理都有问题,首次请求之后,我换个 ip 再请求还是刚才的,unbound 支持好一点,如果首次时带 ip 请求,缓存管理似乎就正常了,如果不是那么后面无论带啥 ip 请求都是第一次的结果,坑死。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/651196

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX