前言 {#前言}
截至发稿前阿里 DNS
也宣布了对公共 DNS
进行限速了,其实在出这篇文章之前阿里 DNS
并没有限速,这里只是顺带提一嘴,想说的是,江苏地区使用阿里 DNS
解析会出现污染情况,先上两张图,来源 Adguard Home
日志和 itdog
测试, Adguard Home
使用的还是 dot
进行连接,也就是说不会在数据传输中被篡改。
| | | |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
在看看其他的dns.
| | | |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | | |
Adgurad Home
虽然很好用,但也是请求上游的递归 DNS
服务器,严格来说并不是一个递归 DNS
,现在上游也已经遭受污染,是时候只能选择自建递归 DNS
了,从根查起减少被污染的概率,同时使用 dnscrypt
来进行解析国外域名, mosdns
负责进行代理 DNS
规则, unbound
负责进行递归 DNS
,感觉是不是已经脑袋抓狂了,需要配置这么多服务,别怕,感谢 kkkgo大佬打包好的项目PaoPaoDNS 。
这里会有人想,从根开始查起延迟不会很高吗?这里放上我 Adguard Home
指向我在本地自建的递归 dns
的日志。
PaoPaoDns工作流程 {#PaoPaoDns工作流程}
可能这里又说的不对的地方,欢迎在评论指出。
搭建前的准备 {#搭建前的准备}
需要准备一个 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