免费且开源,功能强大的全网广告与跟踪器拦截 DNS 服务器。
AdGuard.com |
Wiki |
Reddit |
Twitter |
Telegram
AdGuard Home 是一款网络级广告拦截与跟踪防护软件。设置完成后,它将覆盖您家中所有设备,并且无需在设备上安装任何客户端软件。
它的运作方式是作为一个 DNS 服务器,将跟踪域名重新路由到“黑洞”,从而阻止您的设备连接到那些服务器。它基于我们用于公共 AdGuard DNS 服务器的软件,两者共享大量代码。
若要通过 curl 安装,请运行以下命令:```sh
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
要使用 `wget` 安装,请运行以下命令:```sh
wget --no-verbose -O - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
要使用 fetch 安装,请运行以下命令:```sh
fetch -o - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
该脚本还接受一些选项:
- `-c <channel>` 使用指定频道;
- `-r` 重新安装 AdGuard Home;
- `-u` 卸载 AdGuard Home;
- `-v` 输出详细信息。
请注意,选项 `-r` 和 `-u` 是互斥的。
### <a href="#alternative-methods" id="alternative-methods" name="alternative-methods">替代方法</a>
#### <a href="#manual-installation" id="manual-installation" name="manual-installation">手动安装</a>
请阅读我们 Wiki 上的 **[入门指南][wiki-start]** 文章,了解如何手动安装 AdGuard Home,以及如何配置你的设备以使用它。
#### <a href="#docker" id="docker" name="docker">Docker</a>
你可以在 [Docker Hub] 上使用我们的官方 Docker 镜像。
#### <a href="#snap-store" id="snap-store" name="snap-store">Snap Store</a>
如果你运行的是 **Linux,** 有一种安全且简单的方法可以安装 AdGuard Home:从 [Snap Store] 获取。
[Docker Hub]: https://hub.docker.com/r/adguard/adguardhome
[Snap Store]: https://snapcraft.io/adguard-home
[wiki-start]: https://adguard-dns.io/kb/adguard-home/getting-started/
### <a href="#guides" id="guides" name="guides">指南</a>
查看我们的 [Wiki][wiki]。
[wiki]: https://github.com/AdguardTeam/AdGuardHome/wiki
### <a href="#api" id="api" name="api">API</a>
如果你想与 AdGuard Home 集成,可以使用我们的 [REST API][openapi]。或者,你也可以使用这个 [python 客户端][pyclient],它可用于构建 [AdGuard Home Assistant 集成][assistant-integration]。
[assistant-integration]: https://www.home-assistant.io/integrations/adguard/
[openapi]: https://github.com/AdguardTeam/AdGuardHome/tree/master/openapi
[pyclient]: https://pypi.org/project/adguardhome/
## <a href="#comparison" id="comparison" name="comparison">将 AdGuard Home 与其他解决方案进行比较</a>
### <a href="#comparison-adguard-dns" id="comparison-adguard-dns" name="comparison-adguard-dns">这与公共 AdGuard DNS 服务器有何不同?</a>
运行你自己的 AdGuard Home 服务器可以让你做到比使用公共 DNS 服务器多得多的事情。这是完全不同的层次。你自己看看:
- 精确选择服务器阻止和允许的内容。
- 监控你的网络活动。
- 添加你自己的自定义过滤规则。
- **最重要的是,这是你自己的服务器,只有你拥有控制权。**
### <a href="#comparison-pi-hole" id="comparison-pi-hole" name="comparison-pi-hole">AdGuard Home 与 Pi-Hole 相比如何</a>
目前,AdGuard Home 与 Pi-Hole 有很多共同之处。两者都使用所谓的“DNS sinkholing”方法来阻止广告和跟踪器,并且都允许自定义被阻止的内容。
> [!NOTE]
> 我们不会止步于此。DNS sinkholing 并不是一个差的起点,但这仅仅是个开始。
AdGuard Home 开箱即用地提供了许多功能,无需安装和配置额外的软件。我们希望它足够简单,即使是普通用户也能以最少的努力完成设置。
> [!NOTE]
> 所列的某些功能可以通过安装额外软件,或手动使用 SSH 终端并重新配置 Pi-Hole 所包含的某个实用程序来添加到 Pi-Hole 中。然而,在我们看来,这不能合理地算作 Pi-Hole 的功能。
| 功能 | AdGuard Home | Pi-Hole |
|-------------------------------------------------------------------------|-------------------|-----------------------------------------------------------|
| 拦截广告和跟踪器 | ✅ | ✅ |
| 自定义阻止列表 | ✅ | ✅ |
| 内置 DHCP 服务器 | ✅ | ✅ |
| 管理界面的 HTTPS | ✅ | 某种程度上可以,但你需要手动配置 lighttpd |
| 加密 DNS 上游服务器(DNS-over-HTTPS、DNS-over-TLS、DNSCrypt) | ✅ | ❌ (需要额外的软件) |
| 跨平台 | ✅ | ❌ (非原生支持,只能通过 Docker) |
| 作为 DNS-over-HTTPS 或 DNS-over-TLS 服务器运行 | ✅ | ❌ (需要额外的软件) |
| 拦截钓鱼和恶意软件域名 | ✅ | ❌ (需要非默认阻止列表) |
| 家长控制(拦截成人域名) | ✅ | ❌ (需要非默认阻止列表) |
| 在搜索引擎上强制安全搜索 | ✅ | ❌ |
| 按客户端(设备)配置 | ✅ | ✅ |
| 访问设置(选择谁可以使用 AGH DNS) | ✅ | ❌ |
| 以 [无 root 权限][wiki-noroot] 运行 | ✅ | ❌ |
[wiki-noroot]: https://adguard-dns.io/kb/adguard-home/getting-started/
### <a href="#comparison-adblock" id="comparison-adblock" name="comparison-adblock">AdGuard Home 与传统广告拦截器相比如何</a>
视情况而定。
DNS sinkholing 能够拦截很大比例的广告,但它缺乏传统广告拦截器的灵活性和强大能力。你可以通过阅读 [这篇文章][blog-adaway] 来很好地了解这些方法之间的差异,该文章将 AdGuard for Android(一种传统广告拦截器)与 hosts 级广告拦截器(其能力与基于 DNS 的拦截器几乎相同)进行了比较。这种级别的保护对某些用户来说已经足够了。
此外,使用基于 DNS 的拦截器有助于在其他类型的设备上拦截广告、跟踪和分析请求,例如智能电视、智能音箱或其他类型的物联网设备(在这些设备上你无法安装传统的广告拦截器)。
### <a href="#comparison-limitations" id="comparison-limitations" name="comparison-limitations">已知限制</a>
以下是一些无法被 DNS 级拦截器拦截的示例:
- YouTube、Twitch 广告;
- Facebook、Twitter、Instagram 的赞助帖。
从本质上讲,任何与内容共享域名的广告都无法被 DNS 级拦截器拦截。
未来有机会解决这个问题吗?DNS 永远不足以做到这一点。我们唯一的选择是使用内容拦截代理,就像我们在独立的 AdGuard 应用中所做的那样。我们 [将在未来][issue-1228] 为 AdGuard Home 带来这一功能支持。不幸的是,即使在这种情况下,仍会有一些情况是这不够用的,或者需要相当复杂的配置。
[blog-adaway]: https://adguard.com/blog/adguard-vs-adaway-dns66.html
[issue-1228]: https://github.com/AdguardTeam/AdGuardHome/issues/1228
## <a href="#how-to-build" id="how-to-build" name="how-to-build">如何从源代码构建</a>
### <a href="#prerequisites" id="prerequisites" name="prerequisites">先决条件</a>
运行 `make init` 来准备开发环境。
构建 AdGuard Home 需要以下条件:
- [Go](https://golang.org/dl/) v1.25 或更高版本;
- [Node.js](https://nodejs.org/en/download/) v24.10.0 或更高版本;
- [npm](https://www.npmjs.com/) v10.8 或更高版本;
### <a href="#building" id="building" name="building">构建</a>
打开你的终端并执行以下命令:```sh
git clone https://github.com/AdguardTeam/AdGuardHome
cd AdGuardHome
make
[!WARNING] 非标准的
-j标志目前不受支持,因此使用make -j 4构建,或将你的MAKEFLAGS设置为包含例如-j 4,很可能会破坏构建。如果你确实已将MAKEFLAGS设置为该值,并且不想更改它,可以通过运行make -j 1来覆盖它。
查看 Makefile 以了解其他命令。
你可以为 Go 支持的任何 OS/ARCH 构建 AdGuard Home。为此,请在运行 make 时将 GOOS 和 GOARCH 环境变量作为宏指定。
例如:```sh env GOOS='linux' GOARCH='arm64' make
或:```sh
make GOOS='linux' GOARCH='arm64'
你需要 snapcraft 来准备发布构建。安装完成后,运行以下命令:```sh
make build-release CHANNEL='...' VERSION='...'
参见 [`build-release` 目标文档][targ-release]。
#### <a href="#docker-image" id="docker-image" name="docker-image">Docker 镜像</a>
运行 `make build-docker` 可在本地构建 Docker 镜像(即我们发布到 DockerHub 的那个)。请注意,我们使用 [Docker Buildx][buildx] 来构建我们的官方镜像。
在使用这些构建之前,您可能需要做一些准备:
- (仅限 Linux)安装 Qemu: ```sh
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes --credential yes
当您需要调试前端而不必每次都重新编译生产版本时(例如,检查标签在表单上的显示效果),您可以在开发环境中运行前端构建。
在单独的终端中,运行: ```sh ( cd ./client/ && env NODE_ENV='development' npm run watch )
运行您的 AdGuardHome 二进制文件并加上 --local-frontend 标志,该标志指示 AdGuard Home 忽略内置的前端文件,并使用 ./build/ 目录中的文件。
现在,您在 ./client/ 目录中所做的任何更改都应被重新编译,并在 Web UI 上可用。请确保禁用浏览器缓存,以确保您实际上获得的是重新编译后的版本。
AdGuard Home 使用 Playwright 进行 E2E 测试。测试位于 tests/e2e。
运行测试:
npm run test:e2e – 运行所有测试(无头模式)。npm run test:e2e:interactive – 以交互方式运行测试。npm run test:e2e:debug – 在调试模式下运行测试。npm run test:e2e:codegen – 生成新的测试代码。设置:
npm install 安装依赖。npx playwright install 设置所需的浏览器。警告: Playwright 会下载并安装自己的浏览器二进制文件用于测试,这些文件可能与您系统中安装的浏览器不同。
欢迎您 fork 此仓库,进行修改并提交拉取请求。不过,请务必遵循我们的代码指南。
请注意,我们不期望人们同时为程序的 UI 和后端部分做出贡献。理想情况下,后端部分首先实现,即配置、API 和功能本身。UI 部分可以稍后由不同的人在另一个拉取请求中实现。
有两个更新渠道可供您使用:
beta:AdGuard Home 的 beta 版本。或多或少稳定的版本,通常每两周或更频繁地发布。
edge:来自开发分支的最新版 AdGuard Home。新更新每天推送到此渠道。
您可以通过以下三种方式安装不稳定版本:
[Snap Store]:查找 beta 和 edge 渠道。
[Docker Hub]:查找 beta 和 edge 标签。
独立构建。使用自动安装脚本或[在 Wiki 上][wiki-platf]查找可用构建。
安装 beta 版本的脚本: ```sh curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -c beta
Script to install an edge version:
安装边缘版本的脚本: ```sh curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -c edge
[wiki-platf]: https://github.com/AdguardTeam/AdguardHome/wiki/Platforms
### <a href="#reporting-issues" id="reporting-issues" name="reporting-issues">报告问题</a>
如果你遇到任何问题或有建议,请前往[此页面][iss]并点击“新建问题”按钮。请仔细遵循问题表单中的说明,别忘了先搜索重复问题。
[iss]: https://github.com/AdguardTeam/AdguardHome/issues
### <a href="#translate" id="translate" name="translate">帮助翻译</a>
如果你想帮助 AdGuard Home 的翻译,请在我们的[知识库][kb-trans]中了解更多关于翻译 AdGuard 产品的信息。你可以为 [CrowdIn 上的 AdGuardHome 项目][crowdin]做出贡献。
[crowdin]: https://crowdin.com/project/adguard-applications/en#/adguard-home
[kb-trans]: https://kb.adguard.com/en/general/adguard-translations
### <a href="#help-other" id="help-other" name="help-other">其他</a>
另一种贡献方式是通过[寻找标记为 `help wanted` 的问题][iss-help],询问该问题是否可认领,然后提交一个修复错误或实现功能的 PR。
[iss-help]: https://github.com/AdguardTeam/AdguardHome/issues?q=is:issue+is:open+label:%22help+wanted%22
## <a href="#uses" id="uses" name="uses">使用 AdGuard Home 的项目</a>
请注意,这些项目与 AdGuard 没有关联,而是由第三方开发者和粉丝制作的。
- [AdGuard Home Remote](https://apps.apple.com/app/apple-store/id1543143740): 由 [Joost](https://rocketscience-it.nl/) 开发的 iOS 应用。
- [Python 库](https://github.com/frenck/python-adguardhome) 由 [@frenck](https://github.com/frenck) 开发。
- [Home Assistant 插件](https://github.com/hassio-addons/addon-adguard-home) 由 [@frenck](https://github.com/frenck) 开发。
- [OpenWrt LUCI 应用](https://github.com/kongfl888/luci-app-adguardhome) 由 [@kongfl888](https://github.com/kongfl888) 开发(最初由 [@rufengsuixing](https://github.com/rufengsuixing) 开发)。
- [AdGuardHome 同步](https://github.com/bakito/adguardhome-sync) 由 [@bakito](https://github.com/bakito) 开发。
- [基于终端的 AdGuard Home 实例实时流量监控与统计](https://github.com/Lissy93/AdGuardian-Term) 由 [@Lissy93](https://github.com/Lissy93)
- [GLInet 路由器上的 AdGuard Home](https://forum.gl-inet.com/t/adguardhome-on-gl-routers/10664) 由 [Gl-Inet](https://gl-inet.com/) 发布。
- [Cloudron 应用](https://git.cloudron.io/cloudron/adguard-home-app) 由 [@gramakri](https://github.com/gramakri) 开发。
- [Asuswrt-Merlin-AdGuardHome-Installer](https://github.com/jumpsmm7/Asuswrt-Merlin-AdGuardHome-Installer) 作者 [@jumpsmm7](https://github.com/jumpsmm7),又名 [@SomeWhereOverTheRainBow](https://www.snbforums.com/members/somewhereovertherainbow.64179/)。
- [Node.js 库](https://github.com/Andrea055/AdguardHomeAPI) 由 [@Andrea055](https://github.com/Andrea055/) 开发。
- [浏览器扩展](https://github.com/satheshshiva/Adguard-Home-Browser-Ext) 由 [@satheshshiva](https://github.com/satheshshiva/) 开发。
- [AdGuard Home 的 Zabbix 模板](https://github.com/diasdmhub/AdGuard_Home_Zabbix_Template) 由 [@diasdmhub](https://github.com/diasdmhub) 提供。
- [Chocolatey 软件包](https://community.chocolatey.org/packages/adguardhome/) 由 [niks255](https://community.chocolatey.org/profiles/niks255) 打包。
- [ZimaOS 应用商店条目](https://www.zimaspace.com/zimaos/app-store/app/org.icewhale.adguardhome) 由 [CasaOS 团队](https://casaos.zimaspace.com/) 提供。
## <a href="#acknowledgments" id="acknowledgments" name="acknowledgments">致谢</a>
如果没有以下项目,这个软件就不可能实现:
- [Go](https://golang.org/dl/) 及其库:
- [gcache](https://github.com/bluele/gcache)
- [miekg's dns](https://github.com/miekg/dns)
- [go-yaml](https://github.com/go-yaml/yaml)
- [service](https://godoc.org/github.com/kardianos/service)
- [dnsproxy](https://github.com/AdguardTeam/dnsproxy)
- [urlfilter](https://github.com/AdguardTeam/urlfilter)
- [Node.js](https://nodejs.org/) 及其库:
- [React.js](https://reactjs.org)
- [Tabler](https://github.com/tabler/tabler)
- 以及更多 Node.js 包。
- [whotracks.me 数据](https://github.com/cliqz-oss/whotracks.me)
你可能以前在这里看到过 [CoreDNS],但我们已停止在 AdGuard Home 中使用它。
如需查看所有正在使用的 Node.js 包的完整列表,请查看 [`client/package.json`][src-packagejson] 文件。
[CoreDNS]: https://coredns.io
[src-packagejson]: https://raw.githubusercontent.com/AdguardTeam/AdguardHome/master/client/package.json
## <a href="#privacy" id="privacy" name="privacy">隐私</a>
我们的核心理念是,你才是那个应该掌控自己数据的人。因此,AdGuard Home 自然不收集任何使用统计信息,除非你进行配置,否则也不会使用任何网络服务。另请参阅[完整隐私政策][privacy],其中列出了 AdGuard Home *理论上可能发送* 的每一比特数据。
[privacy]: https://adguard.com/en/privacy/home.html