51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

自建属于自己的递归DNS

前言 {#前言}

截至发稿前阿里 DNS 也宣布了对公共 DNS 进行限速了,其实在出这篇文章之前阿里 DNS 并没有限速,这里只是顺带提一嘴,想说的是,江苏地区使用阿里 DNS 解析会出现污染情况,先上两张图,来源 Adguard Home 日志和 itdog 测试, Adguard Home 使用的还是 dot 进行连接,也就是说不会在数据传输中被篡改。

| adguard-gome-dns-log.webp | itdog-dns-log.webp | |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|

在看看其他的dns.

| dns-119.29.29.29.webp | dns-114.114.114.webp | |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | dns-1.1.1.1.webp | |

Adgurad Home 虽然很好用,但也是请求上游的递归 DNS 服务器,严格来说并不是一个递归 DNS ,现在上游也已经遭受污染,是时候只能选择自建递归 DNS 了,从根查起减少被污染的概率,同时使用 dnscrypt 来进行解析国外域名, mosdns 负责进行代理 DNS 规则, unbound 负责进行递归 DNS ,感觉是不是已经脑袋抓狂了,需要配置这么多服务,别怕,感谢 kkkgo大佬打包好的项目PaoPaoDNS

这里会有人想,从根开始查起延迟不会很高吗?这里放上我 Adguard Home 指向我在本地自建的递归 dns 的日志。
adgurad-36ms.webp

PaoPaoDns工作流程 {#PaoPaoDns工作流程}

可能这里又说的不对的地方,欢迎在评论指出。

PaoPaoDNS-workflow.webp

搭建前的准备 {#搭建前的准备}

需要准备一个 x86 小主机,能跑 docker 就好了,内存至少有 512mb 可用的内存。

对于最近docker hub 连接不上的,可以试试 栗子的docker hub 代理

搭建开始 {#搭建开始}

我这里放上我自己的docker-compose 配置。

|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | version: '3' services: paopaodns: image: sliamb/paopaodns:latest container_name: paopaodns volumes: - <宿主机地址>/mydata:/data # 将数据挂载到容器内部的 /data 目录 environment: CNAUTO: "yes" # 是否CN规则分流(可选值: yes, no) DNSPORT: "53" # DNS 服务端口号 DNS_SERVERNAME: "ShellDns.ning.moe" # DNS 服务器名称(不含空格的英文字符串) TZ: "Asia/Shanghai" # 时区设置 UPDATE: "weekly" # 更新IP、域名库的频率(可选值: no, daily, weekly, monthly) IPV6: "raw" # 是否启用 IPv6(可选值: no, yes, only6, yes_only6, raw) CNFALL: "yes" # 是否包含中国大陆列表(可选值: no, yes) EXPIRED_FLUSH: "yes" # 是否自动清理过期缓存(可选值: no, yes) CUSTOM_FORWARD_TTL: "0" # 自定义转发 TTL ADDINFO: "yes" # 在DNS查询结果中增加ADDITIONAL SECTION的调试信息,如结果来源、查询延迟、失败原因等,使用dig命令就可以实时追踪域名结果来源 USE_MARK_DATA: "yes" # 全球百万域名库,在判断大陆分流的时候优先使用该数据. restart: always ports: - "5533:53/tcp" # 对外开放 TCP 53 端口 - "5533:53/udp" # 对外开放 UDP 53 端口 deploy: resources: limits: memory: 1. 5G #限制容器内存 |

需要了解其他配置信息看看GitHub的文档: https://github.com/kkkgo/PaoPaoDNS?tab=readme-ov-file#%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E

验证你的递归DNS正常运行,执行以下命令:

|-----------|-------------------------------------------------------------------| | 1 | nslookup - type =TXT whoami.ds.akahelp. net <PaoPaoDnsIp> |

|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 | Server: ShellDns.ning.moe Address : 10.0.0.3 Non - authoritative answer : whoami.ds.akahelp.net text = " ns " "1.1.1.1" #如果这里是你的出口 ip 就代表 paopaodns 正常工作了 |

引用文档:

验证你的递归DNS正常运行,可以执行以下命令:

|-----------------|--------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 | # 在容器内置执行 test.sh docker exec paopaodns test.sh # 如果执行后输出 ALL TEST PASS,则所有组件都工作正常。 # 如果显示 FAIL,可以执行 debug.sh 进一步分析原因。 |

同时你可以查阅 更新日志 的最新版本公告时间,检查输出的镜像版本时间是否大于等于当前最新版本。
需要注意的是,如果你的网络有"自动分流 IP "的功能,请把容器的IP加入不分流的名单,因为权威 DNS 需要准确的IP去判断, IP 分流会影响权威 DNS 的判断。此外,一些软路由存在劫持 DNS 请求的情况,解决办法参见 这个issue
[DNS hijack]DNS劫持算是经常问的高频问题了, 请参考

引用: {#引用:}

PaoPaoDns项目&文档: https://github.com/kkkgo/PaoPaoDNS

栗次元镜像世界-Docker加速源: https://www.lmirror.top/docker.html

赞(0)
未经允许不得转载:工具盒子 » 自建属于自己的递归DNS