AI摘要

本文记录了OpenClash环境下Google AdSense广告能显示但点击跳转`www.googleadservices.com`时出现`ERR_CONNECTION_CLOSED`的排查过程。问题源于规则位置错误、广告拦截规则前置及直连被阻断,最终通过将相关域名规则置于`rules`最上方并走代理解决。

最近折腾网站广告的时候,遇到一个很奇怪的问题:

网站里的 Google AdSense 广告位有时候可以正常显示,但是点击广告跳转时打不开;而开启 OpenClash 后,广告相关请求又会直接报错,浏览器控制台里能看到:

net::ERR_CONNECTION_CLOSED

浏览器页面也会提示:

无法访问此网站
www.googleadservices.com 意外终止了连接
ERR_CONNECTION_CLOSED

一开始我以为是网页代码、广告代码或者 AdSense 本身的问题,后来排查了一圈才发现,问题主要出在 OpenClash 的规则、DNS 和广告拦截链路上。

这篇文章记录一下我的排查过程。


一、问题现象

我的网站接入了 Google AdSense / Google Ads 广告。

在不同网络状态下表现不太一样:

  1. 开启 OpenClash 时

    • 广告请求可能直接失败;
    • 控制台出现 ERR_CONNECTION_CLOSED
    • 部分广告位不显示,或者显示异常。
  2. 关闭 OpenClash 后

    • 广告有时可以显示;
    • 但是点击广告跳转到 www.googleadservices.com 时打不开;
    • 浏览器提示连接被关闭。

截图里的典型错误是:

www.googleadservices.com 意外终止了连接
ERR_CONNECTION_CLOSED

这里基本可以确定,问题不是单纯的前端代码错误,而是广告相关域名在网络层面被断开了连接。


二、涉及到的 Google 广告相关域名

排查过程中,常见的相关域名有这些:

googleads.g.doubleclick.net
adservice.google.com
googleadservices.com
www.googleadservices.com
ad.doubleclick.net
pagead2.googlesyndication.com
tpc.googlesyndication.com
googlesyndication.com
googletagservices.com
googletagmanager.com

这些域名大致可以分成几类:

广告加载:
pagead2.googlesyndication.com
tpc.googlesyndication.com
googleads.g.doubleclick.net

广告展示 / 统计:
googlesyndication.com
googletagservices.com
googletagmanager.com
doubleclick.net

广告点击跳转:
googleadservices.com
www.googleadservices.com
adservice.google.com

其中我这里最明显的问题是:

www.googleadservices.com

广告能显示,但是点不开,最后就是卡在这个域名上。


三、我一开始放错了位置

一开始我把这些域名填到了 OpenClash 的:

绕过指定区域 IPv4 黑名单

里面。

类似这样:

googleads.g.doubleclick.net
adservice.google.com
googleadservices.com
ad.doubleclick.net

但是后来发现,这个位置并不是用来写 Clash 规则的。

这个位置不是 rules 规则区,也不是广告白名单,更不是代理规则区。

它主要是配合 OpenClash 的“绕过指定区域 IP”之类功能使用的,不适合用来处理 Google Ads 这种域名走代理 / 直连的问题。

所以,类似下面这种规则,不能写在那里:

- DOMAIN,www.googleadservices.com,Proxy
- DOMAIN-SUFFIX,doubleclick.net,Proxy

正确位置应该是 OpenClash 的:

覆写设置 / 自定义规则 / Rules

或者类似名字的 rules: 配置区域。


四、Clash / Mihomo 的规则顺序很重要

Clash / Mihomo 的规则是从上往下匹配的。

也就是说,谁写在前面,谁优先生效。

例如:

rules:
- DOMAIN-SUFFIX,googleadservices.com,Proxy
- DOMAIN-SUFFIX,googleadservices.com,REJECT

这种情况下,googleadservices.com 会先命中 Proxy,不会再继续往下匹配 REJECT

但是如果顺序反过来:

