V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
holyshawn
V2EX  ›  DNS

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

  •  1
     
  •   holyshawn · Jan 15, 2017 · 13573 views
    This topic created in 3399 days ago, the information mentioned may be changed or developed.

    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 。

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

    Supplement 1  ·  Jan 17, 2017

    更新 1.2.1 版本:

    • 同时监听 TCP 和 UDP
    • 解决新版本 dig 查询的兼容性问题(比如 debian 8 上的)
    • 改进 log 方式
    Supplement 2  ·  Jan 27, 2017
    更新 1.2.2 版本:

    + 修复一个可能导致 IP Match 失效的类型判定 bug ,感谢 sh1r0
    + 代码重构
    79 replies    2023-12-22 15:03:21 +08:00
    R18
        1
    R18  
       Jan 15, 2017 via Android
    战略性 Make
    ztrt
        2
    ztrt  
       Jan 15, 2017
    战略性 install
    DesignerSkyline
        3
    DesignerSkyline  
       Jan 15, 2017
    战略性 ./configure
    Akesudia
        4
    Akesudia  
       Jan 15, 2017
    战略性 star
    usernametoolong
        5
    usernametoolong  
       Jan 15, 2017
    战略性 rm -rf /
    akafeng
        6
    akafeng  
       Jan 15, 2017 via iPhone
    战略性 git clone
    kindjeff
        7
    kindjeff  
       Jan 15, 2017 via iPhone
    战略性 reply
    ovear
        8
    ovear  
       Jan 15, 2017
    战略性 report
    Vicer
        9
    Vicer  
       Jan 15, 2017 via Android
    战略性 collect
    JohnLou
        10
    JohnLou  
       Jan 15, 2017 via iPhone
    。。。
    16500682
        11
    16500682  
       Jan 15, 2017 via iPhone
    战略性 站队型
    douglas1997
        12
    douglas1997  
       Jan 15, 2017
    战略性 回复
    baozijianke
        13
    baozijianke  
       Jan 15, 2017 via iPhone
    战略性 watch
    Phant0m
        14
    Phant0m  
       Jan 15, 2017
    战略性 mark
    qq29701
        15
    qq29701  
       Jan 15, 2017
    战略性 收藏
    VYSE
        16
    VYSE  
       Jan 15, 2017
    加个 tcp dns listen 吧?
    cncaihua
        17
    cncaihua  
       Jan 15, 2017 via Android
    战略性吃瓜
    youthcould
        18
    youthcould  
       Jan 15, 2017
    战略性 mark
    laven
        19
    laven  
       Jan 15, 2017
    战略性吃瓜
    lxll
        20
    lxll  
       Jan 15, 2017 via Android
    战略性 群众
    ClassicOldSong
        21
    ClassicOldSong  
       Jan 15, 2017
    overture 不是一个 midi 软件吗。。。
    vibbow
        22
    vibbow  
       Jan 15, 2017
    overture 不是一个打谱软件吗?
    holyshawn
        23
    holyshawn  
    OP
       Jan 15, 2017
    @VYSE 下个版本考虑直接同时监听 TCP , UDP ,不过监听 TCP 的场景很少感觉,毕竟 overture 一般都在墙内,运行在墙外的意义不大。
    holyshawn
        24
    holyshawn  
    OP
       Jan 15, 2017
    @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  
       Jan 15, 2017
    @holyshawn pull requested
    myguybetter
        26
    myguybetter  
       Jan 15, 2017 via Android
    战略性 fork
    v1024
        27
    v1024  
       Jan 15, 2017 via iPhone   ❤️ 1
    战略性 fuck
    tmac6740
        28
    tmac6740  
       Jan 15, 2017
    战略性 已撸
    Ciefdx
        29
    Ciefdx  
       Jan 15, 2017
    ~~ @JohnLou 队形被你破坏掉了 ~~
    战略性 看看
    ladeo
        30
    ladeo  
       Jan 15, 2017
    名字可以改个字母,比如 Dverture
    TTL 最好别设置太长,遇到花生之类的动态域名估计会有问题
    bianhua
        31
    bianhua  
       Jan 15, 2017   ❤️ 1
    其他的功能很好,但是手动修改 TTL 的功能具有一定破坏性(破坏了数据源对数据的定义),最好能斟酌一下。

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

    考虑到你的程序其实就是建立了一个本地 DNS 服务器,而本地查询的速度是很快的,这样既可以尊重数据源,又可以实现差不多相同的功能。
    wclebb
        32
    wclebb  
       Jan 15, 2017
    看到楼上破坏了队形我就放心回复了……
    请问这个是……做什么用的……
    ins
        33
    ins  
       Jan 15, 2017
    战略性 redis
    est
        34
    est  
       Jan 15, 2017
    战略性 B52 轰炸机。
    misaka00251
        35
    misaka00251  
       Jan 15, 2017 via Android
    第一反应:打谱软件
    holyshawn
        36
    holyshawn  
    OP
       Jan 15, 2017
    @ladeo 命名思想相当不错,这个项目就不动了,毕竟冲突小众,以后可以借鉴。
    holyshawn
        37
    holyshawn  
    OP
       Jan 15, 2017
    @bianhua 所以默认情况下 TTL 修改是不开启的,有需求的人自己手动开启。维护新的域名列表难度还是相当大, Github 上的域名列表除了某 List 外更新基本都十分缓慢。另外,根据我日常的使用,除了动态 DNS 这种特殊需求以外,基本上不影响,动态 DNS 可以用 dnsmasq 指定 DNS 服务器解决。至于缓存的问题,我现在的实践是把 overture 作为 dnsmasq 的上游,手动指定 edns-client-subnet ip ,让 dnsmasq 做它自己专业的缓存事情。我一直在想有没有必要把程序做成大而全的,感觉很多特殊问题都可以用套个 dnsmasq 完美解决。
    holyshawn
        38
    holyshawn  
    OP
       Jan 15, 2017
    @bianhua 我刚才好像理解错了你列表的意思。如果是根据最频繁访问来设定阈值形成列表的话,感觉用处不是很明显,毕竟国内越大的网站越不会随意修改地区服务器的 IP 地址, TTL 的问题主要还是在动态 DNS 上。
    wql
        39
    wql  
       Jan 15, 2017 via Android
    战略性 点赞
    zyqf
        40
    zyqf  
       Jan 15, 2017 via Android
    mark
    popu111
        41
    popu111  
       Jan 15, 2017
    战略性 感谢
    ladeo
        42
    ladeo  
       Jan 15, 2017
    @holyshawn
    overture 的监听端口可以修改吗?
    如果我想在同一台设备上同时安装 overture 和 dnsmasq ,应该会出现端口冲突吧?
    大家都监听 udp:53 ,比如把 overture 的监听端口改成 udp:5533
    这样我一台设备就能 2 个软件都安装了
    PC --> dnsmasq:53 --> overture:5533 --> 上游 DNS
    lydasia
        43
    lydasia  
       Jan 15, 2017
    战略性 Star
    holyshawn
        44
    holyshawn  
    OP
       Jan 15, 2017 via iPhone
    @ladeo 当然可以,我本人也是套了个 dnsmasq 在外面做缓存、自定义的事情。
    Khlieb
        45
    Khlieb  
       Jan 16, 2017 via Android
    哈喇咻👍
    Haos
        46
    Haos  
       Jan 16, 2017 via Android
    战略性 回复
    Monstercat
        47
    Monstercat  
       Jan 16, 2017
    战略性 build
    laowood
        48
    laowood  
       Jan 16, 2017
    战略性 懵逼
    7colcor
        49
    7colcor  
       Jan 16, 2017
    战略性 Mark
    vikeria
        50
    vikeria  
       Jan 16, 2017 via iPhone
    战略性 mark
    lbp0200
        51
    lbp0200  
       Jan 16, 2017 via Android
    原理是什么?
    aheadlead
        52
    aheadlead  
       Jan 16, 2017
    战略性 找节拍器
    anym0us
        53
    anym0us  
       Jan 16, 2017 via iPhone
    战略性 马克
    m939594960
        54
    m939594960  
       Jan 16, 2017
    我还以为你是 安正超 ( https://github.com/overtrue) 你俩就差一个字母
    Ixizi
        55
    Ixizi  
       Jan 16, 2017
    战略性 吃瓜
    Sharuru
        56
    Sharuru  
       Jan 16, 2017
    战略性 DMCA Takedown
    hebeiround
        57
    hebeiround  
       Jan 16, 2017
    战略性 围观
    uqo28887
        58
    uqo28887  
       Jan 16, 2017
    战略性保持队形
    steveshi
        59
    steveshi  
       Jan 16, 2017
    战略性怎么样呢
    chcx
        60
    chcx  
       Jan 16, 2017
    战略性 入侵
    chuhemiao
        61
    chuhemiao  
       Jan 16, 2017
    chemandy
        62
    chemandy  
       Jan 16, 2017
    战略性 SEO
    dewi
        63
    dewi  
       Jan 16, 2017 via iPhone
    战略性 爆肛门
    metowolf
        64
    metowolf  
       Jan 16, 2017
    战略性 收藏
    mritd
        65
    mritd  
       Jan 17, 2017 via iPhone
    战略性 装逼
    SFsx
        66
    SFsx  
       Jan 17, 2017
    战略性 +1s
    missdeer
        67
    missdeer  
       Jan 17, 2017
    怎么知道一个 DNS server 是否支持 edns-client-subnet ?
    JackyBao
        68
    JackyBao  
       Jan 17, 2017
    战略性 继续使用 pdnsd
    holyshawn
        69
    holyshawn  
    OP
       Jan 17, 2017
    @missdeer 一般没有明确说明支持的都是不支持,可以 patch dig 直接测试,参见: http://noops.me/?p=653
    Astralis
        70
    Astralis  
       Jan 17, 2017
    {
    "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 ,要不然也不用这么麻烦了
    Astralis
        71
    Astralis  
       Jan 17, 2017
    想问楼主一个问题
    {
    "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
       Jan 17, 2017
    @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 。
    Astralis
        73
    Astralis  
       Jan 17, 2017
    @holyshawn 服务器是 centos7 我本机是 MacOS 如果主 DNS 用我的服务器就查询不到 home.console.aliyun.com 这类域名,不会返回结果,然后就是超时,但是在服务器上是能查到的,其他的域名全部都是正常的,如果服务器关闭 EDNSClientSubnet 的话能正常解析这个域名,但是国内的网站会被解析成国外的 IP ,所有没办法只能把我服务器的 IP 设置为备用 DNS 了
    holyshawn
        74
    holyshawn  
    OP
       Jan 17, 2017
    @maojy1989 我这里用 119.29.29.29 做 PrimaryDNS 完全正常,无法复现你的问题。
    lybtongji
        75
    lybtongji  
       Jan 18, 2017 via Android
    来看看, mark
    iyuyue
        76
    iyuyue  
       Feb 2, 2017
    请教一个问题。某些海外的 CDN ,虽然没有国内节点,但有相对靠近的亚洲节点。 overture 目前的方案可能无法在这种情况下得到最优的 IP 。能否考虑让 Alternative DNS 也支持 edns-client-subnet ?
    holyshawn
        77
    holyshawn  
    OP
       Feb 4, 2017
    @iyuyue #76 一般支持 edns-client-subnet 的海外公共 DNS 都支持按照 IP 来源进行应答,你说的情况并不至于。目前不让 Alternative DNS 支持这个特性主要是考虑配置简单,毕竟海外 CDN 节点也不是近国内就访问的快,不过如果有这个需求的话,下个版本可以考虑单独把开关做出来。
    helixzz
        78
    helixzz  
       Mar 23, 2017
    强烈关注……
    TonyLab
        79
    TonyLab  
       Dec 22, 2023
    老板,6 年了,你项目好久没有 release 。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4075 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 184ms · UTC 00:52 · PVG 08:52 · LAX 17:52 · JFK 20:52
    ♥ Do have faith in what you're doing.