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

freedns-go 一个类似 ChinaDNS 的轮子

  •  
  •   Chenyao · 2018-05-08 21:50:47 +08:00 · 5400 次点击
    这是一个创建于 2423 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ChinaDNS 主要是解决大厂同时有国内国外 CDN 的时候,查询时会返回国际站点的问题。freedns-go 是一个解决类似问题的工具,他会预先查询一下,如果发现有国外的 ip 或者遇到错误的时候,就会使用干净的 dns 再查询一遍。

    使用懒缓存,同时遵守 ttl 过期时间。

    golang 写的,ip 地址是用 ipip.net 的给出的一个列表,然后硬编码到代码里。

    项目地址:Chenyao2333/freedns-go

    第 1 条附言  ·  2018-05-12 01:37:48 +08:00
    建议大家套着 ss-tunnel 使用。或者通过路由器配置,让 8.8.8.8 的路由走代理出去。
    16 条回复    2018-08-01 23:48:02 +08:00
    zrt
        1
    zrt  
       2018-05-08 21:57:30 +08:00
    不错不错..可以自己建干净的 dns 了..
    TheKiller
        2
    TheKiller  
       2018-05-08 22:17:50 +08:00
    emmm 硬编码到时候 IP 列表一更新又要更新了 应该要做成读取配置文件比较好....
    Chenyao
        3
    Chenyao  
    OP
       2018-05-08 22:22:39 +08:00
    @TheKiller 嗯嗯。不过这个微变化一般不影响 dns 的正确性,出现一点错误也没关系。而且为了第一次部署方便就硬编码进去了。
    LazyZhu
        4
    LazyZhu  
       2018-05-09 08:22:28 +08:00
    其实 golang 版 ChinaDNS 早就有,了 https://github.com/shawn1m/overture

    楼主可以考虑写一个 Golang 版的 dnschooser, https://www.v2ex.com/t/419555
    Chenyao
        5
    Chenyao  
    OP
       2018-05-09 10:16:23 +08:00 via iPhone
    @LazyZhu 呃,可以考虑加上。不过我现在策略是认为有国外 ip (没有国内 cdn,或者可能被污染)就返回第二个。chose 之前并不是很好判断一个返回是否是正确的……
    Tink
        6
    Tink  
       2018-05-09 21:34:27 +08:00 via iPhone
    出现好多 error,连不上 8888
    Chenyao
        7
    Chenyao  
    OP
       2018-05-09 22:24:13 +08:00
    @Tink 呃呃,那就是你真的连不上 8888 哈哈哈。。。如果你有使用任何办法转发 8888 到本地的某个端口(比如说 5353,你可以使用

    ```
    ./freedns-go -c 127.0.0.1:5353
    ```
    当然你把 8888 的路由做的特殊一点也行(
    Tink
        8
    Tink  
       2018-05-09 22:54:23 +08:00 via iPhone
    得上 sstunnel
    mmtromsb456
        9
    mmtromsb456  
       2018-05-11 23:24:48 +08:00 via Android
    大佬有打算支持把国外 dns 请求经过 socks 类的代理发出去这种请求吗,主要是 1111 国内经常就伦敦去了,查询时间就比较久,能塞到香港的代理里面就快多了。
    exkernel
        10
    exkernel  
       2018-05-11 23:36:49 +08:00   ❤️ 1
    Chenyao
        11
    Chenyao  
    OP
       2018-05-12 01:25:18 +08:00
    @mmtromsb456 楼上发的 overture 是一种选择,ss-tunnel 转发一下也可以。
    mmtromsb456
        12
    mmtromsb456  
       2018-05-12 16:57:15 +08:00 via Android
    @Chenyao 我有个思路是在 surge for mac 中使用 enhance mode 捕获 freedns-go 的请求然后把 1111 的分流出去,然后 surge 再使用这个本地 dns,这个流程应该可以吧?因为我现在是把 surge 作为 ssr 的前置代理然后在局域网中以网关工作共享的。
    Chenyao
        13
    Chenyao  
    OP
       2018-05-12 17:49:29 +08:00 via iPhone
    @mmtromsb456 你可以试一下,我没有用过 surge。只要让 1111 走和代理同一个出口就可以起到作用。
    muziling
        14
    muziling  
       2018-07-24 17:33:01 +08:00
    挺好的,不用维护 gfwlist 了,把 ip list 编译进程序,不方便更新,改成配置文件了
    https://github.com/muziling/freedns-go
    muziling
        15
    muziling  
       2018-07-24 18:14:03 +08:00
    没缓存,第一次访问的域名,效率好低啊,单线程排队请求 DNS 解析?
    Chenyao
        16
    Chenyao  
    OP
       2018-08-01 23:48:02 +08:00
    @muziling 前几天看到你的贡献啦,我有时间给改进代码里面

    请求是并发的。但之前我遇到过被污染的域名 114 会超时而不是返回错误结果,为了防止有国内的 cdn 只能先等国内域名返回。你可以手动测一下上游的行为。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:22 · PVG 03:22 · LAX 11:22 · JFK 14:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.