rules:
- DOMAIN-SUFFIX,googleadservices.com,REJECT
- DOMAIN-SUFFIX,googleadservices.com,Proxy

那它就会直接被拒绝,后面的 Proxy 根本不会生效。

所以 Google 广告相关规则必须放在 rules: 最上方,放在这些规则之前:

- GEOSITE,category-ads-all,REJECT
- RULE-SET,ads,REJECT
- RULE-SET,reject,REJECT
- MATCH,...

否则很容易被广告过滤规则提前拦截。


五、不要写错规则格式

我之前看到一些过滤器里会有这种格式:

domain:googleads.g.doubleclick.net,

注意,这不是 Clash / Mihomo 的 rules 写法。

Clash 里应该这样写:

- DOMAIN,googleads.g.doubleclick.net,Proxy
- DOMAIN-SUFFIX,doubleclick.net,Proxy

两种常用规则区别如下:

- DOMAIN,www.googleadservices.com,Proxy

表示精确匹配这个域名。

- DOMAIN-SUFFIX,googleadservices.com,Proxy

表示匹配整个后缀,包括:

googleadservices.com
www.googleadservices.com

一般来说,广告点击跳转域名可以同时写精确域名和后缀域名,避免某些情况下没有命中。


六、不要粗暴处理整个 google.com

一开始我也想过直接加:

- DOMAIN-SUFFIX,google.com,Proxy

或者:

- DOMAIN-SUFFIX,google.com,DIRECT

但这个做法太粗暴。

因为 google.com 涉及的服务太多了,比如搜索、登录、API、字体、验证码、统计、广告跳转等。

我的需求只是解决 Google Ads / AdSense 相关域名的问题,不想让整个 Google 都被影响。

所以这篇文章里的规则只针对广告相关域名,不处理整个:

google.com

七、DIRECT 还是 Proxy?

这里要根据实际网络环境判断。

我这里的问题是:

www.googleadservices.com
ERR_CONNECTION_CLOSED

也就是说,www.googleadservices.com 直连时会被断开。

这种情况下,它就不应该走 DIRECT,而应该走代理。

之前我可用的规则是这样的:

rules:
- DOMAIN,pagead2.googlesyndication.com,DIRECT
- DOMAIN,tpc.googlesyndication.com,DIRECT
- DOMAIN,googleads.g.doubleclick.net,DIRECT
- DOMAIN-SUFFIX,doubleclick.net,DIRECT
- DOMAIN-SUFFIX,googleadservices.com,DIRECT
- DOMAIN-SUFFIX,googlesyndication.com,DIRECT
- DOMAIN-SUFFIX,googletagservices.com,DIRECT
- DOMAIN-SUFFIX,googletagmanager.com,DIRECT

这套规则可以让一部分广告展示链路直连,但是如果 www.googleadservices.com 直连打不开,那点击跳转仍然会失败。

所以更适合我的写法是:广告相关域名走代理。


八、推荐规则示例

假设你的代理策略组叫:

Proxy

那么可以在 OpenClash 自定义规则的 rules: 最上方加入:

rules:
- DOMAIN,www.googleadservices.com,Proxy
- DOMAIN,googleadservices.com,Proxy
- DOMAIN,adservice.google.com,Proxy
- DOMAIN,googleads.g.doubleclick.net,Proxy
- DOMAIN,pagead2.googlesyndication.com,Proxy
- DOMAIN,tpc.googlesyndication.com,Proxy
- DOMAIN-SUFFIX,googleadservices.com,Proxy
- DOMAIN-SUFFIX,doubleclick.net,Proxy
- DOMAIN-SUFFIX,googlesyndication.com,Proxy
- DOMAIN-SUFFIX,googletagservices.com,Proxy
- DOMAIN-SUFFIX,googletagmanager.com,Proxy

注意,Proxy 必须是你配置里真实存在的策略组名称。

有些人的策略组不叫 Proxy,而是叫:

节点选择
🚀 节点选择
国外流量
手动选择
GLOBAL

