serverless-dns:可部署于Cloudflare/Deno/Fly的无服务器内容屏蔽解析器
serverless-dns 提供可在 Cloudflare、Deno、Fastly、Fly.io 等边缘平台运行的无服务器 DNS-over-HTTPS/DoT 解析与内容拦截功能,适合对隐私与可控性有要求的个人或小型部署,但需注意许可证与社区活跃度等合规与维护风险。
GitHub serverless-dns/serverless-dns 更新 2025-11-12 分支 main 星标 2.9K 分叉 2.1K
DNS-over-HTTPS/DoH DNS-over-TLS/DoT 边缘计算 自托管 内容拦截 Cloudflare Workers Deno Deploy Fastly Compute@Edge Fly.io Serverless

💡 深度解析

6
这个项目具体解决了哪些实际问题?它是如何在技术上实现这些目标的?

核心分析

项目定位:serverless-dns 的核心目标是为个人或小规模部署提供一个“Pi-hole 式”的、可运行于边缘/无服务器平台的加密 DNS(DoH/DoT)解析器,减少设备维护和持续运维成本。

技术特点

  • 边缘/无服务器实现:支持 Cloudflare Workers、Deno、Fastly、Fly.io,采用无状态/轻状态设计,适配 serverless 限制。
  • 功能集成:内置 blocklist 管理(/configure 页面)、插件化处理链(user-op.js -> cache-resolver.js -> cc.js -> resolver.js)与 HMAC-based 访问认证。
  • 上游交互:作为 stub/转发解析器,通过可配置上游 DoH 或系统解析器完成最终解析,降低了完全递归实现的复杂度。

实用建议

  1. 验证路径:优先在 Cloudflare Workers 上一键部署以验证功能(README 推荐),再迁移到其他平台。
  2. 配置 blocklist:使用 /configure 精细设置阻断规则,并开启缓存插件以减少上游请求。
  3. 启用日志:配置 Logpush -> R2 或等效日志出口以便后续审计与误拦截分析。

注意事项

  • 非完整递归服务器:它是 stub/转发解析器,依赖上游 DoH;在完全离线或需复杂自定义解析规则的场景会受限。
  • 运行时差异:不同平台的网络 API 与配额会导致功能或行为差异。

重要提示:适合注重隐私、希望低运维部署且流量在免费层可覆盖的小规模场景;若需高吞吐、企业级解析或完全离线运行,应考虑完整递归服务器或托管企业产品。

总结:serverless-dns 在技术上通过无状态、插件化的边缘实现,解决了自托管 DoH/DoT 与内容屏蔽的运维难题,但受限于 serverless 的资源与上游依赖。

88.0%
在性能和可扩展性方面,这个 serverless DNS 适合怎样的流量规模?如何利用缓存与上游配置优化延迟和成本?

核心分析

适用流量规模:基于 README 与实现细节,serverless-dns 更适合 低到中等 流量场景(个人或小团队)。文档指出免费层常可覆盖约 10–20 台设备/月,server-side 处理延迟极低(0–2ms),端到端中位延迟约 10–30ms。

技术分析

  • 缓存能力cache-resolver.js 插件可在请求链中拦截并缓存常见结果,降低上游 DoH 请求数。
  • 上游配置:配置多上游 DoH 列表并优先选择延迟低/就近的上游可以降低解析延迟与失效率。
  • serverless 限制:并发、执行时间与免费配额会成为扩展瓶颈,不适合替代高流量企业解析器。

实用建议

  1. 启用并调优缓存:使用 cache-resolver 并根据真实查询行为调整 TTL/缓存策略,尽量尊重上游 TTL 来避免 stale 数据。
  2. 多上游策略:列出若干可信 DoH 上游并按区域优先排序或做简单 fallback,以减少单一上游带来的延迟波动。
  3. 监控与分析:通过日志(Logpush -> R2)分析高频查询、缓存命中率与误拦截,定期优化 blocklist 与缓存配置。

注意事项

  • 在高并发场景下,serverless 执行配额与每请求开销可能导致成本迅速上升。
  • 持久化大规模缓存需外部存储(R2 等),本地实例不适合长期保存大量条目。

