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

给大家 show 一下我用的 nodejs 实现的 dns 方案

  •  
  •   pagxir · 106 天前 · 2262 次点击
    这是一个创建于 106 天前的主题,其中的信息可能已经有所发展或是发生改变。
    代码:
    https://github.com/pagxir/dns-resolver-ng/

    如果是在运行于国内使用(比如软路由上),则推荐配置如下:
    const NameServers = {
    nearby: { address: "::ffff:223.5.5.5", port: 53},
    nearby6: { address: "2001:4860:4860::8888", port: 53},
    global: { address: "64:ff9b::1.1.1.1", port: 53},
    global6: { address: "64:ff9b::8.8.8.8", port: 53},
    oiling: { address: "::ffff:202.12.30.131", port: 53},
    };

    const Config = {};
    Config.oilingMode = "China";
    Config.preferNat64 = true;
    这里 nearby 推荐使用 ISP 的作为国内的上游 DNS ,用于解释国内 A 记录
    这里 nearby6 推荐使用 dns.google ,用于解释国内 AAAA 记录
    global ,global6 用于解释国外的 A 记录跟国外的 AAA 记录,最好通过隧道走远端的 VPS 。

    如果是运行于国外,例如搭建 DOH ,则推荐配置:
    const NameServers = {
    nearby: { address: "::ffff:180.76.76.76", port: 53},
    nearby6: { address: "2001:4860:4860::8888", port: 53},
    global: { address: "::ffff:1.1.1.1", port: 53},
    global6: { address: "::ffff:8.8.8.8", port: 53},
    oiling: { address: "::ffff:202.12.30.131", port: 53},
    };

    const Config = {};
    Config.oilingMode = "Global";
    Config.preferNat64 = true; // 如果希望 IPv6,而不是 DNS64/NAT64 ,则修改为 false

    最后的效果就是,国内域名会选择 ISP 的的结果,国外域名回选择 global 的解释结果。

    不关注什么 DNS 泄漏,只关注正确的分流域名。

    然后如果 Config.preferNat64 = ture ,需要正确配置一下 NAT64, 不过因为国外走 NAT64 ,这样完全不干扰本地 IPv4 网络,硬件加速也不会受到影响,本地 ipv4 能不能跑满跟你没有配置前一样。

    即使本地网络没有 IPv6 也可以使用的,就是需要配置.
    6 条回复    2024-09-10 15:53:46 +08:00
    ddczl
        1
    ddczl  
       106 天前
    AdGuardHome 就是 node 的 DNS 方案
    hefish
        2
    hefish  
       106 天前
    只考虑 dot, doh 的方案,不然警察叔叔电话会打来的。
    yangg
        3
    yangg  
       106 天前
    给个 star,求 lz 加个 README
    spartacussoft
        4
    spartacussoft  
       106 天前
    1 、协议要从 udp/tcp 改为 Doh ;
    2 、需要增加 edns client subnet ;

    另外,没看到如何确认域名归属地的。。
    spartacussoft
        5
    spartacussoft  
       106 天前
    我的思路是:
    1 使用国外 doh 来解析域名拿到所有 IP (不信任国内 doh 的准确性);
    2 但凡这些 IP 有一个归属于国内,就用国内 doh 来 2 次解析
    3 所有查询都携带 edns client subnet

    以上已经实现在 https://github.com/spartacus-soft/spartacus
    mjikop1231
        6
    mjikop1231  
       102 天前
    @ddczl #1 人 59.6%比重的 go 代码兄弟。。。那点 typescript 全是给 webui 用的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1776 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:23 · PVG 00:23 · LAX 08:23 · JFK 11:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.