背景

Chrome 浏览器的内置翻译功能需要直连 Google 服务。只有在开启 Clash 的系统代理或 TUN 模式(全局代理)时,翻译功能才能正常工作。

但我的日常习惯是不开系统代理或 TUN 模式,避免影响其他软件的网络行为。浏览器流量通过 ZeroOmega 插件经 SOCKS5 代理转发到 Clash。

问题在于:ZeroOmega 只能代理网页内容请求,Chrome 内置的翻译请求不经过插件,因此无法使用翻译功能。

解决方案参考:SwitchyOmega/issues/264

原理

核心思路分两步:

  1. hosts 劫持:将 Google 翻译域名指向本地回环地址,让翻译请求发往本机
  2. Clash 隧道转发:Clash 监听本地对应端口,将收到的流量通过代理转发到真正的目标服务器

基础方案

步骤 1:修改 hosts

1
2
127.0.0.1  translate.google.com
127.0.0.1 translate.googleapis.com

步骤 2:配置 Clash 隧道

在 Clash 配置文件中添加:

1
2
tunnels:
- tcp,127.0.0.1:443,translate.googleapis.com:443,PROXY

PROXY 对应一个 proxy-groups 的名称,此处我的配置中用它作为默认策略组,未做细分分流:

1
2
3
4
5
proxy-groups:
-
name: PROXY
type: select
include-all-proxies: true

优化方案

基础方案有一个隐患:127.0.0.1:443 可能与本地开发的 HTTPS 服务(如 localhost:443)冲突。

IPv4 环回地址范围是 127.0.0.0 ~ 127.255.255.255,改用 127.0.0.2 即可避开。

步骤 1:修改 hosts

1
2
127.0.0.2  translate.google.com
127.0.0.2 translate.googleapis.com

步骤 2:配置 Clash 隧道

1
2
tunnels:
- tcp,127.0.0.2:443,translate.googleapis.com:443,PROXY

proxy-groups 配置与基础方案相同,只需将监听地址从 127.0.0.1 换成 127.0.0.2。完整配置参考:

1
2
3
4
5
6
7
8
proxy-groups:
-
name: PROXY
type: select
include-all-proxies: true

tunnels:
- tcp,127.0.0.2:443,translate.googleapis.com:443,PROXY

配置截图