使用 Docker 自建支持 DoH、DoT 的 DNS 服务器
DoH (DNS over HTTPS) 和 DoT (DNS over TLS) 有效避免了运营商的 DNS 监听和劫持,本文记录在公网搭建一个可以去广告的 DNS 服务器(借助 Adguard Home)。
前期准备
- 公网服务器一台
- 域名一个,并且指向该公网服务器
- 域名指向该公网服务器,并申请好 TLS 证书(可使用 Let’s Encrypt 申请)
Docker 部署
Docker Hub 镜像地址:https://hub.docker.com/r/adguard/adguardhome
安装好 Docker 后下载镜像,以下任选其一
1 | docker pull adguard/adguardhome:latest # 稳定版 |
新建配置目录和工作目录
1 | mkdir /root/adguardhome/workdir |
启动镜像,完成后进入配置页面:HostIP:3000
1 | docker run --name adguardhome \ |
注意,第一次进入配置页面需要配置监听端口,配置好后注意修改容器启动时端口的映射,并以新的命令重新启动容器
上游服务器设置
进入 Adguard Home 控制台,找到「设置 - DNS 设置」
「上游 DNS 服务器」可填入公共 DNS 服务器
国内常用的公共 DNS 如下:
DNS 服务器地址 | 类型 | 提供商 |
---|---|---|
https://dns.alidns.com/dns-query |
DNS over HTTPS | 阿里 DNS |
tls://dns.alidns.com |
DNS over TLS | 阿里 DNS |
https://doh.360.cn/dns-query |
DNS over HTTPS | 360 DNS |
119.29.29.29 |
常规 DNS | DNSPod |
182.254.116.116 |
常规 DNS | DNSPod |
223.5.5.5 |
常规 DNS | 阿里 DNS |
223.6.6.6 |
常规 DNS | 阿里 DNS |
114.114.114.114 |
常规 DNS | 114 DNS |
「Bootstrap DNS 服务器」填入一到两个常规 DNS 服务器就可以,如 223.5.5.5
和 119.29.29.29
在 「DNS 服务设定中」,勾选「使用客户端的子网地址(EDNS)」,可以使查询的客户端得到离其最近的网站 IP 解析。
DoH & DoT 设置
进入「设置 - 加密设置」
勾选「启用加密」,填写准备的域名,「HTTPS 端口」和「DNS-over-TLS 端口」均可自定义,如有改正记得重新修改容器启动时的端口映射配置。
证书可以选择「设置证书路径」和「粘贴证书内容」,按要求配置。
配置完成后可以使用「https://域名
」访问控制台
去广告设置
进入「过滤器 - DNS 封锁清单」
附一些常用的规则:
- HalfLife,规则合并自 EasylistChina、EasylistLite、CJX’sAnnoyance 合并规则:
https://gitee.com/halflife/list/raw/master/ad.txt
- EasyPrivacy,隐私保护:
https://easylist-downloads.adblockplus.org/easyprivacy.txt
- I don’t care about cookies,我不关心 Cookie 的问题,屏蔽网站的 cookies 相关的警告:
https://www.i-dont-care-about-cookies.eu/abp/
- anti-AD,自称是目前中文区命中率最高的广告过滤列表:
https://gitee.com/privacy-protection-tools/anti-ad/raw/master/easylist.txt
- 乘风广告、视频过滤规则:
https://gitee.com/xinggsf/Adblock-Rule/raw/master/rule.txt
、https://gitee.com/xinggsf/Adblock-Rule/raw/master/mv.txt
至此配置完成。
使用普通 DNS 解析,在客户端填入服务器的 IP 即可,若要使用 DoH 和 DoT 则需使用另外的工具。
最新版的 Chrome 已经支持使用 DoH 解析,在 Chrome 中找到「设置 - 安全 - 使用安全 DNS」,按规则填入域名即可
使用 Docker 自建支持 DoH、DoT 的 DNS 服务器