特此声明,本教程使用了以下开源项目:

DNS服务器AdGuardHome:https://github.com/AdguardTeam/AdGuardHome

反代服务器XIU2/SNIProxy:https://github.com/XIU2/SNIProxy

1-Stream的流媒体域名库:https://github.com/1-stream/1stream-public-utils

安装AdGuardHome

AdGuardHome的安装对VPS没有特殊要求,随便找一台VPS即可,离你想上DNS解锁的VPS(非DNS解锁服务器)越近越好,为了方便,也可以在一台VPS上同时部署DNS服务和反代服务

参照官方的安装教程进行安装,这里放一个官方的一键脚本

1
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v

安装完成后,进入AdGuardHome的页面,首次登录需要进行用户名、密码的设置,这里就不再赘述了(懒癌发作)

成功登录后,跟着我来一步一步设置

点击设置-常规设置,确保 使用过滤器和Hosts文件以拦截指定域名 是被勾选的

点击设置-DNS设置,在上游 DNS 服务器中输入你常用的DNS服务器,例如我习惯使用1.1.1.18.8.8.8

测试上游,没问题后应用保存

按需设置过滤器中的DNS黑名单、DNS白名单中的规则,这两个设置主要用来去广告,不在本文讨论范围

打开DNS解锁配置生成器,输入拟用来进行DNS解锁的服务器(例如Akile、Acck、Alice这类DNS解锁机或者LegendVPS这类原生解锁机)的IPv4和IPv6地址(两者至少输入一个)后,点击生成 AdguardHome 自定义规则按钮,复制生成的规则到剪贴板备用

点击过滤器-自定义规则,输入刚才复制的AdGuardHome规则,点击应用,此时AdguardHome就能够正常进行工作了

但是我们还需要做一些安全上的设置

点击设置-DNS设置,把页面拉到最下边,找到访问设置,输入允许进行DNS解析的IP地址,点击应用保存

安装SNIProxy

SNIProxy服务器的选择就有讲究了,必须在能够进行多媒体解锁的服务器(例如Akile、Acck、Alice这类DNS解锁机或者LegendVPS这类原生解锁机)上安装 这里直接照搬官方教程

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
# 如果是第一次使用,则建议创建新文件夹(后续更新时,跳过该步骤)
mkdir sniproxy

# 进入文件夹(后续更新,只需要从这里重复下面的下载、解压命令即可)
cd sniproxy

# 下载 sniproxy 压缩包(自行根据需求替换 URL 中 [版本号] 和 [文件名])
wget -N https://github.com/XIU2/SNIProxy/releases/download/v1.0.4/sniproxy_linux_amd64.tar.gz
# 如果你是在国内服务器上下载,那么请使用下面这几个镜像加速:
# wget -N https://ghp.ci/https://github.com/XIU2/SNIProxy/releases/download/v1.0.4/sniproxy_linux_amd64.tar.gz
# wget -N https://ghproxy.cc/https://github.com/XIU2/SNIProxy/releases/download/v1.0.4/sniproxy_linux_amd64.tar.gz
# wget -N https://ghproxy.net/https://github.com/XIU2/SNIProxy/releases/download/v1.0.4/sniproxy_linux_amd64.tar.gz
# wget -N https://gh-proxy.com/https://github.com/XIU2/SNIProxy/releases/download/v1.0.4/sniproxy_linux_amd64.tar.gz

# 如果下载失败的话,尝试删除 -N 参数(如果是为了更新,则记得提前删除旧压缩包 rm sniproxy_linux_amd64.tar.gz )

# 解压(不需要删除旧文件,会直接覆盖,自行根据需求替换 文件名)
tar -zxf sniproxy_linux_amd64.tar.gz

# 赋予执行权限
chmod +x sniproxy

# 编辑配置文件(根据下面的 配置文件说明 来自定义配置内容并保存(按下 Ctrl+X 然后再按 2 下回车)
nano config.yaml

# 运行(不带参数)
./sniproxy

# 运行(带参数示例)
./sniproxy -c "config.yaml"

# 后台运行(带参数示例)
nohup ./sniproxy -c "config.yaml" > "sni.log" 2>&1 &

对于懒人,我也写了个一键脚本

1
curl -sSL https://raw.githubusercontent.com/hkfires/DNS-Unlock-Server/main/install_sniproxy.sh | sudo bash

为了安全,运行SNIProxy的服务器建议使用防火墙进行源IP的限制,这一块就不在本文讨论了(懒癌发作x2),为了方便是用UFW的用户,我写了个UFW规则生成器,可以用这个方便地进行防火墙的设置

配置DNS解锁

这一块大家都很熟悉了吧,就不写了(懒癌发作x3)

推荐使用DNS 流媒体一键分流脚本

效果

使用阿里的脏IP,使用自建DNS服务器解锁的效果(DNS解锁用了Akile的解锁机)