重要提示:把 serverless-dns 作为近用户的边缘过滤/转发层最合适;如果需要主解析器承担高吞吐或完整递归能力,请选用专职递归 DNS 服务器或企业级托管服务。

总结:通过合理缓存与上游配置,可以在低运维成本下获得低延迟的自托管 DoH/DoT 服务,但面对大规模流量时受限于 serverless 平台的资源与配额。

87.0%
与传统 Pi-hole 或自建递归 DNS 相比,serverless-dns 在适用场景与限制上有哪些关键差异?什么时候应优先选择它或回退到传统方案?

核心分析

功能定位对比:serverless-dns 是 edge/stub 的 Pi-hole 式实现,着重低运维的加密解析与内容屏蔽;而传统 Pi-hole/自建递归服务器是常驻主机、提供完整递归与本地化管理能力的解决方案。

关键差异

  • 运维模型:serverless-dns 为无服务器部署,适合不想维护设备的用户;Pi-hole 需要设备/主机维持长期运行。
  • 解析角色:serverless-dns 作为 stub/转发解析器依赖上游 DoH;Pi-hole 可作为本地递归解析器(或使用本地缓存)并与内网服务深度结合。
  • 可扩展性与限制:边缘部署带来更广泛的节点和低延迟,但受 serverless 的执行/配额与持久化限制;Pi-hole 可支持更大本地缓存和自定义解析策略。

何时优先选择 serverless-dns

  1. 你希望最小运维、无需常驻硬件并获得加密 DoH/DoT 端点;
  2. 目标为多地域或远程设备,借助边缘节点降低延迟;
  3. 流量规模属于个人/小团队、可接受免费层或低成本方案。

何时选择传统 Pi-hole / 递归 DNS

  • 需要本地 DHCP/DNS 集成、复杂自定义解析或大规模持久缓存;
  • 需要处理高吞吐量或企业级 SLA 与可用性要求;
  • 希望完全离线或内网独立解析能力。

重要提示:两种方案并非完全互斥——可以把 serverless-dns 作为边缘过滤/加密层,与本地 Pi-hole 或递归服务器并行使用以实现冗余与不同场景优化。

总结:对低运维、跨地域加密解析需求优先采用 serverless-dns;对高吞吐、复杂解析或深度内网集成需求则应使用 Pi-hole 或自建递归解析器。

87.0%
部署和上手的用户体验如何?常见的陷阱有哪些,有哪些最佳实践能降低出错率?

核心分析

用户上手体验:项目为多平台提供了运行脚本与配置模板,Cloudflare Workers 路径是最平滑的上手体验;但在 Deno、Fastly、Fly 等平台上部署需较强的 DevOps 与边缘平台知识(env、TLS、Logpush)。

技术分析(基于数据)

  • 自动化支持:包含 ./run w|n|d|f 等脚本与 wrangler.toml/fastly.toml 模板,显著降低初次部署的脚本化工作量。
  • 关键陷阱:DoT 的 SNI 子域名长度限制影响认证密钥的放置;不同 runtime 的网络 API 与配额会引发功能差异;日志在某些平台(Fly/Deno)可能需额外实现。

实用建议

  1. 首选验证平台:先在 Cloudflare Workers 上完成部署与 blocklist 验证。
  2. 逐步迁移:确认功能后再迁移到 Deno/Fastly/Fly,分别测试网络调用、证书与超时行为。
  3. 日志与备份:立即配置 Logpush -> R2 或等效出口,避免在问题排查时缺乏数据。
  4. DoT 认证:在使用 DoT 时,确保 msg-key 和子域名总长度符合 SNI 限制。

注意事项

  • 执行与配额限制:免费层适合 10–20 台设备/月的流量测试,超过则需评估费用或迁移到付费层(README 声明)。
  • 证书与域名管理:域名与 TLS 配置错误会直接导致 DoT/DoH 无法正常工作。

重要提示:通过分阶段上线(Cloudflare 验证 -> 日志启用 -> 迁移到目标平台)能显著降低部署失败风险。

总结:凭借脚本与文档,初次验证门槛低;要达到稳定生产级运行,需要中等运维能力和对平台限制的理解。

86.0%
如何确保对 serverless-dns 的可观测性和日志审计?在无状态边缘环境下有哪些推荐的日志与分析做法?

核心分析

