广告 告别DNS劫持!手把手教你搭建私人DOH服务,上网安全提升300%

你是否经常遇到网页被劫持、广告弹窗不断?普通 DNS 正在暴露你的上网隐私!今天教你在 Linux 服务器上零成本搭建专属 DOH 服务,从此告别网络监控,访问速度还能快人一步。本文重点是避免部分场景下的恶意劫持,提供错误的解析记录

为啥要自建 DOH 服务

主要原因还是: 公共 DNS 存在响应延迟和信任风险; 其次自建服务可自定义过滤规则,拦截广告/恶意网站

环境要求

  • 非国内机器(推荐是香港或者日本, 可以考虑小阿里 claw)
  • 容器化部署(docker 或者 k3s, 如果是 k3s 更好不过了)
  • 若使用内网穿透工具 tailscale 就更好不过了
  • 环境支持 IPv6(非必须)
  • 域名及域名证书

除了第一点要求外,其他都是可选的

示例环境

  • 小阿里香港优化线路节点
  • k3s
  • caddy

搭建 DOH 服务

基于 ysicing/doh 部署的 doh 服务。这个小项目是春节期间利用 cursor 七拼八凑实现的一个小工具,使用场景主要给 mihomo 的 fallback dns 使用。

具体实现可以参考源码,刚开始实现很简单,就是基于 github.com/miekg/dns,然后加了一些奇奇怪怪的想法。

默认情况下会自动缓存解析记录 5 分钟。

k3s 部署

源码目录下,默认提供了一个名为 ds.yaml 的 yaml 文件。

这个文件主要分成了几大部分

  • tailscale k3s 集群 loadBalancer 使用 tailscale,对外暴露服务,并要求该 pod 调度到非国内 ipv6 节点,提供更加优质的双栈国际互联效果
  • ads 增强版 DaemonSet,由 kruise 驱动
  • traefik 入口ingress,了解我博客架构的都知道哈,traefik 是国内入口,由于合规要求,我使用 caddy 代替

docker 部署

使用 dockerhub 或者 ghcr 的镜像都可以的

docker run -itd -p 65001:65001 ghcr.io/ysicing/doh

caddy 配置示例

doh.pub {
	reverse_proxy 100.90.90.5
}

验证 doh 是否可用

推荐使用 q 命令

具体使用可以参考官方文档, 如果你本地安装有 go 环境,可以尝试

go install github.com/natesales/q@latest

验证 doh

下面是一个错误的显示哈,只验证 doh 功能是否正常

q www.google.com @http://127.0.0.1:65001 | nali
www.google.com [Google Web 业务] . 5m A 199.16.158.9 [美国 Twitter公司]
www.google.com [Google Web 业务] . 5m A 31.13.106.4 [瑞典]
www.google.com [Google Web 业务] . 5m A 199.16.158.182 [美国 Twitter公司]
www.google.com [Google Web 业务] . 5m A 199.59.148.229 [美国 Twitter公司]
www.google.com [Google Web 业务] . 5m AAAA 2001::1 [IANA特殊地址 Teredo隧道地址]
www.google.com [Google Web 业务] . 5m A 31.13.94.41 [爱尔兰 Facebook分公司]

其他

除此之外,还推荐nbdns, 一个聪明的 DNS 中继器,放置于 AdGuard Home 上游,可提升 DNS 解析准确性。

Sponsor

Like this article? $1 reward

Comments