安卓端 AdGuard 与代理软件共存指南(无需 Root 权限)
安卓端 AdGuard 与代理软件共存指南(无需 Root 权限)
先说思路:
- 基本设置:AdGuard 创建系统 VPN 服务,作为所有网络流量的第一个入口。代理软件则以后台纯代理服务的模式运行。
- 流量走向:AdGuard 捕获所有流量后,首先进行广告和跟踪器过滤,然后将过滤后的流量转发给代理软件的本地端口。
- 防止循环:在 AdGuard 中将代理软件本身排除,避免 AdGuard 将流量发给代理 -> 代理又发回给 AdGuard 的无限循环问题。
- DNS 联动:将 AdGuard 的 DNS 请求也指向代理软件的本地 DNS 端口,从而实现 DNS 级别的广告过滤和分流。
前言
在安卓设备上,创建本地的系统 VPN 服务是没有 Root 权限过滤网络流量的主要方式。由于同一时间只能有一个应用激活系统 VPN 服务,而这又是 AdGuard 和许多代理工具实现流量过滤的关键,因此 AdGuard 和代理软件的共存问题就成了一个老生常谈的话题。
本指南将以 AdGuard for Android(新版 UI)和 Exclave 代理软件为例,详细演示如何实现完美共存。Exclave 是一款自定义程度高、协议支持全面的优秀客户端,我会在后续文章中详细介绍。本指南的原理和步骤同样适用于其他主流代理软件。
AdGuard 官方知识库中也有相关教程,但不够详细:https://adguard.com/kb/zh-CN/adguard-for-android/solving-problems/outbound-proxy/
教程
第一步:在 AdGuard 中排除代理软件
此操作的目的是避免 AdGuard 将流量发给代理 -> 代理又发回给 AdGuard 的无限循环问题,从而导致无法上网。
- 打开 AdGuard,进入
应用管理。 - 在应用列表中找到你的代理软件(本例中是 Exclave)。
- 关闭
通过 AdGuard 路由流量开关。

提示:
- 新版 AdGuard:
应用管理在底部导航栏的第三个图标。 - 旧版 AdGuard:在侧滑栏中点击
应用管理,找到代理软件后在常规中关闭已开启 通过 AdGuard 路由应用流量。。
第二步:配置代理软件为仅代理模式
代理软件不再创建系统 VPN 服务,而是作为一个纯粹的本地代理服务器等待 AdGuard 转发流量。
- 打开 Exclave,在侧滑栏中点击
设置。 - 在
软件设置中将服务模式设置成仅代理。 - 在
入站设置中打开启用 HTTP 入站和启用 DNS 入站。 - 记下以下三个端口号,稍后会用到:
SOCKS5 代理端口HTTP 代理端口本地 DNS 端口

第三步:将代理软件设置为 AdGuard 的上游代理
AdGuard 在进行广告和跟踪器过滤后需要将流量转发给代理软件的本地端口。
- 打开 AdGuard,进入
设置-过滤-网络-代理。 - 开启代理,在
代理服务器中点击添加代理并填写以下信息:
- 代理名称:任意填写,可以填入代理软件名以方便识别。
- 代理类型:选择
SOCKS5。 - 代理主机:填入
127.0.0.1(这代表设备本机)。 - 代理端口:填入上一步记下的 SOCKS5 代理端口。
- 打开
通过 SOCKS5 路由 UDP。 - 确保你的代理软件已启动并连接到可用节点,然后点击
检查连接,应提示代理可用。 - 点击
保存并选择。

提示:
- 新版 AdGuard:
设置在底部导航栏的第五个图标。 - 旧版 AdGuard:在侧滑栏中点击
设置-网络-代理,其他操作相同。
此时,AdGuard 应该已经能通过代理软件连接网络,通知栏中会显示 通过代理服务器拦截广告和跟踪器,点击 禁用 可以关闭 AdGuard 和代理软件,点击 禁用代理 会断开 AdGuard 和代理软件的连接,即仅保留广告拦截,不进行代理。