可观测性挑战:无状态边缘实例本身不适合长期保存详尽日志,平台日志支持差异(例如 README 指出 Fly 与 Deno 的日志采集支持不一致)要求将审计与分析数据集中化存储与处理。

技术分析

  • 内建能力:项目提供内建的 analytics 接口与日志上报选项,并建议使用 Cloudflare Logpush -> R2 等原生集成路径。
  • 边缘限制:不能在实例上长期保存大量历史数据,且将每次请求完全记录会显著增加延迟与成本。

实用建议

  1. 异步批量上报:在请求流水线中做 轻量采样和聚合(例如按域/响应类型计数),定期异步将批次上报到 R2 或外部对象存储。
  2. 启用 Logpush 或等效:优先使用 Cloudflare Logpush -> R2(若使用 Workers),以获得稳定且低运维的日志收集路径。
  3. 平台适配:为 Fly/Deno 等可能不提供原生 Logpush 的平台实现自定义 exporter 或使用第三方代理。
  4. 分析管道:导出日志后通过批处理或流式 ETL(比如 periodic jobs)计算缓存命中率、误拦截率与高频查询列表。

注意事项

  • 日志包含隐私敏感信息(DNS 查询),在推送/存储前考虑脱敏或采用加密存储。
  • 采样率设置需平衡可观测性与成本:过低无法排障,过高会产生巨大存储与请求成本。

重要提示:在边缘环境中,正确的做法并非逐条持久化所有请求,而是结合采样、聚合、异步批量上报与外部持久化来实现既高效又合规的审计。

总结:使用 Logpush -> R2(或等效)作为日志归集,并在边缘做采样与聚合,是在无状态环境下实现可观测性与审计的推荐实践。

86.0%
项目的认证机制如何工作?在使用 DoT 时有哪些特殊的限制和配置要点?

核心分析

认证核心:serverless-dns 使用基于 HMAC 的轻量访问密钥机制:服务端在 ACCESS_KEYS 保存 HMAC 输出,客户端用 msg-key 对固定消息 sdns-public-auth-info 生成 token 并放入请求(DoH 的 blockstamp 或 DoT 的主机名/子域)。

技术分析

  • 工作流hex(hmac-sha256(msg-key|domain.tld), msg) 被追加到 ACCESS_KEYS,服务器端在请求到达时校验该输出以确认来源。
  • DoT 限制:DoT 的认证常依赖 SNI(TLS Server Name)或子域名嵌入 token;SNI/主机名长度上限(协议与实现限制)可能导致长 token 被截断或拒绝连接。

实用建议

  1. DoH 优先认证:若可能,使用 DoH 并在 blockstamp 中放置 HMAC 输出,避免 SNI 限制问题。
  2. 缩短 msg-key:为 DoT 使用更短的 msg-key 或更短的 token 编码以保证子域名长度合规。
  3. 替代方案:对需要更强认证的场景,考虑基于 TLS 客户端证书或在边缘平台上使用 API Gateway 级别的认证。

注意事项

  • 不同平台对主机名长度的限制可能不同,务必在目标 runtime 上验证 DoT 连接。
  • README 中 msg 固定为 sdns-public-auth-info,改变该流程需同时调整服务端 ACCESS_KEYS 存储策略。

重要提示:DoT 场景下直接把长 HMAC token 放入子域名存在高风险;优先使用更短的 token 或改为 DoH/证书认证。

总结:HMAC 方案对 DoH 有良好兼容性,但在 DoT 场景必须针对 SNI 长度做专门规划或采用不同认证方式。

84.0%

✨ 核心亮点

  • 支持Cloudflare/Deno/Fly等多平台部署
  • 低延迟:端到端中位数约10–30ms
  • 文档与社区活动指标存在不一致
  • 仓库未标注许可证,存在合规风险

🔧 工程化

  • 功能:无服务器DoH/DoT解析与内容屏蔽
  • 技术:面向边缘,可在多家FaaS快速运行

⚠️ 风险

  • 维护与贡献者信息不完整,社区活跃度不可知
  • 未声明许可证与发布版本,商业/生产使用需谨慎

👥 适合谁?

  • 目标用户:熟悉DNS与边缘部署的个人或运维小组
  • 适用场景:自托管隐私保护与小规模边缘解析服务