手撸纯净版 DoH 服务

手撸纯净版 DoH 服务

💡 原文中文,约7300字,阅读约需18分钟。
📝

内容提要

本文介绍了DNS over HTTPS(DoH)服务的工作原理和使用Go语言开发的简易DoH服务,解决了传统DNS协议存在的安全和隐私问题。同时提到了公共DNS解析服务、DNS污染问题以及解决方法,包括使用海外服务器和EDNS Client Subnet(ECS)技术。最后,介绍了实现DoH代理和ECS功能的方法,并推荐了相关工具和项目。

🎯

关键要点

  • 传统 DNS 协议存在安全和隐私问题,IETF 制定 RFC8484 以解决这些问题。

  • DNS over HTTPS (DoH) 使用 HTTPS 加密链路传输 DNS 查询,提升安全性。

  • 国内公共 DNS 解析服务如 DNSPod 和阿里云支持 DoH,但存在 DNS 污染问题。

  • 解决 DNS 污染问题的方案是使用海外服务器和 EDNS Client Subnet (ECS) 技术。

  • ECS 技术通过脱敏用户 IP 地址来保护隐私并提供就近访问。

  • 使用 Go 语言实现 DoH 代理,支持 GET 和 POST 查询方式。

  • Firefox 对 DoH 配置存在问题,需设置响应头的 Content-Type 为 application/dns-message。

  • 实现 ECS 功能需要处理 DNS 查询消息并添加 ECS 信息。

  • 使用 miekg/dns 包来解析和拼装 DNS 查询消息,处理 ECS。

  • 通过 q 工具验证 ECS 是否生效,支持指定 ECS 参数。

  • 解决 DoH 转发和 ECS 问题后,域名分流功能也可实现。

  • DNSPod 在香港的 Anycast 节点可返回无污染的解析结果,简化了域名分流的需求。

  • 整合代码到 ZNS 项目,部署在香港 VPS 上,并集成支付宝进行流量收费。

  • SQLite 数据库在并发写入时存在问题,需优化配置以支持高并发。

  • 鼓励用户尝试做自己的闭环产品,提升服务价值。

延伸问答

什么是DNS over HTTPS(DoH)?

DNS over HTTPS(DoH)是一种通过HTTPS加密链路传输DNS查询的协议,旨在提高DNS查询的安全性和隐私保护。

传统DNS协议存在哪些安全和隐私问题?

传统DNS协议使用明文传输,可能被中间节点监听或篡改查询结果,导致用户隐私泄露和安全风险。

如何解决DNS污染问题?

解决DNS污染问题的方法包括使用海外服务器和EDNS Client Subnet(ECS)技术,以确保返回无污染的解析结果。

如何使用Go语言实现DoH代理?

使用Go语言实现DoH代理需要提取客户端的查询请求,并将其转发给上游的DNS服务,如DNSPod或阿里云。

EDNS Client Subnet(ECS)技术的作用是什么?

ECS技术通过脱敏用户的IP地址,帮助DNS解析服务器返回最近的访问节点,从而保护用户隐私并提高访问速度。

如何验证ECS是否生效?

可以使用q工具,通过指定ECS参数来验证ECS的效果,例如使用命令`q --subnet 1.0.0.0/0 A taoshu.in @https://localhost:4430/dns/`。

🏷️

标签

➡️

继续阅读