广告 告别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 解析准确性。