第四步:配置 AdGuard 的 DNS 上游
为了让 AdGuard 的 DNS 过滤也能让代理软件进行分流解析,还需要最后一步设置。
- 打开 AdGuard,进入
防护-DNS保护功能。 - 开启 DNS 保护功能,在
DNS服务器中选择自动 DNS。 - 在
集成模式或出站代理的 DNS 服务器字段中填入127.0.0.1:加上你在第二步记下的本地 DNS 端口。例如,如果本地 DNS 端口为6450,就填入127.0.0.1:6450。

提示:新版 AdGuard 的 防护 在底部导航栏的第二个图标。旧版 AdGuard 没有自动 DNS 功能,你需要在侧滑栏中点击 设置 - DNS - 选择DNS服务器,添加自定义DNS服务器,在 服务器地址 中填入 127.0.0.1: 加上你在第二步记下的本地 DNS 端口。
注意:新版 AdGuard 的自动 DNS 功能会根据代理的连接状态自动切换 DNS 上游。当代理断开时,它会自动回落到系统 DNS 上游,避免断网。而旧版 AdGuard 的自定义 DNS 服务器在关闭代理软件后仍然会使用代理软件的 DNS 上游,只有等到超时才会回落到系统 DNS 上游。
最后一步:检查并确认路由模式
完成以上四步后,基本功能已经实现,但还需检查 AdGuard 是否创建了系统 VPN 服务。
进入 AdGuard 的 设置 - 过滤 - 网络 - 路由模式,确保它处于默认的 本地 VPN 状态。

提示:旧版 AdGuard 在侧滑栏中点击 设置 - 网络 - 路由模式,其他操作相同。
关于分应用代理
如果你之前在代理软件中设置了分应用 VPN,你会发现原先在代理软件中设置的“分应用代理”规则失效了,所有应用现在都通过代理连接。
这是因为分应用代理依赖于系统 VPN 服务来识别流量来源。由于现在是 AdGuard 接管了 VPN,代理软件无法知道流量来自哪个应用,自然无法按应用进行分流。
解决方法是在 AdGuard 中进行分应用代理设置。打开 AdGuard,进入 应用管理,找到需要设置的软件,切换 通过代理路由应用程序 即可。你也可以进入 AdGuard 的 设置 - 过滤 - 网络 - 代理,在 通过代理运行的应用 中进行批量设置。

注意:旧版 AdGuard 没有分应用代理功能,你只能关闭 AdGuard 对该应用流量的路由,但这也会导致 AdGuard 对该应用的广告过滤直接失效。
其实,与其依赖分应用代理,更推荐在代理软件中配置基于域名(geosite)和 IP(geoip)的路由规则。这种方式更灵活、更强大,不受系统 VPN 服务归属的影响。

原理解析 & 方案对比
本方案的网络流量流向
DNS 解析:
[App 发起 DNS 查询]->[AdGuard VPN 捕获]->[AdGuard DNS 过滤 (去广告)]->[转发至 127.0.0.1 DNS 端口]->[代理软件 DNS 分流 (判断国内外转发到不同的上游服务器)]->[返回最终 IP 地址]数据传输:
[App 使用 IP 地址发包]->[AdGuard VPN 捕获]->[AdGuard 防火墙/规则过滤]->[转发至 127.0.0.1 SOCKS5 端口]->[代理软件根据规则代理/直连]->[互联网]
与其他方案对比
- AdGuard 作为本地 HTTP 代理:一些教程推荐此方案,让代理软件继续使用 VPN 服务。优点是可随时单独关闭 AdGuard 或代理软件。缺点是需要 Root 权限,且 AdGuard 的防火墙和 DNS 过滤功能会失效,功能损失较大。
- 配置 AdGuard 为手动代理:此方案需要为每个 WLAN 网络手动配置系统代理,不仅繁琐,而且对移动数据无效,很多应用也会忽略系统代理设置,因此极不推荐。
本方案的优缺点
- 优点:无需 Root,功能完整,AdGuard 的所有过滤功能(广告、跟踪器、DNS、防火墙)和代理软件的代理、分流功能都能同时生效。
- 缺点:二者高度绑定。你无法单独关闭 AdGuard 而不关闭代理软件,因为 AdGuard 是流量的唯一入口。禁用 AdGuard 会导致代理也失效。