V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
holyshawn
V2EX  ›  DNS

overture: DNS 分流净化器(更新 1.2.0)

  •  1
     
  •   holyshawn · 2017-01-15 12:33:05 +08:00 · 12446 次点击
    这是一个创建于 2657 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Github 项目传送门: https://github.com/holyshawn/overture

    1.0.0 版本介绍传送门: https://www.v2ex.com/t/331100

    1.1.0 版本介绍传送门: https://www.v2ex.com/t/332764

    二进制下载地址: https://github.com/holyshawn/overture/releases

    添加了 TTL 最小值的设定,在绝大多数情况下, DNS 结果对用户而言在很长一段时间都是不变的,手动合适的 TTL 可以让浏览器乃至于 dnsmasq 的缓存更有效率,实现秒解析。我设了一段时间 604800 (一周) ,感觉良好。( -1 为禁用此特性)

    添加了 edns-client-subnet 的支持,可以为支持此特性的如 119.29.29.29 提供指定的或者客户端的 IP 地址,从而使 DNS 返回的 CDN 地址更加准确,提升上网的速度。( auto 尝试使用客户端 IP 地址,如果不是公网地址使用服务器的 IP 地址, custom 完全使用自定义的 IP 地址)

    其他功能参见 README 。

    配置文件语法有更改,请参照新版配置文件修改。

    第 1 条附言  ·  2017-01-17 21:41:11 +08:00

    更新 1.2.1 版本:

    • 同时监听 TCP 和 UDP
    • 解决新版本 dig 查询的兼容性问题(比如 debian 8 上的)
    • 改进 log 方式
    第 2 条附言  ·  2017-01-27 00:14:19 +08:00
    更新 1.2.2 版本:

    + 修复一个可能导致 IP Match 失效的类型判定 bug ,感谢 sh1r0
    + 代码重构
    79 条回复    2023-12-22 15:03:21 +08:00
    R18
        1
    R18  
       2017-01-15 12:53:28 +08:00 via Android
    战略性 Make
    ztrt
        2
    ztrt  
       2017-01-15 13:09:53 +08:00
    战略性 install
    DesignerSkyline
        3
    DesignerSkyline  
       2017-01-15 13:30:03 +08:00
    战略性 ./configure
    Akesudia
        4
    Akesudia  
       2017-01-15 13:35:00 +08:00
    战略性 star
    usernametoolong
        5
    usernametoolong  
       2017-01-15 13:38:34 +08:00
    战略性 rm -rf /
    chinafeng
        6
    chinafeng  
       2017-01-15 13:54:55 +08:00 via iPhone
    战略性 git clone
    kindjeff
        7
    kindjeff  
       2017-01-15 14:09:51 +08:00 via iPhone
    战略性 reply
    ovear
        8
    ovear  
       2017-01-15 14:12:51 +08:00
    战略性 report
    Vicer
        9
    Vicer  
       2017-01-15 14:20:26 +08:00 via Android
    战略性 collect
    JohnLou
        10
    JohnLou  
       2017-01-15 14:21:27 +08:00 via iPhone
    。。。
    16500682
        11
    16500682  
       2017-01-15 14:25:14 +08:00 via iPhone
    战略性 站队型
    douglas1997
        12
    douglas1997  
       2017-01-15 14:26:14 +08:00
    战略性 回复
    baozijianke
        13
    baozijianke  
       2017-01-15 14:26:56 +08:00 via iPhone
    战略性 watch
    Phant0m
        14
    Phant0m  
       2017-01-15 14:29:36 +08:00
    战略性 mark
    qq29701
        15
    qq29701  
       2017-01-15 14:37:40 +08:00
    战略性 收藏
    VYSE
        16
    VYSE  
       2017-01-15 14:38:08 +08:00
    加个 tcp dns listen 吧?
    cncaihua
        17
    cncaihua  
       2017-01-15 14:38:47 +08:00 via Android
    战略性吃瓜
    youthcould
        18
    youthcould  
       2017-01-15 14:40:55 +08:00
    战略性 mark
    laven
        19
    laven  
       2017-01-15 14:48:34 +08:00
    战略性吃瓜
    lxll
        20
    lxll  
       2017-01-15 15:03:53 +08:00 via Android
    战略性 群众
    ClassicOldSong
        21
    ClassicOldSong  
       2017-01-15 15:35:04 +08:00
    overture 不是一个 midi 软件吗。。。
    vibbow
        22
    vibbow  
       2017-01-15 15:44:46 +08:00
    overture 不是一个打谱软件吗?
    holyshawn
        23
    holyshawn  
    OP
       2017-01-15 15:46:31 +08:00
    @VYSE 下个版本考虑直接同时监听 TCP , UDP ,不过监听 TCP 的场景很少感觉,毕竟 overture 一般都在墙内,运行在墙外的意义不大。
    holyshawn
        24
    holyshawn  
    OP
       2017-01-15 15:48:51 +08:00
    @ClassicOldSong
    @vibbow
    的确是一个打谱软件,有点撞名了,取名的时候没看到。不过由于比较小众,感觉问题不大。
    取这个名字主要是因为(来自 README ):
    Overture means an orchestral piece at the beginning of a classical music composition, just like dns which is nearly the first step of surfing the internet.
    强行掰扯一下。
    VYSE
        25
    VYSE  
       2017-01-15 15:59:46 +08:00
    @holyshawn pull requested
    myguybetter
        26
    myguybetter  
       2017-01-15 16:03:05 +08:00 via Android
    战略性 fork
    v1024
        27
    v1024  
       2017-01-15 16:30:42 +08:00 via iPhone   ❤️ 1
    战略性 fuck
    tmac6740
        28
    tmac6740  
       2017-01-15 17:16:37 +08:00
    战略性 已撸
    Ciefdx
        29
    Ciefdx  
       2017-01-15 17:25:22 +08:00
    ~~ @JohnLou 队形被你破坏掉了 ~~
    战略性 看看
    ladeo
        30
    ladeo  
       2017-01-15 17:41:22 +08:00
    名字可以改个字母,比如 Dverture
    TTL 最好别设置太长,遇到花生之类的动态域名估计会有问题
    bianhua
        31
    bianhua  
       2017-01-15 17:41:32 +08:00   ❤️ 1
    其他的功能很好,但是手动修改 TTL 的功能具有一定破坏性(破坏了数据源对数据的定义),最好能斟酌一下。

    我觉得更好地方式是维护一张最频繁访问域名的列表,记录足够多的项,然后根据它们的 TTL 自动刷新这些记录,并将新的记录缓存下来。

    考虑到你的程序其实就是建立了一个本地 DNS 服务器,而本地查询的速度是很快的,这样既可以尊重数据源,又可以实现差不多相同的功能。
    wclebb
        32
    wclebb  
       2017-01-15 17:42:05 +08:00
    看到楼上破坏了队形我就放心回复了……
    请问这个是……做什么用的……
    ins
        33
    ins  
       2017-01-15 17:56:32 +08:00
    战略性 redis
    est
        34
    est  
       2017-01-15 18:34:32 +08:00
    战略性 B52 轰炸机。
    misaka00251
        35
    misaka00251  
       2017-01-15 18:35:27 +08:00 via Android
    第一反应:打谱软件
    holyshawn
        36
    holyshawn  
    OP
       2017-01-15 19:29:59 +08:00
    @ladeo 命名思想相当不错,这个项目就不动了,毕竟冲突小众,以后可以借鉴。
    holyshawn
        37
    holyshawn  
    OP
       2017-01-15 19:37:45 +08:00
    @bianhua 所以默认情况下 TTL 修改是不开启的,有需求的人自己手动开启。维护新的域名列表难度还是相当大, Github 上的域名列表除了某 List 外更新基本都十分缓慢。另外,根据我日常的使用,除了动态 DNS 这种特殊需求以外,基本上不影响,动态 DNS 可以用 dnsmasq 指定 DNS 服务器解决。至于缓存的问题,我现在的实践是把 overture 作为 dnsmasq 的上游,手动指定 edns-client-subnet ip ,让 dnsmasq 做它自己专业的缓存事情。我一直在想有没有必要把程序做成大而全的,感觉很多特殊问题都可以用套个 dnsmasq 完美解决。
    holyshawn
        38
    holyshawn  
    OP
       2017-01-15 19:42:57 +08:00
    @bianhua 我刚才好像理解错了你列表的意思。如果是根据最频繁访问来设定阈值形成列表的话,感觉用处不是很明显,毕竟国内越大的网站越不会随意修改地区服务器的 IP 地址, TTL 的问题主要还是在动态 DNS 上。
    wql
        39
    wql  
       2017-01-15 19:46:00 +08:00 via Android
    战略性 点赞
    zyqf
        40
    zyqf  
       2017-01-15 19:49:04 +08:00 via Android
    mark
    popu111
        41
    popu111  
       2017-01-15 19:59:40 +08:00
    战略性 感谢
    ladeo
        42
    ladeo  
       2017-01-15 21:15:29 +08:00
    @holyshawn
    overture 的监听端口可以修改吗?
    如果我想在同一台设备上同时安装 overture 和 dnsmasq ,应该会出现端口冲突吧?
    大家都监听 udp:53 ,比如把 overture 的监听端口改成 udp:5533
    这样我一台设备就能 2 个软件都安装了
    PC --> dnsmasq:53 --> overture:5533 --> 上游 DNS
    lydasia
        43
    lydasia  
       2017-01-15 21:17:32 +08:00
    战略性 Star
    holyshawn
        44
    holyshawn  
    OP
       2017-01-15 23:33:26 +08:00 via iPhone
    @ladeo 当然可以,我本人也是套了个 dnsmasq 在外面做缓存、自定义的事情。
    Khlieb
        45
    Khlieb  
       2017-01-16 00:20:14 +08:00 via Android
    哈喇咻👍
    Haos
        46
    Haos  
       2017-01-16 00:21:26 +08:00 via Android
    战略性 回复
    Monstercat
        47
    Monstercat  
       2017-01-16 00:33:57 +08:00
    战略性 build
    laowood
        48
    laowood  
       2017-01-16 00:54:07 +08:00
    战略性 懵逼
    7colcor
        49
    7colcor  
       2017-01-16 07:19:17 +08:00
    战略性 Mark
    vikeria
        50
    vikeria  
       2017-01-16 07:32:36 +08:00 via iPhone
    战略性 mark
    lbp0200
        51
    lbp0200  
       2017-01-16 08:54:53 +08:00 via Android
    原理是什么?
    aheadlead
        52
    aheadlead  
       2017-01-16 08:54:55 +08:00
    战略性 找节拍器
    anym0us
        53
    anym0us  
       2017-01-16 08:55:25 +08:00 via iPhone
    战略性 马克
    m939594960
        54
    m939594960  
       2017-01-16 09:12:11 +08:00
    我还以为你是 安正超 ( https://github.com/overtrue) 你俩就差一个字母
    Ixizi
        55
    Ixizi  
       2017-01-16 09:18:04 +08:00
    战略性 吃瓜
    Sharuru
        56
    Sharuru  
       2017-01-16 09:21:23 +08:00
    战略性 DMCA Takedown
    hebeiround
        57
    hebeiround  
       2017-01-16 09:37:03 +08:00
    战略性 围观
    uqo28887
        58
    uqo28887  
       2017-01-16 10:05:28 +08:00
    战略性保持队形
    steveshi
        59
    steveshi  
       2017-01-16 10:12:36 +08:00
    战略性怎么样呢
    chcx
        60
    chcx  
       2017-01-16 10:54:05 +08:00
    战略性 入侵
    chuhemiao
        61
    chuhemiao  
       2017-01-16 11:04:53 +08:00
    chemandy
        62
    chemandy  
       2017-01-16 12:13:07 +08:00
    战略性 SEO
    dewi
        63
    dewi  
       2017-01-16 12:55:56 +08:00 via iPhone
    战略性 爆肛门
    metowolf
        64
    metowolf  
       2017-01-16 22:35:28 +08:00
    战略性 收藏
    mritd
        65
    mritd  
       2017-01-17 07:57:10 +08:00 via iPhone
    战略性 装逼
    SFsx
        66
    SFsx  
       2017-01-17 13:03:07 +08:00
    战略性 +1s
    missdeer
        67
    missdeer  
       2017-01-17 14:24:44 +08:00
    怎么知道一个 DNS server 是否支持 edns-client-subnet ?
    JackyBao
        68
    JackyBao  
       2017-01-17 14:46:02 +08:00
    战略性 继续使用 pdnsd
    holyshawn
        69
    holyshawn  
    OP
       2017-01-17 14:59:03 +08:00
    @missdeer 一般没有明确说明支持的都是不支持,可以 patch dig 直接测试,参见: http://noops.me/?p=653
    maojy1989
        70
    maojy1989  
       2017-01-17 15:24:36 +08:00
    {
    "BindAddress": ":53",
    "PrimaryDNSAddress": "45.76.145.234:5533",
    "PrimaryDNSProtocol": "udp",
    "AlternativeDNSAddress": "208.67.220.220:443",
    "AlternativeDNSProtocol": "tcp",
    "Timeout": 6,
    "RedirectIPv6Record": true,
    "IPNetworkFilePath": "./china_ip_list.txt",
    "DomainFilePath": "./gfwlist.txt",
    "DomainBase64Decode": true,
    "MinimumTTL": -1,
    "EDNSClientSubnetPolicy": "disable",
    "EDNSClientSubnetIP": ""
    }
    试了一下挺好用的,主 dns 是我在 VPS 上用这个软件搭的, EDNSClientSubnetPolicy 设置了 auto , TTL 3600 ,主 DNS 跟备用 DNS 设置的 Google 的 dns ,就是 8.8.8.8 跟 8.8.4.4 , ip 设置了禁止 ping ,有兴趣的可以试一下,国内用不了 Google 的 DNS ,要不然也不用这么麻烦了
    maojy1989
        71
    maojy1989  
       2017-01-17 17:27:45 +08:00
    想问楼主一个问题
    {
    "BindAddress": ":5533",
    "PrimaryDNSAddress": "8.8.8.8:53",
    "PrimaryDNSProtocol": "tcp",
    "AlternativeDNSAddress": "208.67.222.222:443",
    "AlternativeDNSProtocol": "tcp",
    "Timeout": 6,
    "RedirectIPv6Record": true,
    "IPNetworkFilePath": "./china_ip_list.txt",
    "DomainFilePath": "./gfwlist.txt",
    "DomainBase64Decode": true,
    "MinimumTTL": -1,
    "EDNSClientSubnetPolicy": "auto",
    "EDNSClientSubnetIP": ""
    }

    这是我在 VPS 上配置文件,访问别的域名都没有问题,但是当我访问 home.console.aliyun.comslbnew.console.aliyun.com 这一类的域名我本地就会出现

    WARN[0209] Get dns response failed: Response message is nil, maybe timeout

    时间长了以后重新启动程序就变成了

    WARN[0002] DNS lookup for external ip failed, please check your internet configuration:read udp 192.168.50.245:57128->45.76.145.234:5533: i/o timeout

    这是什么原因导致的呢?
    holyshawn
        72
    holyshawn  
    OP
       2017-01-17 19:58:24 +08:00
    @maojy1989 已知若开启 EDNSClientSubnet ,在 debian8 下用 dig 工具查询域名就会报:
    WARN[0209] Get dns response failed: Response message is nil, maybe timeout
    但正常使用其他程序不会影响。 OSX 下 dig 没有这个问题。
    下面的问题是程序查询不了你设定的 PrimaryDNS 45.76.145.234:553 ,查询超时。外部 IP 是通过查询 ipip.cn 的数据获取的, ipip.cn 本身需要域名解析,默认是用 PrimaryDNS 。
    maojy1989
        73
    maojy1989  
       2017-01-17 20:14:11 +08:00
    @holyshawn 服务器是 centos7 我本机是 MacOS 如果主 DNS 用我的服务器就查询不到 home.console.aliyun.com 这类域名,不会返回结果,然后就是超时,但是在服务器上是能查到的,其他的域名全部都是正常的,如果服务器关闭 EDNSClientSubnet 的话能正常解析这个域名,但是国内的网站会被解析成国外的 IP ,所有没办法只能把我服务器的 IP 设置为备用 DNS 了
    holyshawn
        74
    holyshawn  
    OP
       2017-01-17 21:39:49 +08:00
    @maojy1989 我这里用 119.29.29.29 做 PrimaryDNS 完全正常,无法复现你的问题。
    lybtongji
        75
    lybtongji  
       2017-01-18 10:43:38 +08:00 via Android
    来看看, mark
    iyuyue
        76
    iyuyue  
       2017-02-02 14:45:01 +08:00
    请教一个问题。某些海外的 CDN ,虽然没有国内节点,但有相对靠近的亚洲节点。 overture 目前的方案可能无法在这种情况下得到最优的 IP 。能否考虑让 Alternative DNS 也支持 edns-client-subnet ?
    holyshawn
        77
    holyshawn  
    OP
       2017-02-04 19:41:10 +08:00
    @iyuyue #76 一般支持 edns-client-subnet 的海外公共 DNS 都支持按照 IP 来源进行应答,你说的情况并不至于。目前不让 Alternative DNS 支持这个特性主要是考虑配置简单,毕竟海外 CDN 节点也不是近国内就访问的快,不过如果有这个需求的话,下个版本可以考虑单独把开关做出来。
    helixzz
        78
    helixzz  
       2017-03-23 11:44:00 +08:00
    强烈关注……
    jmxct520
        79
    jmxct520  
       125 天前
    老板,6 年了,你项目好久没有 release 。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1828 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 16:33 · PVG 00:33 · LAX 09:33 · JFK 12:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.