以下步骤在Debian10上测试通过,其他系统可能会有一定出入。
首先下载adguard的二进制文件:
mkdir -p /opt/adguard && cd /opt/adguard wget https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.98.1/AdGuardHome_linux_amd64.tar.gz tar -xzvf AdGuardHome_linux_amd64.tar.gz cd AdGuardHome
执行下面的命令安装:
./AdGuardHome -s install
更多管理命令:
./AdGuardHome -s uninstall ./AdGuardHome -s start ./AdGuardHome -s stop ./AdGuardHome -s restart ./AdGuardHome -s status
打开adguard的web面板,初次安装的时候会让你设置一个DNS监听端口,这里不要用53,改为5353或者其他的,包括WEB的服务端口80也可以改为8080或者其他,避免与nginx等WEB服务器软件端口冲突:
如果你是之前就安装好了(假设你和我一样安装在/opt目录下)那么可以通过修改下面的配置文件:
/opt/adguard/AdGuardHome/AdGuardHome.yaml
改为5353或者其他的端口:
dns: bind_host: 0.0.0.0 port: 5353
接下来安装certbot/unbound等软件:
apt -y install certbot unbound ca-certificates
使用certbot给你的域名签一个ssl证书:
certbot certonly --standalone --agree-tos --no-eff-email -d dns.sn0w.observer
签完之后查看证书和私钥内容,复制下来:
cat /etc/letsencrypt/live/dns.sn0w.observer/fullchain.pem cat /etc/letsencrypt/live/dns.sn0w.observer/privkey.pem
打开adguard的加密设置界面,勾选启用加密/服务器名称填写你之前申请ssl证书的域名/HTTPS端口改为8443,避免与nginx等软件的443端口冲突,如图所示:
往下翻,粘贴你之前复制的证书和私钥,如果都是OK的话,那么状态这里会按下图显示:
这样配置好了之后,就完美解决了adguard和nginx端口冲突的问题,adguard现在监听了4个端口,分别是:
5353/8080/8443/853
5353是常规DNS端口,这里我们用不到可以忽略。8080是adguard的web面板服务端口,8443是adguard的DoH服务端口,这里我们也用不到可以忽略。853就是adguard的DoT服务端口了,这是我们需要的。
接下来新建一个unbound配置文件:
nano /etc/unbound/unbound.conf.d/dns-over-tls.conf
写入如下配置:
server: tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt forward-zone: name: "." forward-ssl-upstream: yes forward-addr: 209.50.62.109@853#dns.sn0w.observer # 你的DoT地址
重启unbound:
systemctl restart unbound
正常情况下unbound会自动帮你把resolv.conf内的内容改为本地,如果没有就自己手动编辑如下配置文件:
nano /etc/resolv.conf
将DNS服务器地址改为本地:
nameserver 127.0.0.1
这样配置了之后shadowsocks等代理工具在解析域名时的流程大概是这样:
本地的unbound通过53端口转发DNS请求 > 本地adguard的DoT > 上游支持DoT的DNS(adguard内配置的,比如tls://1.1.1.1等)
你可以使用tcpdump对数据进行简单的抓包,看看工作是否正常,如果正常的话,抓53端口的包是抓不到任何数据的:
tcpdump -i eth0 port 53
抓853端口的包可以抓到有域名解析的请求,但看不到请求的具体内容:
tcpdump -i eth0 port 853
LALA
我什么都不卖了,告辞!
最新评论
5211314
能不能教我 一点不会