logo NodeSeekbeta

「教程」使用 AdGuard Home 分流 RFCHost WarpDNS 自选地区自定义 DNS 解锁

近期 RFCHost 上线了 WarpDNS Access (WDA)内容解锁功能,通过配置 DNS 即可访问不同于服务器当前区域的流媒体、AI等网络服务。该免费服务目前已为几乎所有 RFCHost 的产品开放,HK T1 CTC 产品由于不在同一个内网,还待商家后续找到合适的解决方案后开放。

若仅需特定地区的流媒体解锁,那么不再需要购买对应地区落地,可直接在后台面板选择,这很大程度上提升了使用体验。

WDA 后台面板设置

登陆官网后台,在服务器产品页面右上角,点击 WDA 打开设置面板。

rfchost_warpdns_show_panel

看看各地区支持解锁哪些服务(点击查看大图)

香港 新加坡 美国 日本
rfchost_warpdns_hk rfchost_warpdns_sg rfchost_warpdns_us rfchost_warpdns_jp

台湾地区暂时不可选,待后续准备好后上线。

这里的设置很简单,先选择一个地区,再选择在此地区解锁的服务,最后点击提交即可。

rfchost_warpdns_tutorial_1

rfchost_warpdns_tutorial_2

例如对位于日本的服务器,我们可以选择解锁 Netflix 新加坡地区内容,同时选择解锁美国地区 Google 搜索和 YouTube 服务。

在后台面板设置好后,将服务器系统的 DNS 设置为 22.22.22.22 即可。下面以 Linux 系统为例。

# 该文件有可能为软链接,可选择直接移除
# rm /etc/resolv.conf
# 解锁,如果之前有锁定
chattr -i /etc/resolv.conf
# 设置 DNS 地址
echo "nameserver 22.22.22.22" > /etc/resolv.conf
# 锁定,以避免被修改
chattr +i /etc/resolv.conf

安装 AdGuard Home

目前 DNS 解锁服务器有请求数限制,若设为全局 DNS ,有些时候或许会影响其他网页访问的体验。我们可以通过自建本地 DNS 服务器,来做一些分流设置,而 AdGuard Home 是一个不错的选择。

  • 支持配置多种现代协议的上游DNS服务器
  • 支持提供 DoH 等加密请求服务
  • 支持启用乐观缓存,在过期后先返回缓存的地址,再尝试更新
  • 支持屏蔽广告域名,默认启用,可订阅更多规则
  • 自带 Web 面板,方便配置和排查 DNS 问题
  • 单个可执行文件部署,自带 systemd 服务安装命令

官方 GitHub 项目:

https://github.com/AdguardTeam/AdGuardHome

(截止发稿时,最新版本为 0.107.63 ,以下均基于此版本。当后续版本更新,很可能下述命令或配置将不再适用。)

以下在 Linux 系统 Debian 12 中进行操作。

使用官方脚本安装

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

手工安装

下载最新版本的二进制包,例如 AdGuardHome_linux_amd64.tar.gz ,解压其中的 AdGuardHome 可执行文件。

mkdir -p /opt/adguardhome/bin
cd /opt/adguardhome

curl -o AdGuardHome_linux_amd64.tar.gz -fSL "https://github.com/AdguardTeam/AdGuardHome/releases/latest/download/AdGuardHome_linux_amd64.tar.gz"

tar -xf AdGuardHome_linux_amd64.tar.gz -C ./bin --strip-components=2 --no-same-owner "./AdGuardHome/AdGuardHome"
chmod 755 ./bin/AdGuardHome

运行安装命令,安装 systemd 服务

注意提前停止其他占用 53端口、3000 (Web面板)端口的 DNS 服务,例如 systemd-resolved 等。服务安装成功后将自动启动。

cd /opt/adguardhome
mkdir data conf

./bin/AdGuardHome --no-check-update -c /opt/adguardhome/conf/AdGuardHome.yaml -w /opt/adguardhome/data --web-addr 127.0.0.1:3000 -s install

卸载命令,若后续不再需要

./bin/AdGuardHome -s uninstall
rm -rf /opt/adguardhome

以下是其他控制命令。

# 启动服务
./bin/AdGuardHome -s start
# 停止服务
./bin/AdGuardHome -s stop
# 重启服务
./bin/AdGuardHome -s restart
# 重新加载配置文件
./bin/AdGuardHome -s reload

