Node.js DNS over HTTPS - Tangerine 项目教程

Node.js DNS over HTTPS - Tangerine 项目教程

nodejs-dns-over-https-tangerine Node.js DNS over HTTPS - :tangerine: Tangerine is the best drop-in replacement for dns.promises.Resolver using DNS over HTTPS ("DoH") via undici with built-in retries, timeouts, smart server rotation, AbortControllers, and caching support for multiple backends (with TTL and purge support). Made for @forwardemail. 项目地址: https://gitcode.com/gh_mirrors/no/nodejs-dns-over-https-tangerine

1. 项目介绍

项目背景

Tangerine 是一个 Node.js 的 DNS over HTTPS (DoH) 实现,旨在为 Node.js 提供一个高性能、易于使用的 DNS 解析器。它是一个完全开源的项目,由 Forward Email 团队开发,旨在解决传统 DNS 解析器在隐私、安全性和性能方面的不足。

项目目标

  • 隐私保护:通过使用 DNS over HTTPS,确保 DNS 查询和响应的加密传输,防止中间人攻击。
  • 高性能:内置重试、超时、智能服务器轮换和缓存支持,提供比原生 Node.js DNS 模块更快的解析速度。
  • 易用性:作为一个 1:1 的 dns.promises.Resolver 替换,Tangerine 提供了与原生模块相同的 API,方便开发者迁移和使用。

主要特性

  • DNS over HTTPS:使用 HTTP/2 协议进行 DNS 查询,确保数据传输的安全性。
  • 缓存支持:支持多后端缓存,并提供 TTL 和缓存清除功能。
  • 智能服务器轮换:自动选择最佳的 DNS 服务器,提高解析效率。
  • AbortController 支持:允许开发者取消正在进行的 DNS 查询。

2. 项目快速启动

安装

首先,确保你已经安装了 Node.js 环境。然后,通过 npm 安装 Tangerine 和 Undici 库:

npm install tangerine undici

快速示例

以下是一个简单的示例,展示了如何使用 Tangerine 进行 DNS 查询:

// 引入 Tangerine 模块
import Tangerine from 'tangerine';

// 创建 Tangerine 实例
const resolver = new Tangerine();

// 进行 DNS 查询
resolver.lookup('example.com')
  .then(result => {
    console.log('IP Address:', result.address);
    console.log('Family:', result.family);
  })
  .catch(err => {
    console.error('DNS 查询失败:', err);
  });

代码解释

  1. 引入 Tangerine:通过 import Tangerine from 'tangerine'; 引入 Tangerine 模块。
  2. 创建实例:使用 new Tangerine() 创建一个 Tangerine 实例。
  3. 进行 DNS 查询:调用 resolver.lookup('example.com') 方法进行 DNS 查询,并处理返回的结果。

3. 应用案例和最佳实践

应用案例

隐私保护

在需要高度隐私保护的应用中,如加密通信服务,使用 Tangerine 可以确保 DNS 查询的加密传输,防止 DNS 泄露。

高性能解析

在需要快速 DNS 解析的应用中,如实时通信或高并发服务,Tangerine 的缓存和智能服务器轮换功能可以显著提高解析速度。

最佳实践

配置缓存

通过配置缓存选项,可以进一步提高 DNS 解析的性能。例如:

const resolver = new Tangerine({
  cache: {
    ttl: 3600, // 缓存时间(秒)
    purge: true // 允许清除缓存
  }
});
使用 AbortController

在需要取消 DNS 查询的场景中,可以使用 AbortController

import { AbortController } from 'abort-controller';

const controller = new AbortController();
const signal = controller.signal;

resolver.lookup('example.com', { signal })
  .then(result => {
    console.log('IP Address:', result.address);
  })
  .catch(err => {
    if (err.name === 'AbortError') {
      console.log('DNS 查询已取消');
    } else {
      console.error('DNS 查询失败:', err);
    }
  });

// 取消查询
controller.abort();

4. 典型生态项目

生态项目

Forward Email

Forward Email 是一个 100% 开源的隐私优先电子邮件服务,使用 Tangerine 进行 DNS 解析,确保用户隐私和安全。

DNS-over-HTTPS 客户端

Tangerine 可以作为 DNS-over-HTTPS 客户端的核心组件,用于构建自定义的 DNS 解析服务。

生态集成

Tangerine 可以与其他 Node.js 生态项目集成,如:

  • Express.js:在 Express 应用中使用 Tangerine 进行 DNS 解析。
  • Socket.io:在实时通信应用中使用 Tangerine 进行域名解析。

通过这些集成,Tangerine 可以为各种应用场景提供高性能、安全的 DNS 解析服务。

nodejs-dns-over-https-tangerine Node.js DNS over HTTPS - :tangerine: Tangerine is the best drop-in replacement for dns.promises.Resolver using DNS over HTTPS ("DoH") via undici with built-in retries, timeouts, smart server rotation, AbortControllers, and caching support for multiple backends (with TTL and purge support). Made for @forwardemail. 项目地址: https://gitcode.com/gh_mirrors/no/nodejs-dns-over-https-tangerine

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杭臣磊Sibley

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值