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

12 天前
 pagxir
代码:
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 也可以使用的,就是需要配置.
1691 次点击
所在节点    DNS
6 条回复
ddczl
12 天前
AdGuardHome 就是 node 的 DNS 方案
hefish
12 天前
只考虑 dot, doh 的方案,不然警察叔叔电话会打来的。
yangg
12 天前
给个 star,求 lz 加个 README
spartacussoft
12 天前
1 、协议要从 udp/tcp 改为 Doh ;
2 、需要增加 edns client subnet ;

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

以上已经实现在 https://github.com/spartacus-soft/spartacus
mjikop1231
8 天前
@ddczl #1 人 59.6%比重的 go 代码兄弟。。。那点 typescript 全是给 webui 用的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1070835

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX