爱意满满的作品展示区。
finaldie

[DNSTurbo] 优化本地 DNS 缓存记录中间件

  •  
  •   finaldie ·
    finaldie · Jan 12, 2017 · 4080 views
    This topic created in 3431 days ago, the information mentioned may be changed or developed.

    前阵子统计了一把家里 DNS 缓存记录的情况, 即使在更换 geo-based DNS, 也依然会有 20%-30%的记录存在 latency 较高的情况, 于是做了一个 DNS 中间件, 专门用于检测并清理掉这些 latency 较高的记录, 从而一定程度上起到加速上网的效果. 感兴趣的朋友不妨先看看下面的宣传片.

    Trailer:
    Youtube: https://www.youtube.com/watch?v=2u_-Wl7sDdA
    Youku: http://v.youku.com/v_show/id_XMTk3NDE2NDUwOA==.html?spm=a2hfx.8251854.recordContent.DL~DD~5~5~1~3~A.jJzKYU

    项目地址: https://github.com/finaldie/DNSTurbo

    目前我的部署方案是放在家中一台 Raspberry Pi 中, 所有的设备的 DNS server 都指向这台 Raspberry Pi :) 希望能够帮到大家.

    22 replies    2017-01-14 13:42:27 +08:00
    zhs227
        1
    zhs227  
       Jan 12, 2017   ❤️ 1
    视频赞一下,像大片一样。
    finaldie
        2
    finaldie  
    OP
       Jan 12, 2017
    @zhs227 有幸早年积累了一些视频制作经验 谢谢能够喜欢 :D
    missdeer
        3
    missdeer  
       Jan 12, 2017
    不是很懂,跟直接在 Raspberry Pi 上开一个 dnsmasq 有什么区别?
    finaldie
        4
    finaldie  
    OP
       Jan 12, 2017
    @missdeer dnsmasq 是必要的, 但侧重点不一样 :) dnsmasq 更关心记录正确性, 和有效性(live detection), 不根据其他 dimension 做优化, 比如 latency :)
    zococx
        5
    zococx  
       Jan 12, 2017
    歪个楼,楼主视频里终端用的什么字体?是 Mac 自带的不?
    finaldie
        6
    finaldie  
    OP
       Jan 12, 2017
    @zococx 字体叫: Monaco, Mac 自带 :)
    pango
        7
    pango  
       Jan 12, 2017
    遍历一边所有上游 DNS 返回的 A/AAAA 记录,然后选择 latency 最小的? 那这样的话,首次访问岂不是要浪费很多时间?
    nicholaswan
        8
    nicholaswan  
       Jan 12, 2017
    请教下搭建在国内或者国外的 VPS 上有作用吗?
    heiybb
        9
    heiybb  
       Jan 12, 2017 via Android
    视频好赞哈哈
    sorcerer
        10
    sorcerer  
       Jan 12, 2017 via iPhone
    如何让这个和 chinadns dnsmasq 搭配使用
    NovemberEleven
        11
    NovemberEleven  
       Jan 12, 2017
    大片
    finaldie
        12
    finaldie  
    OP
       Jan 12, 2017   ❤️ 2
    @pango 这里假设首次访问是在没有任何 latency 信息的情况, 所有的记录会直接 bypass 到下游, 不会有任何 delay, 但 ttl 会被相应的调整, 当 latency 记录被周期性加入时, ttl 窗口也会相应的 scale up :)

    @nicholaswan 有的, 但前提是访问流量也是要经过这台 vps 转发 :)

    @heiybb 谢谢 :D

    @sorcerer 参考拓扑: browser --> DNSTurbo --> chinadns|dnsmasq, 不过目前 DNSTurbo 的上游 server 地址是通过 load /etc/resolv.conf 进行设置, 所以如果上游地址与 dnsmasq 所在地址不一致, 就会造成问题, 所以暂时需要分装在不同的机器上. 我后面会增加一个配置项来自由配置上游 :D
    masir
        13
    masir  
       Jan 12, 2017 via Android
    视频做的不错哦~
    finaldie
        14
    finaldie  
    OP
       Jan 13, 2017
    @NovemberEleven @masir 多谢多谢 :D
    mwylaoma
        15
    mwylaoma  
       Jan 13, 2017   ❤️ 1
    @finaldie Building src/services/dns ... src/cache.cpp:5:18: fatal error: ares.h: No such file or directory
    ubuntu Build 出错
    finaldie
        16
    finaldie  
    OP
       Jan 13, 2017
    @mwylaoma 溜掉了 fetch submodule 的步骤 :)
    ```
    git submodule update --init --recursive
    ```

    然后重试 build 即可, 因为 dns client service 是一个 submodule :)
    finaldie
        17
    finaldie  
    OP
       Jan 13, 2017
    @mwylaoma 纠正一下, 不是 submodule 的问题, 是漏掉了安装 libc-ares-dev, 已经更新了 readme, 多谢指正 :)
    mwylaoma
        18
    mwylaoma  
       Jan 13, 2017
    @finaldie 我试试
    mwylaoma
        19
    mwylaoma  
       Jan 13, 2017
    @finaldie 可以 Build 了,但是启动后,好像获取到不 DNS 请求结果
    mwylaoma
        20
    mwylaoma  
       Jan 13, 2017
    @finaldie 53 端口没有开启,只是启动了 7759 端口
    finaldie
        21
    finaldie  
    OP
       Jan 14, 2017 via iPhone
    @mwylaoma 基本两种可能, 1 )启动时忘记加 sudo 2 )已经有 53 端口的进程存在了 :)从 log 里可以看出端倪,如果还有问题,可以考虑 open 个 issue ,贴上详细的 log 和系统端口信息 : D
    mwylaoma
        22
    mwylaoma  
       Jan 14, 2017
    @finaldie 有加 sudo , 53 端口 bind 占用了,杀掉,但是还是不行,有空我再试试,不行的话,再开 issue
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5395 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 93ms · UTC 08:16 · PVG 16:16 · LAX 01:16 · JFK 04:16
    ♥ Do have faith in what you're doing.