静看光阴荏苒
不管不顾不问不说也不念

让shadowsocks等代理走adguard的dns-over-tls

以下步骤在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
赞(11)
未经允许不得转载:荒岛 » 让shadowsocks等代理走adguard的dns-over-tls
分享到: 更多 (0)

评论 6

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    给大佬点个攒

    cossxiu5年前 (2019-10-14) Google Chrome 74.0.3729.169 Google Chrome 74.0.3729.169 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    大佬666 :wink:

    demo115年前 (2019-10-16) Microsoft Edge 18.18362 Microsoft Edge 18.18362 Windows 10 x64 Edition Windows 10 x64 Edition回复
  3. #3

    adguard home广告过滤并不是特别强,同样的规则,Surge直接拦截,adguard不起作用,挺迷的

    Xaver5年前 (2019-11-10) Safari 13.0 Safari 13.0 iPhone iOS 13.2.2 iPhone iOS 13.2.2回复
    • 是的,我之前也发现了。。这个东西主要胜在用起来是确实方便。。

      LALA5年前 (2019-11-11) Google Chrome 76.0.3809.132 Google Chrome 76.0.3809.132 Windows 10 x64 Edition Windows 10 x64 Edition回复
  4. #4

    能否写篇服务器上,搭建’dns over tls’ server的文章?我搞了好久,都没搞好。

    ym4年前 (2020-01-05) Google Chrome 79.0.3945.88 Google Chrome 79.0.3945.88 Mac OS X  10.12.6 Mac OS X 10.12.6回复

分享创造快乐

广告合作资源投稿