V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shinichii
V2EX  ›  DNS

谈谈我的 DNS 治污方案

  •  1
     
  •   shinichii · 46 天前 · 3826 次点击
    这是一个创建于 46 天前的主题,其中的信息可能已经有所发展或是发生改变。
    开个小号来聊聊……可能是出于性格原因,我对 DNS 有一种近乎于洁癖的要求,所以在意识到 DNS 的重要性之后,就在两年前摸索适合自己的解决方案。在经过反复折腾和长时间运作之后,感觉效果基本达到预期,也就有了这篇碎碎念,大家可以根据自己情况来改进。

    这个方案需要两只小鸡,小鸡一号位于不远的异国他乡,运行 AdGuard Home,作用是从源头得到尽可能干净安全的 DNS,兼顾去广告。上游使用加密 cloudflare 和 Google 的 DNS,需要设置客户端白名单,把家里的 IP 地址段加进来。一号鸡本身申请个证书,拿到后在 AdH 里面启用加密来运行自己的 DNS 服务,根据需要可改端口。

    小鸡二号在家里或单位,可以是 WS 或 Linux,看程序支持情况。这里我选择的是 Overture (其他轮子还有 smartdns 、coredns 等等)。二号只运行在局域网内,只通过加密方式获取一号的 DNS 信息,另外还要承担分流、缓存等作用,如果你高兴还可以再次去一遍广告。最后家里各个客户端使用这个二号鸡做 DNS 服务器就可以了,如此这般就基本做到了从始至终都是走加密通道,彻底排污治污。

    有些细节要说一下,为啥叫“基本”呢,因为目前为了快一些国内部分我在二号鸡上用的是国内 DNS,如果想更纯,国内也可以加密,但不知道实际意义有多大,我觉得有点太过于极端,但还是要根据各自的实际情况。

    第二个是如果路由器上用的是梅林和那个插件,那么还要额外设置才能让路由器也走二号鸡,可以用关键词“KoolShare 梅林固件设置自定义 DNS”来搜,插件里的“DNS 劫持”功能也最好关掉。

    第三是这个方案缺点是无法在 AdH 里面看到各个终端的情况,当然你可以在二号上套娃一个 AdH,但分流不太方便,没有 Overture 灵活。另一个缺点是对于一号鸡的稳定性是个考验,你可以配置多个一号鸡,那么成本就高上去了,或者事先想好备用用啥,或者不做路由器上的调整,不至于全部 gg 。

    另外还有一些细节可以讨论,比如缓存设置多大、用 DoT 还是 DoH 、是否有更好的 AdH 替代品等等。希望能抛砖引玉,看看还有没有优化空间(那么只有砸钱了)。
    第 1 条附言  ·  13 天前
    后续:增加了软路由并在上面配置好了 smartdns ,基本达到完美状态。可参考 https://www.kafuuchino.fun/archives/675
    27 条回复    2021-11-10 07:41:26 +08:00
    valuable
        1
    valuable  
       46 天前
    感谢分享
    yanqiyu
        2
    yanqiyu  
       46 天前
    其实 Google DoT 能在国内直接访问,我是国内开个 AdGuard Home 上游指向 Google DoT,对公网开放 DoT,然后到处用的
    shinichii
        3
    shinichii  
    OP
       46 天前
    其实还有个缺点,就是得到的 DNS 是根据一号鸡的位置而定的,有可能不是最快的,除非和你的那啥比较近,所以这套方案也是无法满足每个人的需求。
    jinliming2
        4
    jinliming2  
       46 天前
    @shinichii 关键词:EDNS Client Subnet (ECS)。部分上游 DNS 是支持的( Google 支持,Cloudflare 不支持)。
    请求的时候指定个国内离你比较近的 ip 网段,就可以得到比较近的解析结果。
    lns103
        5
    lns103  
       46 天前 via Android
    @jinliming2 但是本地化不行,之前我不开代理在路由器上用 Google 以及 cloudflare 的 doh 作为上游,一些国内网站会解析到国外的 CDN 去,造成上网缓慢
    xiaoun001
        6
    xiaoun001  
       46 天前 via Android   ❤️ 2
    我的方案 异国 ser 一个,本地 lan ser 隧道接入异国,1,路由默认国外,国内静态路由( 5000 多条,汇聚后 200 左右)走国内。2,本地开 bind9 dns,默认转发国内 114,119,gfwlist 国外网站转发上游服务器 dns,我的是 8888,这样,dns 纯净了。 也不会国内龟速了。有兴趣的话,啥时候开个帖子,详细分享一下流量操控。
    Kasumi20
        7
    Kasumi20  
       46 天前
    写一个 DNS 加密代理不就行了?速度方面客户端和服务端都做一下缓存,为了真实牺牲点速度有何不可。
    有兴趣的可以看看我写的:
    https://github.com/develon2015/dnsd/tree/client-server
    missdeer
        8
    missdeer  
       46 天前
    fetich
        9
    fetich  
       46 天前
    嗯,和我的方案差不多,只不过在海外的小鸡上,我只是简单的把 53 请求转发到公共解析。

    在国内的小鸡上用 AdGuard Home 从 119 和海外的小鸡上获得正确的解析(这里可以启用最快 IP 选项)

    所有的机器都使用国内的小鸡。

    完美!
    cache
        10
    cache  
       46 天前
    @Kasumi20
    没看懂,你这个和直接用加一层 tunnel 透传 dns 请求的区别在哪?
    还是不能解决楼主说的国内 cdn 加速问题

    我能想到最干净的方案是
    本地部署一个 dns 缓存服务(解析性能),上游调用一个完美支持 ECS 的 doh 服务器(解析准确性)
    github2020
        11
    github2020  
       46 天前
    GXXList 里的域名走 dns over proxy 解析,解析完通过 proxy 访问,目标离 proxy 最近;
    其它域名通过本地运营商 dns 解析就可以了

    家里软路由的 linux 上跑个 glider,配好规则,家里问题就解决了,在外面时手机和电脑都 ss 全局连回家也很方便。
    缺点是没有 web 管理界面,不过配置好后一般就不用管了
    Sekai
        12
    Sekai  
       46 天前
    @missdeer coredns 之前用过也很不错,不过运行时偶尔会有一些报错,具体什么忘了,但仍然是个不错的选择。
    @fetich 如果没白名单可能会有很多奇怪的访问以及造成滥用,udp 方式与海外鸡沟通也是明文,我个人无法接受啊。
    @xiaoun001 隧道接入方式是…酸酸乳?
    @jinliming2 AdH 有 EDNS,不过感觉开了和没开我的体验没啥特别区别,做好国内分流还是比较重要。
    @yanqiyu 把一号鸡放在国内我个人还是无法接受……成本倒是比较低。
    Kobayashi
        13
    Kobayashi  
       46 天前 via Android
    > 小鸡一号位于不远的异国他乡,运行 AdGuard Home,作用是从源头得到尽可能干净安全的 DNS
    机器多的没处用吗?直接本地 DoT 、DoH 或者代理转发 DNS 请求到国外公共 DNS 不就行。都是转发 DNS 请求,你开台机器转发和本地直接转发没区别。你搞台机器在国外完全多此一举。
    你可以直接用 Overture 把一号机的活儿干了。不过我更推荐 mosdns,没有 overture 那种只能引入 2 个配置文件的限制。另外他们 DoT 、DoH 实现上游不一样。历史上 overture 出现过 DoT 实现 bug,一个 DoT 到 8.8.8.8 花了我 1s…… 而 mosdns 还自己实现了连接复用。coredns 就更算了,连个好的 IP 过滤实现都没有,每次还得重新编译。

    > 如果想更纯,国内也可以加密,但不知道实际意义有多大,我觉得有点太过于极端
    这个通常不需要,国内走加密不是为了应对 DNS 污染,而是运营商 DNS 劫持。这个涉及运营商网间收费。比如,你移动宽带用户访问我联通宽带资源,联通就要收移动的钱。小运营商为了省钱会自己建立一些反代缓存,通过 53 口 NAT DNS 劫持把用户请求导过来。不过,这个要不要防劫持还有待商议,因为小运营商网络不是很好,很多网都是租来的,你不打到它的反代上速度肯定会变慢。

    > 当然你可以在二号上套娃一个 AdH,但分流不太方便,没有 Overture 灵活
    部署一个 AdGuadHome 做记录统计和去广告,上游指向同机器上 overture 而不是外网 DNS.

    > 比如缓存设置多大、用 DoT 还是 DoH 、是否有更好的 AdH 替代品等等。
    缓存单人 500 条就够用,我从来没打满过。家庭用我觉得 1000 条肯定够。
    以前我用的是 dnsmasq/unbound+chinadns. dnsmasq 和 unbound 做转发功能没 mosdns 多,但设计的其他方面比 overture 、mosdns 这种业余的肯定要专业。dnsmasq 和 unbound 都可以查询一些统计信息,里边就包括缓存信息。

    > 希望能抛砖引玉,看看还有没有优化空间(那么只有砸钱了)。
    你 DNS 转发到小鸡一号,和直接 DoT 、DoH 到外网公共 DNS 没有什么区别。小鸡一号完全没必要。

    扩展一下关于 EDNS Client Subnet,我自己是不开这个。因为不仅要去污染,还要走代理。代理是不使用你本地解析的 IP 的,甚至都不需要解析到没有污染的 IP,只要能正确分流即可。参考 https://blog.skk.moe/post/what-happend-to-dns-in-proxy/
    比如 Surge 就没实现 Clash 那种 DNS 分流加无污染。

    所以严格来说,完全可以不做 DNS 无污染。电脑上我会部署 mosdns 。如果你部署在路由上,想要记录查询请求,前边套一个 adguardhome 即可。
    fetich
        14
    fetich  
       46 天前
    @Sekai 白名單可以使用 iptables 來實現,或者用雲服務商的防火牆;海外小雞和內地小雞異地組網,兩機的通信是加密的。

    是不是不小心用大號回覆了???

    :doge
    naizhao
        15
    naizhao  
       46 天前
    累不累。不花钱能搞定的东西,非要花几百块钱租个🐔来搞,还只解决了一个小问题。
    enrolls
        16
    enrolls  
       46 天前
    @shinichii 请问,你手机不在 WIFI 的时候,你的 DNS 怎么查?
    @missdeer 兄弟,你的版本我 view 过了,1 是 ads 不维护了,且 ads 加入 20~30W 规则好像会跪; 2 是 prepare.sh 替换好像比较多的东西

    我的是远端机器 dnscrypt-proxy 2 个,分别叫 inside outside,差异于 edns_client_subnet 。树莓派 vless+quic 转发到远端,coredns 用于判断使用 inside 还是 outside 。coredns 插件自己来。

    目前替代 ads 的插件基本上好了,降低了内存占用,加了 wildcard 匹配。不过感觉上游用 AdHome 去广告更好(它的引擎粒度更细)

    转发的插件,从先 forward 抄过来,改了 match 的逻辑,100%转发 cn 域名到 inside,根据规则转发(support wildcard mode)到 inside,最后没走规则就 outside 解析。

    现在最大的问题是,缺一份国内 top50 app 的域名列表,1-2 级域名,走 wildcard 模式。没有好项目去收集规则的话,就打算用 ksubdomain 或者捉取一下网上的 api
    ciyiyi290
        17
    ciyiyi290  
       46 天前
    牛 B 新手是完全看不懂
    nbweb
        18
    nbweb  
       45 天前 via Android
    V2ray 内置 dns,本地加密后用异国服务端解密解析,可以分流,可以自定义 gfwlist,部署在网关即可,用了几年了。
    fonlan
        19
    fonlan  
       45 天前 via Android
    国外这鸡完全没用,都能连到国外了直接 Google DoH 或者 DoT 不就行了,ADH 放家里作为真正用的就好,还能看得见统计
    xiaoun001
        20
    xiaoun001  
       45 天前
    @Sekai 隧道是到异国 SER 的 虚拟专用网( V.P.N)隧道啊。至于服务啥的,看个人爱好,想用啥都可以,只要能突破。
    Rilimu
        21
    Rilimu  
       43 天前
    感谢分享。同 #13 楼,推荐楼主去看看 mosdns 。一个软件能干好几个软件的活。可配置性极高,谁用谁知道。我的方案跟楼主也差不多。之前我也是用了很多个不同的软件,后来全部换成 mosdns 了。很稳而且延时比用 Adh 低很多。不知道是不是我之前 adh 配置有问题。
    shinichii
        22
    shinichii  
    OP
       42 天前
    @Rilimu 非常感谢,抽空研究一下。
    @fonlan 目前确实可以直连,不过速度有快有慢,如果以后情况有变就可能需要这种方案了。
    HalloCQ
        23
    HalloCQ  
       40 天前
    累不累。不花钱能搞定的东西,非要花几百块钱租个🐔来搞,还只解决了一个小问题。
    HalloCQ
        24
    HalloCQ  
       40 天前
    adh 可以分流,去广告,支持 ecs.
    在国内装一个 adh 就能解决所有问题了,没必要这么麻烦
    shinichii
        25
    shinichii  
    OP
       40 天前
    @HalloCQ 我自己算是乐在其中,小鸡也没多少钱,不超过 15 块,而且同时还干别的事情。adh 是可以分流,但不够优雅,同时也担心性能。
    shudongin
        26
    shudongin  
       37 天前
    @lns103 很显然,4 楼的“关键词:EDNS Client Subnet (ECS)”,你并没有留意。
    leido
        27
    leido  
       25 天前 via Android
    @Kobayashi 你举的例子过时了,电信联通和移动已经没有网间结算费了
    https://zhuanlan.zhihu.com/p/157578993
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2351 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 12:31 · PVG 20:31 · LAX 04:31 · JFK 07:31
    ♥ Do have faith in what you're doing.