lala.im:让shadowsocks等代理走adguard的dns-over-tls

運維技術·VPN代理·lala.im · 2019-10-14 · 110 人浏览

原文地址:https://lala.im/6446.html,請支持原作者!該處僅作轉載。

以下步骤在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
運維技術 VPN代理 lala.im
Theme Jasmine by Kent Liao