Docker Compose 安装

参考官方 Docker Hub 上面的介绍

https://hub.docker.com/r/adguard/adguardhome

编辑 compose.yaml 编排文件。此处使用 host 网络,以减少不必要的性能开销,然而在 AdGuard Home 中所监听的端口将全部开放,故启动前需先停止其他已占用 53 端口、3000端口的服务。

---
services:
  adguardhome:
    image: adguard/adguardhome:latest
    network_mode: host
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./data:/opt/adguardhome/work
      - ./conf:/opt/adguardhome/conf
    command: ["--no-check-update", "-c", "/opt/adguardhome/conf/AdGuardHome.yaml", "-w", "/opt/adguardhome/work", "--web-addr", "127.0.0.1:3000"]
    init: true
    restart: unless-stopped

启动容器

docker compose up -d

销毁容器

docker compose down

查看日志(Ctrl+C 停止)

docker compose logs -f

访问 Web 面板

应避免对外开放 AdGuard Home Web 面板的访问,避免明文 HTTP 的形式访问面板。

若需长期提供固定访问,建议使用自己的域名,在本地 HTTPS 服务器反向代理 Web 面板 HTTP 端口,或配置证书并启用内置的 HTTPS 与 DoH 功能,或通过 Cloudflare Tunnel 等方式保护。

若临时使用,可通过加密隧道、加密端口转发等形式转发至本地电脑的端口,也可临时启用自签名 HTTPS 反向代理 Web 面板端口。

下面以 caddy 为例。

下载最新的版本压缩包,解压 caddy 单个可执行文件。

CADDY_VERSION=2.10.0
curl -fSOL "https://github.com/caddyserver/caddy/releases/download/v${CADDY_VERSION}/caddy_${CADDY_VERSION}_linux_amd64.tar.gz"
tar -xf "caddy_${CADDY_VERSION}_linux_amd64.tar.gz" -C /opt/adguardhome/bin/ --no-same-owner "caddy"

临时启用自签名 HTTPS 反向代理。注意在命令中必须显式指定监听的外网IP地址或域名,以自动签发自签名证书。

./bin/caddy reverse-proxy --from 外网IP地址或域名:53443 --to http://127.0.0.1:3000 --internal-certs

也可使用 Docker Compose 运行

可将 caddy 服务添加到 compose.yaml 中。

---
services:
  caddy:
    image: caddy:latest
    network_mode: host
    command: ["caddy", "reverse-proxy", "--from", "外网IP地址或域名:53443", "--to", "http://127.0.0.1:3000", "--internal-certs"]

启动 caddy 后使用浏览器打开 https://外网IP地址或域名:53443 即可访问 AdGuard Home Web 面板。

初次访问进入安装界面

初次启动 AdGuard Home 服务后,需要设置 Web 面板、DNS 服务的监听网口和端口,以及管理员账号密码。

adguard_home_install

这两个建议均设置为监听本地 Loopback 接口的端口。

最后一步会跳转到 127.0.0.1:3000 ,浏览器页面或许无法打开,此时需手动修改为外网可访问地址,再次打开 Web 面板。

配置上游 DNS 服务器

安装完成后,登陆 Web 面板。在 DNS 设置中可修改上游服务器地址。

adguard_home_config_dns

如果不需要再次做分流,可以直接改为 RFCHost 的 22.22.22.22 。修改完后记得点「应用」按钮。

可在下方配置中,按需修改 DNS 请求次数限制,按需启用「乐观缓存」。

设置系统 DNS

最后将系统的 DNS 修改为本地 Loopback 地址。

# 解锁,如果之前有锁定
chattr -i /etc/resolv.conf
echo "nameserver 127.0.0.1" > /etc/resolv.conf
chattr +i /etc/resolv.conf

如果配置成功,将可以在「日志」中看到 DNS 查询记录。

若不希望做更多分流配置,以免引入不必要的麻烦的话,到这里就可以结束了。

通过 AdGuard Home 分流 DNS 解锁请求

AdGuard Home 安装完成,并测试能正常使用后,已经能达到缓存加速 DNS 请求的效果。DNS 分流需要域名清单及时更新,且需要与 DNS 解锁服务的清单相匹配,是一个进阶玩法,或许需要花费更多时间精力排查问题,请自行判断是否有这个需要。

