4.2 KiB
aliases, atlas, created, modified, tags, title
| aliases | atlas | created | modified | tags | title | |
|---|---|---|---|---|---|---|
| Atlas/Card | 2024-03-12 02:26:18 | 2024-03-12 23:45:34 |
|
自建 DoH 服务器 |
为了在网上冲浪时 DNS 不被污染,自建一个干净的 DoH 服务器很有必要,考虑到 DNS 查询的响应时间,我选择在一台位于香港且经过多线 BGP 优化的服务器上部署
安装
一键脚本
我采用的软件是 AdGuardHome,由于是直接在服务器上安装而不是使用 Docker 安装,因此直接执行官方在 GitHub 上提供的一键脚本即可
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
解决端口占用
由于是直接部署在本机上,因此默认的 53 端口会被系统自带的 DNS 服务占用,因此需要将系统的停用
停用系统自带 DNS 服务
systemctl stop systemd-resolved
创建文件夹
mkdir /etc/systemd/resolved.conf.d/
创建并编辑配置文件
vim /etc/systemd/resolved.conf.d/adguardhome.conf
[Resolve]
DNS=127.0.0.1
DNSStubListener=no
重命名原本的配置文件
mv /etc/resolv.conf /etc/resolv.conf.backup
将 /etc/resolv.conf 链接至 /run/systemd/resolve/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
重启 DNSStubListener
systemctl restart systemd-resolved
设置
常规设置
启用日志和统计数据,并设置保留时间为 30 天
DNS 设置
上游 DNS 服务器
- https://cloudflare-dns.com/dns-query
- https://dns.google/dns-query
- https://dns.quad9.net/dns-query
- https://dns.adguard.com/dns-query
- https://doh.opendns.com/dns-query
- https://hk-hkg.doh.sb/dns-query
使用并行请求以同时查询所有上游服务器来加快解析速度,其余配置保持默认即可
DNS 服务配置
将速度限制设为 0 以不限制客户端的每秒查询请求,并启用 EDNS 客户端子网和 DNSSEC,其余配置保持默认即可
DNS 缓存配置
缓存大小设置为 104857600 并启用乐观缓存
加密设置
由于是直接部署在服务器上的,而 80 和 443 端口已经被 NPM 给接管了,此时就需要将 HTTPS 端口改为其他端口,我这里设置为 444,同时要记得在防火墙中放行 444 端口,具体指令为 sudo ufw allow 444 ;并且要为 DoH 服务器设置证书和私钥,虽然我已经用 NPM 反代了,不过这里手动再设置一下也无法,从 NPM 管理面板将泛域名证书下载下来,并将 fullchain 和 privkey 放到任意位置并指定路径即可
DNS 黑名单
- AdGuard DNS filter
- CHN: AdRules DNS List
- CHN: anti-AD
- Anti-AD
- EasyPrivacy
- I don’t care about cookies
- EasyList
- EasyList China
- CJX’s Annoyance List
- Cats-Team
自定义过滤规则
@@||ad.域名^$important
反向代理
为了避免主动探测导致域名和服务器被屏蔽,将默认的 /dns-query 进行隐藏是很有必要的,除了正常的 NPM 反代外还要在 Advanced 中加入下列代码
location /任意字符 {
proxy_pass https://服务器IP:444/dns-query;
proxy_set_header Host $http_host;
proxy_redirect http:// https://;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
}
然后就可以在软路由中通过 域名/任意字符 的网址进行 DNS 查询了