那就要改成自己的策略组名称。

比如你的策略组叫:

🚀 节点选择

那规则应该写成:

rules:
- DOMAIN,www.googleadservices.com,🚀 节点选择
- DOMAIN,googleadservices.com,🚀 节点选择
- DOMAIN,adservice.google.com,🚀 节点选择
- DOMAIN,googleads.g.doubleclick.net,🚀 节点选择
- DOMAIN,pagead2.googlesyndication.com,🚀 节点选择
- DOMAIN,tpc.googlesyndication.com,🚀 节点选择
- DOMAIN-SUFFIX,googleadservices.com,🚀 节点选择
- DOMAIN-SUFFIX,doubleclick.net,🚀 节点选择
- DOMAIN-SUFFIX,googlesyndication.com,🚀 节点选择
- DOMAIN-SUFFIX,googletagservices.com,🚀 节点选择
- DOMAIN-SUFFIX,googletagmanager.com,🚀 节点选择

不要照抄 Proxy 这个名字,除非你的配置里真的有这个策略组。


九、完整配置位置示例

我的 OpenClash 自定义规则区域大概是这种结构:

rule-providers:
##  google:
##    type: http
##    path: ./rule1.yaml
##    url: "https://raw.githubusercontent.com/../Google.yaml"
##    interval: 600
##    proxy: DIRECT
##    behavior: classical
##    format: yaml
##    size-limit: 0
##    header:
##      User-Agent:
##      - "mihomo/1.18.3"
##      Authorization:
##      - 'token 1231231'
##    payload:
##      - 'DOMAIN-SUFFIX,google.com'

rules:
- DOMAIN,www.googleadservices.com,Proxy
- DOMAIN,googleadservices.com,Proxy
- DOMAIN,adservice.google.com,Proxy
- DOMAIN,googleads.g.doubleclick.net,Proxy
- DOMAIN,pagead2.googlesyndication.com,Proxy
- DOMAIN,tpc.googlesyndication.com,Proxy
- DOMAIN-SUFFIX,googleadservices.com,Proxy
- DOMAIN-SUFFIX,doubleclick.net,Proxy
- DOMAIN-SUFFIX,googlesyndication.com,Proxy
- DOMAIN-SUFFIX,googletagservices.com,Proxy
- DOMAIN-SUFFIX,googletagmanager.com,Proxy

##- PROCESS-NAME,curl,DIRECT #匹配路由自身进程(curl直连)
##- DOMAIN-SUFFIX,google.com,Proxy #匹配域名后缀
##- DOMAIN-KEYWORD,google,Proxy #匹配域名关键字

注意:

rules:

下面这些规则不要加 ##

因为 ## 开头的是注释,不会生效。


十、保存后重启服务

规则保存后,建议重启 OpenClash 和 dnsmasq:

/etc/init.d/openclash restart
/etc/init.d/dnsmasq restart

然后浏览器强制刷新:

Ctrl + F5

也可以直接用无痕窗口测试,避免浏览器缓存和扩展影响判断。


十一、查看 OpenClash 连接日志

配置完以后,不要只看浏览器页面,最重要的是看 OpenClash 连接日志。

在连接日志里搜索:

googleadservices
www.googleadservices.com
doubleclick
googlesyndication
pagead2
adservice.google.com

正常情况下,这些域名应该命中你的代理策略组,比如:

Proxy

或者:

🚀 节点选择

不应该是:

REJECT
REJECT-DROP
Block
广告拦截
黑名单
DIRECT

如果你希望它走代理,但日志里显示 DIRECT,说明规则写错了,或者被更前面的规则命中了。

如果日志里显示 REJECT,说明它仍然被广告规则拦截,通常是因为你的规则没有放在最前面,或者有其他广告过滤模块提前处理了。


十二、还要检查 DNS 和浏览器插件

如果 OpenClash 日志里已经显示走代理,但浏览器还是打不开,就要继续检查电脑和浏览器侧。

常见影响项有:

