代理软件如何实现真全局代理或对指定应用代理?

在 Xcode 中使用 SPM 解决依赖时,经常出现 Error while fetching remote repositoryhttps://github.com/xxx/xxx: An unknown error occurred. failed to connect to github.com: Operation timed out (-1),在国内访问 Github 是及其不稳定的,因此首先要解决的是让电脑访问 GitHub 速度加快,那当然是科学上网了(作为一名程序员,如果不会科学上网吗,那真的该反思了),再让 Xcode 走系统代理,即可解决此问题。

代理软件本人常用的代理软件如下:

  • Clash:一个 Go 语言开发的多平台代理客户端,Github
  • ClashX:Clash 的 Mac 图形客户端,Github
  • ClashX Pro: 是 Clash 的增强版,闭源,但也是免费。
  • ClashForAndroid:Clash 的 Android 图形客户端,Github
  • Clash for Windows:Clash 的 Windows/macOS/Linux 图形客户端,Github

代理软件默认只对浏览器代理,Terminal 可以通过 export 设置代理,但像 Xcode 这类应用是不支持直接设置代理的,那如何使这类软件遵循系统代理呢?

ClashX Pro

ClashX 和 ClashX Pro 都是免费软件,Pro 并不意味着要付费,ClashX 使用 Clash 开源内核,而 ClashX Pro 使用 Clash Premium 闭源内核,Pro 相比普通版功能更强大,ClashX 软件开发的定位就在于轻量所以支持的功能没有 ClashX Pro 多,比如增强模式、规则集等等。

ClashX Pro 的增强模式开启后就可以使非浏览器应用也走系统代理,也就是真正的全局代理。

普通模式就是 HTTP 、SOCKS 代理,增强模式是利用 TUN ,创建虚拟网卡改路由表优先走这块虚拟网卡接管所有流量。

开启增强模式后,在终端ping任何域名,都会返回一个虚假ip(fake ip)。此时无需担心,这是Clash的正常行为,目的就是为了接管系统流量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# gan @ ganzhixacstudio in ~/Documents/blog on git:master x [8:13:52] C:2
$ ping google.com
PING google.com (28.0.0.13): 56 data bytes
64 bytes from 28.0.0.13: icmp_seq=0 ttl=64 time=0.086 ms
...

# gan @ ganzhixacstudio in ~/Documents/blog on git:master x [8:14:04]
$ ping baidu.com
PING baidu.com (28.0.0.37): 56 data bytes
64 bytes from 28.0.0.37: icmp_seq=0 ttl=64 time=0.125 ms
...

# gan @ ganzhixacstudio in ~/Documents/blog on git:master x [8:26:26]
$ ping taobao.com
PING taobao.com (28.0.0.79): 56 data bytes
64 bytes from 28.0.0.79: icmp_seq=0 ttl=64 time=0.190 ms

只有使用了 Clash Premium 内核的工具才能使用增强模式(暂时不清楚开源的 foss 内核是否也有增强模式)。就 Mac客户端,ClashX 没有这个功能,非开源的 ClashX Pro 才有。

Windows 版本的 Clash for Windows 也有增强模式,叫 TUN 或者 TAP 模式。但是和 Mac 版的相比,CFW 不仅要安装依赖包,还需自行编辑配置文件才能让 TUN 模式生效,不如 ClashX Pro 方便。关于 CFW 如何启用 TUN/TAP 模式,请参考 官方文档

ClashX

ClashX 是没有增强模式的,但可以通过 Proxifier 来实现全局或指定程序的代理。

Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。

  1. 配置 Proxifier 的代理为 ClashX 的代理。

  2. 配置代理规则。

  3. 在终端执行如下命令,如果得到类似结果,则表明终端已经走代理了。同时可以看到 Proxifier 监控到了此请求。

    1
    2
    3
    4
    5
    6
    7
    $ curl google.com
    <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
    <TITLE>301 Moved</TITLE></HEAD><BODY>
    <H1>301 Moved</H1>
    The document has moved
    <A HREF="http://www.google.com/">here</A>.
    </BODY></HTML>

参考

代理软件如何实现真全局代理或对指定应用代理?

https://ganzhixiong.com/p/9c2252c9/

Author

干志雄

Posted on

2023-04-15

Updated on

2023-04-15

Licensed under

Comments