V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
x83bajk

撸了一个轮子:支持本地缓存、防劫持的 dns

  •  2
     
  •   x83bajk · Aug 20, 2017 · 5517 views
    This topic created in 3183 days ago, the information mentioned may be changed or developed.

    基于 Google 的 DNS-Over-HTTPS。本地有缓存策略,用起来挺舒服的

    项目地址:https://github.com/Chenyao2333/freedns

    node.js 不是很熟悉,所代码我写的比较奔放,欢迎 pr。

    (为了践行社会主义核心价值观,不接受过于不和谐等的 pr )

    Supplement 1  ·  Aug 20, 2017

    我把 dns.google.com 加到本身的缓存里面了。现在clone下来应该能直接用了。

    这个是附带的统计信息页面:

    x83bajk
        1
    x83bajk  
    OP
       Aug 20, 2017
    比较尴尬的是你需要设置 host,把 dns.google.com 解析到一个没有被墙的 ip。

    (其实还有一个循环解析自己的风险,所以加 hosts 应该是必要的)
    geelaw
        3
    geelaw  
       Aug 20, 2017 via iPhone
    虽然并不用它,不过也粗略看了一下。
    虽然并不是很有耐心看 JS,不过还是粗略地看了一下文字。
    有一些比较尴尬的英文……比如 hit 的过去分词是 hit 而不是 hitted,还有 README 有一些语法 / 用词问题😳
    sofs
        4
    sofs  
       Aug 20, 2017 via Android
    看到这样的功能用 node.js 实现,马上没兴趣看了。
    williamx
        5
    williamx  
       Aug 20, 2017
    +1
    Node.js 再 +1
    LZRng
        6
    LZRng  
       Aug 20, 2017 via iPhone
    教我怎么用……
    firefox12
        7
    firefox12  
       Aug 20, 2017 via iPhone
    这不是个鸡蛋问题吗?首先你得找到一个可以翻墙访问的 dns.google.com 的 host,
    jimages
        8
    jimages  
       Aug 20, 2017 via iPhone
    dnscrypt 拥有以上所有功能....
    ztxgeol
        9
    ztxgeol  
       Aug 20, 2017 via Android
    ls 好无情,我来支持一下
    mario85
        10
    mario85  
       Aug 20, 2017 via Android
    这个好,有特殊要求的表示可能比 dnscrypt/tcpdns 要好用
    x83bajk
        11
    x83bajk  
    OP
       Aug 20, 2017 via iPhone
    @geelaw 哈哈谢谢学长,我英语一直很尬的存在……我多注意
    x83bajk
        12
    x83bajk  
    OP
       Aug 20, 2017 via iPhone
    @firefox12 现在不用 hosts 了,我给加到 freedns 本身自己的缓存机制里了。直接搞下来就能用
    x83bajk
        13
    x83bajk  
    OP
       Aug 20, 2017 via iPhone
    @LZRng 先安装 nodejs v8.0 以上版本。接下来运行 readme 里面的命令就行
    firefox12
        14
    firefox12  
       Aug 20, 2017 via iPhone
    如果这个 ip 被墙了 怎么办?速度极慢怎么办
    x83bajk
        15
    x83bajk  
    OP
       Aug 20, 2017 via iPhone
    @firefox12 额……要是被墙的话,可以可以删掉 cache.txt ,然后把没被墙的加入到系统 host 里面。

    不过我猜应该不是被墙,你可以先设置下 EDNS_IP (在 index.js 里面)先关掉 freedns,之后删掉 cache.txt

    接下来如果发现某个网站解析比较慢你可以看看下 5353 端口的网页里面,in_quest_google 这一个数字是多大。
    firefox12
        16
    firefox12  
       Aug 20, 2017 via iPhone
    @Chenyao 关键是如果这个 ip 被墙了 我应该如何找下一个不被墙的 dns google com 这是一个问题。

    其次使用 dns google com 的问题主要是太慢 500ms 内很难有反应,这会导致很多应用直接报错,当然你有 cache 会可以解决,但是更多的问题 一般你要用国外 dns 解析的域名 都是已经被和谐的域名。拿到的 ip 也很难直连。
    x83bajk
        17
    x83bajk  
    OP
       Aug 20, 2017
    @firefox12 我附到 git 的 ip 教育网延迟是 50ms,应该是香港或者台湾的服务器。如果你 ping 起来比较慢,可以把 cache.txt 删掉。

    如果这个 ip 真的被墙了,可以翻墙上 dns[dot]google[dot]com 这个网页,填上你本地的 ip ( edns 用),之后获得一些新的 ip 加入 host。

    不用太担心速度问题,cache 虽然简陋,但还是很稳的。
    firefox12
        18
    firefox12  
       Aug 20, 2017 via iPhone
    @Chenyao 因为我早就做过这个产品了,但是速度很慢,实际体验很差。并且 获得的 dns gooe.com 的 ip 本地都连不通,只能靠 go-hosts 里的 ip 来解决。所以最好的办法还是 dns 加密 发送到墙外 解析 再传回来
    x83bajk
        19
    x83bajk  
    OP
       Aug 20, 2017
    @firefox12 你可以试试这个作为 dns:101[dot]6[dot]163[dot]87。

    不过我现在 edns_ip 是教育网的,普通网站 cdn 可能会被解析到教育网的,加载可能比较慢(因为 cache 还不支持根据 ends_ip 分类)。

    也许是教育网的出墙环境比较好吧....
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5506 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 86ms · UTC 09:17 · PVG 17:17 · LAX 02:17 · JFK 05:17
    ♥ Do have faith in what you're doing.