V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Chenyao
V2EX  ›  分享创造

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

  •  2
     
  •   Chenyao · 2017-08-20 02:59:49 +08:00 · 5025 次点击
    这是一个创建于 2649 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    第 1 条附言  ·  2017-08-20 04:02:56 +08:00

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

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

    Chenyao
        1
    Chenyao  
    OP
       2017-08-20 03:23:56 +08:00
    比较尴尬的是你需要设置 host,把 dns.google.com 解析到一个没有被墙的 ip。

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

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

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

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

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

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

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

    也许是教育网的出墙环境比较好吧....
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3195 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:25 · PVG 21:25 · LAX 05:25 · JFK 08:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.