Github 项目传送门: https://github.com/holyshawn/overture
Binary 下载地址: https://github.com/holyshawn/overture/releases
添加了多上游 DNS 功能,自动选择最快应答。
添加了缓存功能,如果开启了 edns-client-subnet ,则命中时就会考虑到缓存时所用的 ip 。
添加了本地 Hosts 支持。
如需开启 edns-client-subnet,外网 IP 请手动填写,策略是如果访问 IP 是内网 IP 就用填的外网 IP,否则用访问 IP 进行查询。原先自动填写不太稳定而且耗时,这版本就取消了。
其他功能参见 README 。
配置文件语法有更改,请参照新版配置文件修改。
1.0.0 版本介绍传送门: https://www.v2ex.com/t/331100
1.1.0 版本介绍传送门: https://www.v2ex.com/t/332764
1.2.0 版本介绍传送门: https://www.v2ex.com/t/334691
更新 1.3.1 版本:
1
hronro 2017-02-16 12:55:54 +08:00
有机会试试
|
2
ewex 2017-02-16 13:20:12 +08:00
1. 第一行提示个人认为可以去掉; 2. “口”是本来这样还是字体缺失?还没看源码; 3. "AlternativeDNS":[ "EDNSClientSubnet":{ 冒号后面加个空格更统一,强迫症晚期; 4. gfwlist.txt 和 hosts 能否去除最后一样空行,还是强迫症。 以上问题通过自行编译应该都可以解决(感谢楼主开源)。 环境: Win10 Ent N 2016 LTSB x64 英文版, Overture 64 位,系统自带 CMD 感谢! |
3
holyshawn OP @ewex #2
1. 还是留着吧,方便下载新版和提 issue ,主要是 程序本身除了这一行外是没有任何版权或者版本信息的。 2. 应该是字体,我在 osx 和 linux 下都没有问题, windows 下有人测试过了也没有这种问题。 3.4. 可以提 PR 。 |
4
Havee 2017-02-16 13:54:58 +08:00
“对策略是如果访问 IP 是内网 IP 就用填的外网 IP ,否则用访问 IP 进行查询。”
=== 呃,这是打错字了还是本来就是如此, cdn 怎么解决。 还没看源码,感谢开源。 |
5
holyshawn OP @Havee #4 这里的 IP 指的是发送 EDNS client subnet 请求时附属的 IP ,用于上游 DNS 服务器根据该 IP 返回合适的地址。我这里的策略是,对于来自客户端的请求,如果客户端的 IP 地址是内网 IP ,那我就用在配置文件中手动填写的外网 IP 发送给上游;如果客户端的 IP 地址是外网 IP ,那就直接用客户端的 IP 地址。这样就解决了 CDN 的问题。
|
6
bazingaterry 2017-02-16 15:57:17 +08:00 via iPhone
从第一个版本用到现在了,支持一下。
话说每次更新都改一次配置文件的格式啊(手动滑稽 |
7
JackyBao 2017-02-16 16:02:42 +08:00
比 dnsmasq 多了上游 tcp 请求的功能是吗?
其他还有什么创新,少年? |
8
holyshawn OP @bazingaterry #6 小版本改 bug 并没有动配置文件啊 ,大版本添加功能的话,想不动也是没有办法。
|
9
maojy1989 2017-02-17 08:47:15 +08:00
想在树莓派上跑这个程序要怎么玩呢? CPU 架构不一样,可以自己编译吗,我不会改代码。。。
|
10
whx20202 2017-02-17 09:40:33 +08:00
hi , 我问个题外问题希望不要嫌弃
不管是你这个软件还是 chinaDNS , 所谓的 alternative DNS 如果填写成国外的 那还不是一样被污染么? 加密这块是需要用户自己做还是说软件里已经做好了? |
11
holyshawn OP @maojy1989 #9
如果是 64 位的 arm 可以用: GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o overture-linux-arm64 main/main.go 参见: https://golang.org/doc/install/source#environment |
12
holyshawn OP @whx20202 #10
目前只要在非 53 端口或者使用 TCP 两种手段下选择一项即可避免污染,如果在特定情况下这些都失效的话那可以用代理穿透, DNSCrypt 或者 HTTP DNS 之类的方案,这些由于需求多样,用户自己搭建填进去就好了。 |
16
maojy1989 2017-02-18 19:52:13 +08:00
GOOS=linux GOARCH=arm CGO_ENABLED=0 go build -o overture-linux-arm main/main.go
main/main.go:11:2: cannot find package "github.com/Sirupsen/logrus" in any of: /usr/local/golang/go/src/github.com/Sirupsen/logrus (from $GOROOT) /usr/local/golang/go/bin/src/github.com/Sirupsen/logrus (from $GOPATH) main/main.go:12:2: cannot find package "github.com/holyshawn/overture/core" in any of: /usr/local/golang/go/src/github.com/holyshawn/overture/core (from $GOROOT) /usr/local/golang/go/bin/src/github.com/holyshawn/overture/core (from $GOPATH) 这个怎么解决啊 |
17
holyshawn OP @maojy1989 #16
go get 一下吧,如果有 arm 的需求我等会把 binary 一起编译了传上去。 |
18
maojy1989 2017-02-19 10:42:32 +08:00 via iPhone 1
@holyshawn 谢谢大佬,我在树莓派上设置国外 IP 段走单独的通道,然后没有合适的 dns 客户端,暂时只能用中科大的 DNS 来避免污染,效果是有的,但是 cdn 不太好
|
19
huanter 2017-02-20 09:04:41 +08:00
这个能用来科学上网吗?
|
21
kiman 2017-02-20 13:41:34 +08:00 via iPhone
非常好用,项目开始用到现在还在用,望继续给力更新。
|
22
maojy1989 2017-02-20 17:09:33 +08:00
再问大神一个问题,我现在使用 DNS 分流的需求是这样的:
我在本地做了流量分流,国内 IP 走正常线路,国外走单独通道,这个时候我需要的是一个 CDN 友好并且准确的 DNS 我在本地用 overture 设置主 DNS 为一个 CDN 友好的 DNS ,然后国外的域名转到备用 DNS 解析。 备用 DNS 是我在 VPS 上的 overture ,因为流量会通过远程服务器,所以我不需要 DNS 按照我本地的 IP 来优化解析结果。 直接返回远程服务器的 DNS 解析是最好的,但是我把 VPS 上面的 overture 配置改成使用服务器本地的 DNS ,并且关掉 EDNS 却不能解析了,会一直提示: WARN[0061] Maybe your primary dns server does not support edns client subnet 主 DNS 使用 8.8.8.8 备用 DNS 用服务器本地的也是这个提示,然后不能解析国外的域名 换成 8.8.8.8 关闭 EDNS 能够正确返回不按本地 IP 优化的解析结果,但是跟服务器本地 DNS 的解析结果还是不一致,这个问题能够优化一下吗 |
23
holyshawn OP @maojy1989 建议 VPS 上直接用 dnsmasq ,把 alternative dns 填上 vps 的地址即可,关掉 edns 。不建议把 overture 套起来用。
|
24
suitrue 2017-02-23 18:05:07 +08:00
多上游 DNS 功能 要怎么配置使用?由于我的 primary dns 经常很久不反应,我希望添加多个 DNS 。但找了半天也没看到怎么用这个功能。
|
25
suitrue 2017-02-23 19:44:58 +08:00
我觉得副 DNS 可以不要等待主 DNS 解析完再开始,因为对很多国外网站,主 DNS 解析的非常慢,这样即使副 DNS 解析的比较快,最后的时间也是要两者相加。
|
26
holyshawn OP |
27
suitrue 2017-02-24 18:06:15 +08:00
@holyshawn 感谢作者回复,我把副 DNS 复制一遍也添加到 Primary DNS 里就可以实现之前的想法了。(关于 EDNS 我不太懂,反正我没开)
|
28
lybtongji 2017-03-12 22:07:46 +08:00
你好,我想问下 overture 这样配置是否正确,目的是 IPv4 地址通过 8.8.8.8 查询, IPv6 地址通过 2001:4860:4860::8888 查询。
overture 配置: https://ooo.0o0.ooo/2017/03/12/58c553ee25443.png 但发现查询结果并未如预期一样。 直接查询 Google DNS 能够返回 ping 值各自最小的 IPv4 和 IPv6 地址: https://ooo.0o0.ooo/2017/03/12/58c553ee9d61a.png https://ooo.0o0.ooo/2017/03/12/58c553eea6ee9.png 但通过 overture 查询获得的 IPv4 地址并非 8.8.8.8 返回的最佳地址: https://ooo.0o0.ooo/2017/03/12/58c553ef22931.png 返回的 IPv6 地址正常: https://ooo.0o0.ooo/2017/03/12/58c553ef25cbd.png IPv4 ping 值对比: https://ooo.0o0.ooo/2017/03/12/58c5560602017.png https://ooo.0o0.ooo/2017/03/12/58c556067be4b.png |
29
holyshawn OP @lybtongji 按照你的配置,查询 www.google.com 应该都是走 Alternative DNS 的,所以不一样,详细流程请看 README 。 按照默认配置, Primary DNS 最好找个国内的 DNS 吧, CDN 友好一些。
|
30
lybtongji 2017-03-13 22:23:44 +08:00
@holyshawn 那有什么办法查询 www.google.com 的 IPv4 地址走 Primary DNS , IPv6 地址走 Alternative DNS 么?因为用的 V6VPN
|
31
holyshawn OP @lybtongji #30 IPv6 地址 在绝大多数操作系统中都是优先的,不需要这么麻烦, IPv4 的地址无所谓。
|
32
huanter 2017-03-23 13:52:22 +08:00
@holyshawn 这个 HostsFile 只能一个文件吗?
能否设成不同的,比如这样: "HostsFile": "./hosts_sample1", "HostsFile": "./hosts_sample2", |
37
holyshawn OP @huanter #36 目前还没有这个功能,可以考虑未来加,可以考虑用 supervisor 等进程管理软件导出,或者 nohup 运行。
|
38
Oi0Ydz26h9NkGCIz 2017-04-20 23:16:10 +08:00
请问能否把 2 个 overture 串起来用?
c 是客户机, a 主机安装 overture , b 主机也安装 overture ,然后 b 收到的查询请求递归到 a , a 在递归到 8.8.8.8 那么这样一来,传递给 8.8.8.8 的源 ip 是 c 还是 b 还是 a 呢? |
39
bobopu 2017-04-21 11:26:20 +08:00
有没有进行下压测 QPS ,并与 bind 和 unbound 对比呢?
另,有否考虑过支持导入 bind 的 zone 文件呢? |
40
bobopu 2017-04-21 11:29:15 +08:00
另,开启*通配符后对 cpu 内存的占用能有多大呢?
|
41
holyshawn OP @aruisi 如果开启 edns ,生效的应该都是 c 的公网出口 ip ;不开启的话,生效的是末端 a 。
|
42
holyshawn OP @bobopu overture 为了实现 ip 分流 overture 实际上是进行的两段处理,一段是拿 primary dns 的结果,另一段才是根据结果选择进一步的解析策略,和 bind , outbound 之类的一段式静态规则没有可比性。而且,理论上 go 写的肯定会比 c 写的慢,没必要进行比较。 overture 的定位不是做一个完备的 server , server 只是基础,主要功能还是在分流调度修改上, zone 文件导入暂时不再考虑范围。 overture hosts 的通配符是在解析的动态匹配时候,不会对内存产生特殊影响。
|
43
unboy 2017-04-22 00:39:43 +08:00
楼主,请问如何把 overture 作为系统服务实现启动重启停止呢,参考网上的教程都搞不定啊,能否给出范例,谢谢。
|
44
bobopu 2017-04-22 01:47:45 +08:00
@holyshawn 你好,测试了下发现 hosts 在使用通配符时存在 bug ,例如当 hosts 设置为 0.0.0.0 *.abc.com 时
dig www.abc.com 返回的 ip 确为 0.0.0.0 而当 dig abc.com 时却绕过了 hosts 返回了真实 ip 通配符对根域不起作用。 而当 dig a.a.b.abc.com 时同样存在绕过 hosts 的问题,不能返回 0.0.0.0 通配符对三级以上域名不起作用。 烦劳修复一下。 |
45
holyshawn OP @bobopu 这个问题已经有人提过 issue 了,已经在开发分支中修复了还没有 release ,参见 issue ,你可以先自行编译最新源码测试。
|
46
holyshawn OP @unboy linux 的话用 supervisor , windows 我不是很清楚,可以参见 issue #4
|
47
unboy 2017-04-23 13:10:13 +08:00
|
49
Oi0Ydz26h9NkGCIz 2017-04-23 14:46:37 +08:00
请教下第一次运行时 hosts 是全部加载到内存中读取,还是在接到查询请求后仍然在硬盘中查询匹配?
|
52
unboy 2017-04-23 18:06:23 +08:00
@holyshawn 你好,运行 1.3.4 版时报错
panic: runtime error: index out of range goroutine 81 [running]: github.com/shawn1m/overture/core/hosts.parseLine(0x18890bf6, 0x1, 0x18846de0) /home/travis/gopath/src/github.com/shawn1m/overture/core/hosts/hostsline.go:137 +0x4ae github.com/shawn1m/overture/core/hosts.newHostsLineList.func1(0x18846dbf, 0x1860c3f0, 0x18846de0, 0x18846dd0, 0x18890bf6, 0x1) /home/travis/gopath/src/github.com/shawn1m/overture/core/hosts/hostsline.go:67 +0x62 created by github.com/shawn1m/overture/core/hosts.newHostsLineList /home/travis/gopath/src/github.com/shawn1m/overture/core/hosts/hostsline.go:73 +0x1d6 |
54
Oi0Ydz26h9NkGCIz 2017-04-24 00:08:27 +08:00
@holyshawn CacheSize 这一项在 Tips:中没有做详细说明,这里缓存大小单位默认是 m 吗?例如 128 、 512 ?您建议缓存大小设置为多少合适呢?
|
55
Oi0Ydz26h9NkGCIz 2017-04-24 00:29:37 +08:00
发现当 hosts 超过 5000 条时,后面的 hosts 会失效不起作用了,只有前面的起作用。
|
56
holyshawn OP @unboy #53 @aruisi #55 请把你们出现问题的 hosts 文件提交一下,我排查一下具体 bug 。可以放在
https://github.com/shawn1m/overture/issues/36 这个 issue 里。 @aruisi #54 针对单个域名的缓存个数,合适的个数没有推荐,我自用 100000 。 |
57
Oi0Ydz26h9NkGCIz 2017-04-24 17:26:05 +08:00
@holyshawn 已在 issue 提交。
|
59
Oi0Ydz26h9NkGCIz 2017-04-25 13:37:56 +08:00
@holyshawn 当前的通配符*包含一切字符的方式误伤太大,已在 issue 反馈请您查看下。
|
60
Oi0Ydz26h9NkGCIz 2017-05-03 21:02:57 +08:00
@holyshawn 关于两台 overture 串联使用时,末端丢失客户端 ip 的问题已在 issue 反馈。
|
61
Digcloud 2017-08-19 19:04:24 +08:00
请教一下,如何统计在线 IP 数啊?
|
62
feiyang21687 2018-03-09 19:18:54 +08:00
试用了一下,不错!
|
63
gesse 2018-04-26 16:37:01 +08:00
这里面有个问题,比如以 gfwlist 作为直接走国外解析的依据,但是像谷歌分析业务 www.google-analytics.com ,国内服务器是正常,到国外解析成国外 IP,反而很多网站因为 js 问题访问不了
|
64
gesse 2018-04-26 17:49:32 +08:00
还有一个问题,scontent-nrt1-1.xx.fbcdn.net 类似这样的域名,国内 DNS 服务器基本会『卡住』,然后结果会为空,不会继续使用 AlternativeDNS
|
65
gesse 2018-04-26 17:50:26 +08:00
楼上我说的是禁用了 DomainFile ( gfwlist )以后
|