接着配置 DNS 分流,这里我们使用 1stream 项目所提供的分流域名清单。

https://github.com/1-stream/1stream-public-utils

准备好全局上游 DNS 配置,以 HTTP3 Cloudflare DoH DNS 为例。

echo 'h3://1.1.1.1/dns-query' > ./conf/upstream_dns.list
echo 'h3://1.0.0.1/dns-query' >> ./conf/upstream_dns.list

执行命令下载最新清单,并批量替换上游 DNS 服务器地址。

# 下载最新的规则清单
curl -o ./conf/stream.adg.list -fSL "https://raw.githubusercontent.com/1-stream/1stream-public-utils/refs/heads/main/stream.adg.list"

# 替换解锁 DNS 服务器地址,顺便清理 CRLF 换行符
sed -e 's/<DNS>/22.22.22.22/g' -e 's/\r$//' ./conf/stream.adg.list >> ./conf/upstream_dns.list

此时有两种配置方法,一种是在 Web 面板中将 upstream_dns.list 文件内容粘贴至上游 DNS 服务器配置文本框中,这种方法的好处是可在 Web 面板随时添加修改。

另一种方法是在 AdGuardHome.yaml 中配置加载的文件路径,好处是随时可通过脚本更新最新清单,然后重新加载配置即可,不需要再去 Web 面板操作。

使用文本编辑器打开 ./conf/AdGuardHome.yaml 文件,修改 dns 下方的 upstream_dns_file 为以上配置文件绝对路径。若是 Docker 容器中,则需注意挂载的目录容器内部路径。

dns:
  upstream_dns_file: /opt/adguardhome/conf/upstream_dns.list

或者通过 sed 命令替换。

sed -i 's/^\([[:space:]]*upstream_dns_file:\).*$/\1 \/opt\/adguardhome\/conf\/upstream_dns\.list/' ./conf/AdGuardHome.yaml

检查一下是否配置正确

grep upstream_dns_file ./conf/AdGuardHome.yaml

配置完成后,重启服务。

# 如果已安装为 systemd 服务
./bin/AdGuardHome -s restart

# 如果使用 docker compose 部署
docker compose restart

在 Web 面板 DNS 设置中检查,上游 DNS 服务器文本框处是否为文件路径。若未配置成功,可尝试先停止服务,编辑好配置文件后,再启动服务。

如何排查 DNS 解析问题

若某个服务出现解锁异常的情况,我们可以到「查询日志」界面,查看最近访问的域名。

看看相关域名的解析是否使用了 DNS 解锁服务器,看解析结果是否正确。

adguard_home_logs

若请求的域名未走 DNS 解锁,可手工将其添加到上游DNS配置中,格式如下。

[/netflix.com/]22.22.22.22

如果使用了 upstream dns 配置文件,为使改动生效,修改后需要重启 AdGuard Home 服务。

若确认域名已走 DNS 解锁,但解析出来的地址并非解锁服务器。那么可将这个域名反馈给商家,以加快解决问题的速度。

解锁效果

日本地区的服务器,启用 DNS 自定义地区内容解锁后的效果,如下图所示,Netflix 为新加坡地区,YouTube 为美区。

rfchost_warpdns_result

在日志中可以看到,正确分流了 DNS 域名。

默认应用全局DNS 流媒体域名分流至DNS解锁
adguard_home_result_1 adguard_home_result_2

以上就是通过 AdGuard Home 来做 DNS 分流的方法,在不影响大部分域名解析的同时,实现了广告域名屏蔽,本地加速乐观缓存,按需分流DNS解锁的效果。

有什么问题或优化建议,欢迎在本帖回复探讨。

  • AdGuard Home 做 DNS 分流挺复杂的,还是smartdns方便

  • 还能这样玩呢??

  • @damncold #3 感谢分享,原帖地址如下

    https://www.nodeseek.com/post-329455-1

    但不可为 RFCHost 使用该配置,因为 DNS 服务器与解锁的服务器并不一致。
    除非自行从解析值中找出来套进去,但以后说不定有可能会变,商家目前只公开了 DNS 服务器地址。

  • 也就是说得配套买RFCHost的VPS,才可以进行后续的操作

  • 这个如果ai解锁,会降智吗

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72518位seeker

🎉欢迎新用户🎉