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

让 dnsmasq 支持 chnroute 策略

  •  
  •   muziling · 2018-08-22 21:37:57 +08:00 · 7538 次点击
    这是一个创建于 2315 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/muziling/dnsmasq-chnroute

    配置举例:
    no-resolv
    all-servers
    server=114.114.114.114,0
    server=8.8.8.8,1
    chnroute-file=/root/chnroute.txt

    让 dnsmasq 发送 DNS 请求到所有 dns,dns ip 后面逗号 0 表示被污染不可信,1 表示干净的。
    如果不可信的 DNS 解析到 IP 为在 chnroute.txt 里,则接受,否则抛弃
    如果可信的 DNS 解析到 IP 为在 chnroute.txt 里,则抛弃,否则接受

    这样可以保证访问国内网站不会跑到国外去。

    补充一下:补丁是基于 2.79 版本
    第 1 条附言  ·  2018-08-24 22:32:25 +08:00
    google 有些域名会解析到国内 IP,还是需要对这些域名进行指定。要不 手机上的 google play 用不了
    第 2 条附言  ·  2018-08-31 00:13:46 +08:00
    services.googleapis.cn 这个地址走 8.8.8.8 解析就可以使用 google play,要不解析到 google 的国内服务器,安卓的 google play 就会提示检索失败
    20 条回复    2019-02-15 08:58:40 +08:00
    weyou
        1
    weyou  
       2018-08-22 21:46:40 +08:00 via Android
    为什么不用 ChinaDNS ?
    TheKiller
        2
    TheKiller  
       2018-08-22 21:57:38 +08:00
    muziling
        3
    muziling  
    OP
       2018-08-23 09:15:14 +08:00
    @weyou ChinaDNS 不稳定,当时有人在 issue 还是论坛里发过贴,就是进程在,但 chinadns 没响应, 我自己也碰到过问题。


    @TheKiller 印象几年前试过,实在是不会配置,不知道配置方法有没有简单点了。 我个人还是喜欢简单点,就行,一个 DNS 方案,两个程序就搞定,通过 s-s tunnel 转发 8.8.8.8,然后 dnsmasq 指定下就好了, 不需要 gfwlist。
    gfwlist 偶尔总是会碰上个别域名被墙,但不在列表里。比如 VPS 在枫叶国, 浏览器默认打开的是 google.ca ,这个地址就不在列表里。
    missdeer
        4
    missdeer  
       2018-08-23 09:15:17 +08:00
    这策略有问题吧,好像现在有的污染 IP 是国内 IP
    EricInBj
        5
    EricInBj  
       2018-08-23 09:21:35 +08:00
    @muziling 访问一下 https://google.com/ncr 后面加个 ncr 就不会往 google.ca 跳转了
    muziling
        6
    muziling  
    OP
       2018-08-23 10:07:37 +08:00
    @missdeer 暂时没碰到,不知道有哪些?


    @EricInBj 有时直接在 chrome 地址栏输入要搜索的内容, 每次要先输入 google.com/ncr 再搜索,总是多了一步。
    还有 privoxy.org 之类的也是墙的,不知道是不是我的列表太旧了,这个也不在里面。 不想每次访问不了都去检查列表。
    TheKiller
        7
    TheKiller  
       2018-08-23 11:25:41 +08:00
    @muziling ChinaDNS 那个问题我没有遇见过 所以不好说

    Pcap_DNSProxy 配置上内容相对多点 但大部分用默认配置就行了 用下来效果很不错 占用现在控制的也很好
    Actrace
        8
    Actrace  
       2018-08-23 15:09:59 +08:00
    这样这个 dnsmasq 只能在国内运行了。。如果想放在海外机器上运行,正好需要一个相反的规则设定。
    muziling
        9
    muziling  
    OP
       2018-08-23 17:24:19 +08:00
    @Actrace 具体是需要什么样的效果,举个例子?
    Kobayashi
        10
    Kobayashi  
       2018-08-23 17:40:25 +08:00 via Android
    麻烦稍微详细解释一下,针对不可信 DNS 和可信 DNS 判断的优先级,如果不可信 DNS 返回了国内 IP 且可信 DNS 返回了国外 IP,这种情况怎么处理?

    另外,不应该同时对不可信、可信 DNS 返回的结果进行判断,这相当于开启了 ChinaDNS 的双向过滤。而关于双向过滤,ChinaDNS 作者曾经说过,是给特殊网络情况的人用的,不要开启。
    Actrace
        11
    Actrace  
       2018-08-23 18:09:17 +08:00
    @muziling
    举个粒子 www.baidu.com
    设置不信任 DNS 114.114.114.114
    信任 DNS 8.8.8.8

    那么用 不信任 DNS 解析时,会返回一个北京的 IP (假设),接受。
    用信任 DNS 时,返回一个香港的 IP (假设),不接受。

    是不是这样的设计?
    muziling
        12
    muziling  
    OP
       2018-08-23 18:15:14 +08:00
    @Kobayashi
    “如果不可信 DNS 返回了国内 IP 且可信 DNS 返回了国外 IP,这种情况怎么处理?”
    ==>这种情况就是 dnsmasq 自己的 all-servers 机制了,谁响应快,就用谁的。这样看
    的确存在问题,如果可信 DNS 速度比不可信 DNS 快,就会解析到国外 IP,丢失部分网站有国内 IP 的 CDN 加速了。
    有机会再完善下。

    按 dnsmasq 默认机制,应该不存在双向过滤的情况。
    muziling
        13
    muziling  
    OP
       2018-08-23 20:04:15 +08:00
    @Actrace #11
    看香港 IP 有没有在 chnroute 里,有的话,不接受,没有的话,接受

    dnsmasq 自带的规则 ,哪个 DNS 返回速度快,就用哪个
    不知道 --strict-order 这个参数可不可以限制一下。
    alex8
        14
    alex8  
       2018-08-23 23:47:22 +08:00 via iPhone
    没用的 ,dns 改成多少都没用,了解下旁路抢答 路由牵引
    muziling
        15
    muziling  
    OP
       2018-08-23 23:55:16 +08:00
    @sunweiqiang8 #14 8.8.8.8 是假设可以无污染抵达,比如通过 VPN 走 8.8.8.8,或者用 ss-tunnel 转发成本地 127.0.0.1#5353 也是可以的。

    目前自己在用,效果达到预期,虽然有上面提到的问题,但目前运营商的 DNS 速度肯定比 8.8.8.8 来的快。
    alex8
        16
    alex8  
       2018-08-24 00:31:53 +08:00 via iPhone
    可以在 8.8.8.8 后加 dnsmasq 强制最大缓存时间 效果更好
    has
        17
    has  
       2018-12-31 18:55:59 +08:00
    看到你在恩山的介绍,这个 openwrt 上面有有 dnsmasq 和 dnsmasq-full 两个版本。你做的 patch 能够同时兼容吗?
    muziling
        18
    muziling  
    OP
       2019-02-12 09:16:47 +08:00
    @has 好久没上 V2EX 了,openwrt 上的两个版本差距只是一些不常用的功能不编译,比如非 full 版本,好像没有 ipset 功能。 修改的代码没有在 if define 段落里,应该都可以用,可以试一下。

    自己一直在用,效果非常满意。
    has
        19
    has  
       2019-02-12 12:35:30 +08:00
    @muziling #18 我推送一个 PR 吧
    muziling
        20
    muziling  
    OP
       2019-02-15 08:58:40 +08:00
    @has 谢谢,合并了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3122 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:38 · PVG 21:38 · LAX 05:38 · JFK 08:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.