vpn与代理工具共存
公司vpn原理
- 注册系统级 DNS resolver:抢断所有 DNS 查询,包括公网域名
- 接管指定网段,用作内部fake-ip转发
- 提供海外加速(claude域名会走到公司vpn的出口)
应用 → getaddrinfo("claude.ai")
→ DNS (127.0.0.1:53) 返回 xx.100.0.3 (公司内部 IP)
→ 路由 xx.100/14 → vpn utun
→ vpn服务端转发 → vpn 海外节点 → 公网
→ Cloudflare 看到 SG 接入 → colo=SIN
❌ Clash 全程没参与
解决方案
macOS 的 /etc/resolver/
应用 → getaddrinfo("claude.ai")
→ mDNSResponder 查 /etc/resolver/claude.ai
→ 命中!DNS 包发到 1.1.1.1
→ UDP 53 包路由进 Clash TUN
→ Clash dns-hijack:any:53 拦截
→ Clash 返回 fake-ip 198.18.0.x
→ 应用 TCP 到 198.18.0.x
→ Clash 反查 fake-ip → claude.ai
→ 命中规则 DomainSuffix,claude.ai → Anthropic 组
→ 美国住宅代理拨号
→ 出口 LAX 美国 ✅
完整步骤
- 创建
/etc/resolver/文件
sudo mkdir -p /etc/resolver
for d in anthropic.com claude.ai claudeusercontent.com openai.com chatgpt.com; do
echo -e "nameserver 1.1.1.1\nnameserver 8.8.8.8" | sudo tee /etc/resolver/$d > /dev/null
done
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
- 重启代理工具 & vpn工具
- 验证方法(重要:不要用 dig)
| 工具 | 走哪条路径 | 是否读 /etc/resolver/ |
|---|---|---|
dig |
libresolv → /etc/resolv.conf |
❌ 不读 |
host |
libresolv → /etc/resolv.conf |
❌ 不读 |
dscacheutil |
DirectoryServices | ✅ 读 |
curl / 浏览器 / Claude.app |
getaddrinfo() → mDNSResponder |
✅ 读 |
正确验证
# 1. DNS 拿到 Clash fake-ip
dscacheutil -q host -a name claude.ai
# 期望: ip_address: 198.18.0.x
# 2. 真实应用出口在美国
curl -s https://claude.ai/cdn-cgi/trace | grep -E "loc|colo"
# 期望: colo=LAX (或其他 US 节点) loc=US
# 3. 内网仍可达
curl -sI https://xxx.org
# 期望: HTTP 200
关键词: VPN