AdGuard
uBlock Origin
AdBlock
油猴去广告脚本
浏览器安全 DNS
Windows hosts
杀毒软件网络防护
系统代理

尤其是浏览器插件,有时候即使路由器规则已经放行,插件仍然会把广告请求拦掉。

测试时建议:

  1. 开无痕模式;
  2. 临时禁用广告拦截插件;
  3. 关闭浏览器安全 DNS;
  4. 清理系统 DNS 缓存。

Windows 可以执行:

ipconfig /flushdns

然后重新打开网页测试。


十三、如果还是不生效,重点查这几个地方

如果规则写了还是不生效,可以按这个顺序排查:

1. 策略组名字是否正确

比如你写的是:

- DOMAIN,www.googleadservices.com,Proxy

但是你的配置里根本没有 Proxy 这个策略组,那规则自然不会按预期工作。

需要去配置文件里找:

proxy-groups:

看下面真实的 name 是什么。


2. 规则是否真的在最上方

广告相关规则一定要放在所有广告拦截规则前面。

如果前面已经有:

- GEOSITE,category-ads-all,REJECT
- RULE-SET,ads,REJECT

那后面再写代理规则就晚了。


3. 是否还有 DNS 广告过滤

有些人 OpenClash 之外还用了:

AdGuard Home
SmartDNS 去广告
anti-AD hosts
NextDNS
AdGuard DNS
浏览器安全 DNS

这些都会影响广告域名解析和连接。

如果 DNS 层已经把域名污染、拦截或返回了错误 IP,Clash 规则可能根本没有机会正常处理。


4. 浏览器扩展是否拦截

尤其是:

uBlock Origin
AdGuard
AdBlock
Tampermonkey 去广告脚本

这些插件会直接拦广告请求,导致你误以为是 OpenClash 的问题。


十四、我的最终理解

这次问题的核心不是“Google 广告不能用”,而是:

Google 广告展示链路和点击跳转链路被 OpenClash / DNS / 去广告规则错误处理了。

其中展示相关域名和点击相关域名不完全一样。

广告能显示,不代表点击链路一定正常。

我这里最关键的域名是:

www.googleadservices.com

如果这个域名直连会 ERR_CONNECTION_CLOSED,那它就应该走代理,而不是继续强制 DIRECT

同时也不建议粗暴地把整个:

google.com

全部代理或全部直连。

更稳妥的方式是只处理 Google Ads / AdSense / DoubleClick 相关域名。


十五、最后提醒

这篇文章只是记录 OpenClash 环境下 Google AdSense 广告请求被错误拦截时的排查过程。

不是教人刷广告,也不是建议点击自己的广告。

自己的广告不要乱点,否则可能触发 Google AdSense 的无效点击风控,严重的话会影响账号。

我们要解决的是网络链路问题,不是人为制造点击。


总结

如果你也遇到:

Google AdSense 广告能显示,但点击打不开
www.googleadservices.com ERR_CONNECTION_CLOSED
OpenClash 开启后广告请求失败

可以重点检查:

  1. 规则是不是写在 rules: 区域;
  2. 有没有误写到“绕过指定区域 IPv4 黑名单”;
  3. Clash 规则格式是否正确;
  4. 广告相关规则是否放在最前面;
  5. www.googleadservices.com 是否应该走代理;
  6. 策略组名称是否正确;
  7. 是否还有 DNS 或浏览器插件在拦截广告请求。

我这里最终的思路就是:

不要全局处理 google.com,只单独处理 Google Ads 相关域名。
广告点击跳转域名如果直连断开,就让它走代理。

这样既不会影响整个 Google 服务,也能更精准地解决 AdSense 广告展示和点击跳转的问题。

END

本文标题:OpenClash 下 Google AdSense 广告能显示但点击打不开,ERR\_CONNECTION\_CLOSED 的排查记录

本文链接:https://imsuk.cn/archives/296/

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

声明:转载请注明文章来源。

Last modification:June 2, 2026
请用钱砸我