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

anchorDNS,彻底解决 CHNRoutes 分流国内网站时 DNS 问题的一个本地 DNS Server (Java)

  •  1
     
  •   tobyxdd ·
    tobyxdd · 2015-07-19 23:02:25 +08:00 · 9649 次点击
    这是一个创建于 3422 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Github - https://github.com/tobyxdd/anchorDNS

    懒得写所以下面内容直接复制README了... :)

    anchorDNS

    anchorDNS 是一个运行在本地的分流DNS服务器

    这能干啥?

    众所周知的 CHNRoutes 项目能够修改系统路由表使拨VPN后 中国IP依然直接连接,仅国外连接通过VPN以防止国内网站也通过VPN绕行。然而为了解决DNS污染,一般会让DNS解析全部走VPN到国外DNS服务器,因此上了CDN或有国外服务器的中国网站 依然会解析到国外或国内非最佳服务器降低访问速度。

    anchorDNS 正是为解决此问题而设计,通过先从国内DNS解析域名,若发现是中国IP则直接返回结果,若非中国IP则改用境外DNS解析的方法 能够既完全保持国内网站的解析正确 又获得无污染的境外网站DNS查询结果。用户只需分别提供一个自己喜欢的国内DNS与国外DNS地址,与一个中国IP段的CIDR表(已自带)

    另附"reverse"反模式,解释见下文

    示例——
    解析 www.baidu.com -> 查询114.114.114.114 -> 发现是中国IP -> 直接使用
    解析 twitter.com -> 查询114.114.114.114 -> 发现非中国IP -> 抛弃结果查询8.8.8.8 -> 使用正确无污染结果

    使用姿势

    去 Release 下载最新版,解压后bin目录下 带参数运行 anchorDNS

    参数详解——

    usage: anchorDNS
     -a,--alternativeDNS <arg>   Specify the alternative DNS server.
     -c,--cidr <arg>             Specify the CIDR list.
     -d,--defaultDNS <arg>       Specify the default DNS server.
     -h,--help                   Show this help message.
     -r,--reverse                Check the alternative DNS first.
    
    -a 指定国外DNS服务器
    -d 指定国内DNS服务器
    -c 指定中国IP CIDR表(可用本项目下的 **ChinaCIDR.txt** 或 [此处下载最新版][3])
    -r 反模式:优先查询国外DNS 发现中国IP后再改用国内DNS **(不建议使用!)**
    

    比如: anchorDNS -d 114.114.114.114 -a 8.8.8.8 -c ChinaCIDR.txt

    然后设置机器的DNS服务器为 127.0.0.1 !

    技术细节

    使用 Netty 5.0 / dnsjava 处理DNS通信,Gradle构建,JDK1.6+

    12 条回复    2016-09-02 20:14:20 +08:00
    tux
        1
    tux  
       2015-07-20 00:26:21 +08:00
    finally
    Daniel65536
        2
    Daniel65536  
       2015-07-20 02:28:53 +08:00 via iPhone
    解析 twitter.com -> 查询114.114.114.114 -> 返回的随机fake ip恰好是国内的 怎么解决?
    另外居然不同时请求国内国外,会拖慢速度的。
    tobyxdd
        3
    tobyxdd  
    OP
       2015-07-20 08:09:58 +08:00 via Android
    @Daniel65536 fake ip不可能是国内的 不过确实应该同时请求国内外dns 之后版本改进
    dopcn
        4
    dopcn  
       2015-07-20 09:52:24 +08:00
    “彻底解决 CHNRoutes 分流国内网站时 DNS 问题” 是指解决chnroutes 私有地址无法解析?
    jiangzhizhou
        5
    jiangzhizhou  
       2015-07-20 10:14:21 +08:00
    可以跑在openwrt上么?目前发现有污染就是路由器ss才出现,直接Pac ss一般都没有发现dns污染。
    tobyxdd
        6
    tobyxdd  
    OP
       2015-07-20 10:58:26 +08:00 via Android
    @dopcn 用chnroutes也会dns走vpn导致国内网站解析到国外节点 解决这问题的
    tobyxdd
        7
    tobyxdd  
    OP
       2015-07-20 10:58:48 +08:00 via Android
    @jiangzhizhou 如果你能在wrt上跑java的话。。。
    plqws
        8
    plqws  
       2015-07-20 12:07:14 +08:00
    @jiangzhizhou 有一种曲线救国的方法,就是把路由器的DNS设置成你的内网IP,然后在你的PC上跑这个DNS服务器。
    有个疑问就是路由器DNS充当的角色有点不明白。@tobyxdd
    tobyxdd
        9
    tobyxdd  
    OP
       2015-07-20 12:13:06 +08:00
    @plqws 有些自带dns服务的路由默认会把dhcp clients的dns设成路由自己 走的是路由的解析
    21grams
        10
    21grams  
       2015-07-20 20:54:10 +08:00
    这不就跟chinadns是一样的嘛
    qucklay
        11
    qucklay  
       2015-07-20 21:40:56 +08:00
    能说出和ChinaDNS的区别吗
    kathylincn
        12
    kathylincn  
       2016-09-02 20:14:20 +08:00
    可以增加不只设置 IP 。也可以设置端口吗?比如 114.114.114.114:53 或 202.48.72.85:443 之类的.因为有的 DNS 不是默认的 53 端口,带端口的话,程序不认。现在只能本程序设置端口,DNS 不能指定端口。很大程序上限制了自定义 SS
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   938 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:05 · PVG 05:05 · LAX 13:05 · JFK 16:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.