概述
DoT
全称是 DNS over TLS
,它使用 TLS 协议来传输 DNS 协议。TLS 协议是目前互联网最常用的安全加密协议之一,我们访问 HTTPS 的安全基础就是基于 TLS 协议的。相比于之前使用无连接无加密的 UDP 模式, TLS 本身已经实现了保密性与完整性。
DoH
全称是 DNS over HTTPS
,它使用 HTTPS 来传输 DNS 协议。DoH 的安全原理与 DoT 一样,他们之间的区别只在于:DoH 有了 HTTPS 格式封装,更加通用。
DoT 在专用端口上通过 TLS 连接 DNS 服务器,而 DoH 是基于使用 HTTPS 应用层协议,将查询发送到 HTTPS 端口上的特定 HTTP 端点,这里造成的外界感知就是端口号的不同,DoT 的端口号是 853,DoH 端口号 443。
安装
官方文档:AdGuard Home - Getting Started
最新稳定版下载:latest stable release page
这里选择的是:AdGuardHome_linux_amd64.tar.gz ,安装环境是 Debian 11
解压下载的文件
1
| tar -zxvf AdGuardHome_linux_amd64.tar.gz
|
进入安装目录
安装
1
| ./AdGuardHome -s install
|
安装完成以后也可以查看服务的状态
1
| systemctl status AdGuardHome.service
|
首次配置需要开放系统的 3000 端口,然后就可以通过 ip:3000
来访问网页管理页面了
配置 Adguard Home
需要自行配置的地方不多,可以参考之前的文章:OpenWrt 上配置使用 AdGuard Home
启用 https
在加密设置配置证书,启用 https
访问,同时如果打算使用 DoH
, DNS-over-TLS 端口 和 DNS-over-QUIC 端口留空即可,(443 访问端口可以自行修改,下面配置了 nginx 反向代理,我将 443 端口改为了 4433)
配置客户端
配置客户端的目的:
- 可以对某个客户端(比如我的手机)进行详细的设置,阻止特定服务,特定设置等等
- 方便在查询日志时清晰的看到时哪个客户端访问了哪些服务,方便过滤广告
- 最后也可以设置只有配置了客户端的设备才可以使用解析服务
选择添加客户端,客户端名字随意,方便自己区分就行,标签也是一种区分方式,标识符随便输入,待会会用到配置文件
访问设置
在 DNS 设置页面最下方,有一个访问设置,在允许的客户端内输入之前配置的客户端标识符,这样 AdGuard Home 将仅接受来自这些客户端的请求
DNS 服务配置
因为是自己访问,同时是部署到服务器的,所以需要修改 DNS 服务配置
在 设置->DNS设置
里
edns
主要可以实现 client
在查询请求的时候,可以在 dns 协议中写入自己的请求地址,这样进行 dns 查询的时候,可以把这个地址传给权威 dns,dns 根据来源地址可以进行更加准确的调度。
DNSSEC
通过使用公钥加密来为授权区域数据进行数字签名,发挥作用让互联网社区免受伪造域名系统 (DNS) 数据的危害。DNSSEC 验证有助于向用户确保数据来自规定的来源,并且在传输过程中未遭修改。
分流(可选)
上面提到了 EDNS,因为很多网站使用了 CDN,EDNS 就可以根据你的运营商线路和地址返回最适合你的 ip,需要 DNS 支持 EDNS,腾讯和阿里是支持的,当然我主要是为了过滤广告,所以上游 DNS 服务器都是国内的,存在 DNS 污染问题,如果有其它需求可以考虑分流的方案
项目地址:GFWList2AGH
我选择的方案是:whitelist_full.txt
修改 AdGuardHome.yaml
文件,找到:upstream_dns_file
配置项,填入配置文件的绝对路径 即可
然后重启服务
1
| systemctl restart AdGuardHome.service
|
如果需要定时更新可以配合 cron
实现
我想自定义DNS解析服务器,创建了如下脚本
1 2 3 4 5 6 7 8 9 10 11 12 13
| #!/bin/bash
wget -O /root/AdGuardHome/whitelist_full.txt https://raw.githubusercontent.com/hezhijie0327/GFWList2AGH/main/gfwlist2adguardhome/whitelist_full.txt
sed -i 's|https://dns.opendns.com:443/dns-query|https://1.1.1.1/dns-query|g' /root/AdGuardHome/whitelist_full.txt
sed -i 's|https://doh.pub:443/dns-query|https://223.5.5.5/dns-query|g' /root/AdGuardHome/whitelist_full.txt
systemctl restart AdGuardHome
|
配置 Nginx
用来修改 DoH 默认的 /dns-query
查询路径
修改配置文件
1 2
| mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak vim /etc/nginx/nginx.conf
|
完整的配置文件如下,需要修改 5 处
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;
events { worker_connections 768; }
http {
sendfile on; tcp_nopush on; types_hash_max_size 2048;
include /etc/nginx/mime.types; default_type application/octet-stream;
# Redirect HTTP to HTTPS server { listen 80; # 1、配置自己的域名 server_name 365day.top; return 301 https://$host$request_uri; }
server { listen 443 ssl http2; # 2、配置自己的域名 server_name 365day.top;
# 3、配置SSL证书位置 # 配置证书文件 ssl_certificate /etc/nginx/ssl/365day.top.crt; # 配置证书私钥文件 ssl_certificate_key /etc/nginx/ssl/365day.top.key;
# 配置反向代理 # 4、填写自己配置的查询路径,代替2973A8E01BDF location /2973A8E01BDF { proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_buffering off; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 4、配置原来的Adguard Home服务查询路径,我在配置https时,端口改为了4433 proxy_pass https://127.0.0.1:4433/dns-query; }
# 默认的查询的路径返回404 location /dns-query { return 404; }
# 5、其它路径直接连接Adguard Home服务 location / { proxy_pass https://127.0.0.1:4433; # 或者已经配置好了不需要前端页面,也可以重定向,重定向的话上面的404就不需要了 #rewrite ^/(.*) https://baidu.com/$1 redirect; } }
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;
gzip on;
include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
|
IOS 配置文件
网站生成
可以使用网页一键生成配置文件
Secure DNS profile creator:https://dns.notjakob.com/tool.html
手动配置
ios 的描述文件需要 ios14 及以上版本,第 14 行和 17 行需要修改,最后保存为 xxx.mobileconfig
类型的文件
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>DNSSettings</key> <dict> <key>DNSProtocol</key> <string>HTTPS</string> <key>ServerAddresses</key> <array> <string>填入服务器公网ip地址</string> </array> <key>ServerURL</key> <string>https://域名/查询路径/上面配置的客户端标识符</string> </dict> <key>PayloadDescription</key> <string>Configures device to use ShiGuang DoH Encrypted DNS over HTTPS</string> <key>PayloadDisplayName</key> <string>ShiGuang DoH</string> <key>PayloadIdentifier</key> <string>com.apple.dnsSettings.managed.ac1126b6-842f-4f03-9b41-036b7bda3e91</string> <key>PayloadType</key> <string>com.apple.dnsSettings.managed</string> <key>PayloadUUID</key> <string>863e2d35-9d6f-4cb9-8f87-1368b6048935</string> <key>PayloadVersion</key> <integer>1</integer> <key>ProhibitDisablement</key> <false/> </dict> </array> <key>PayloadDescription</key> <string>Configures device to use ShiGuang DoH Encrypted DNS over HTTPS</string> <key>PayloadDisplayName</key> <string>ShiGuang DoH</string> <key>PayloadIdentifier</key> <string>com.paulmillr.apple-dns</string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>874a882a-293c-4adc-bd7e-921f91499861</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>
|
配置文件完整说明
安装
安装就没什么好说的了,Safari 浏览器下载配置文件,设置里面安装即可