网上很多攻略都说需要TUN模式才能让Antigravity正常访问网络。然而TUN这种系统全局设置代理,不仅会影响其他不需要代理的软件,还可能带来隐私和安全风险。
今天,我将分享一种在 Linux 系统中仅为特定进程启用代理的优雅解决方案,让你既能解决Antigravity的访问问题,又不干扰系统的正常网络环境。
1. 准备工作:科学上网的基础配置
首先,你需要准备好科学上网的环境。这通常有两种方式:
•HTTP 代理:如果你使用的是 HTTP 代理,可以在 Ubuntu 22.04 上通过 Squid 将其转换为本地固定代理,无需用户名密码即可使用•VLESS 节点:对于 VLESS 节点,推荐使用 Clash Verge 导入订阅,它会自动在本地创建 SOCKS5 和 HTTP 代理服务
2. 为什么需要进程级代理?
网上很多教程会建议使用 TUN 模式(或系统级全局代理),但这种方案存在明显缺陷:
•所有流量都会经过代理,包括系统更新、包管理器等•许多软件并不需要甚至不能通过代理访问•可能泄露本地服务的流量
在 Windows 系统中,可以使用 Proxifier 这类工具针对特定进程(如 Antigravity 和language_server_win_x64进程)启用代理。那么在 Linux 中,有没有类似的解决方案呢?
答案是肯定的,而且更加灵活和强大。
3. 核心工具介绍:cproxy 与 gost
我们的解决方案基于两个关键工具:cproxy 和 gost。
cproxy:进程级的网络代理
cproxy 是一个轻量级的代理工具,可以为特定进程创建独立的网络命名空间并配置代理。它支持多种代理模式,包括我们需要的 tproxy 模式。
gost:高效的代理转发器
gost 是一个功能强大的安全隧道工具,支持多种协议和转发模式。我们将用它来创建支持 tproxy 模式的上游代理服务。
4. 详细配置步骤
步骤 1:下载并准备工具
首先,下载 cproxy 和 gost 的最新版本:
# 创建工具目录mkdir -p ~/opt/cproxy ~/opt/gost# 下载 cproxy (请根据你的架构选择)wget https://github.com/things-go/cproxy/releases/latest/download/cproxy_linux_amd64.tar.gz -O ~/opt/cproxy/cproxy.tar.gztar -xzf ~/opt/cproxy/cproxy.tar.gz -C ~/opt/cproxy/# 下载 gostwget https://github.com/go-gost/gost/releases/latest/download/gost-linux-amd64.gz -O ~/opt/gost/gost.gzgunzip ~/opt/gost/gost.gzchmod +x ~/opt/gost/gost ~/opt/cproxy/cproxy
步骤 2:配置 gost 作为 tproxy 网关
由于 cproxy 的 tproxy 模式需要特殊的内核支持,我们需要先用 gost 创建一个支持 tproxy 的本地代理(在独立的terminal中执行):
# 启动 gost tproxy 服务sudo ~/opt/gost/gost -L "red://[::]:7908?tproxy=true" \ -F "socks5://127.0.0.1:7898?bypass=localhost,127.0.0.1,::1&name=remote"
这个命令做了几件事情:
•在 7908 端口创建了一个 tproxy 服务•将所有流量转发到 Clash Verge 的 SOCKS5 代理(7898这个端口是在Clash Verge中设置的)
•设置了本地地址的绕过规则,确保本地流量不走代理
步骤 3:创建代理环境并启动应用
这是最关键的一步,我们使用 cproxy 创建一个特殊的命令行环境,在这个环境中启动的所有进程都会自动走代理(在另外一个terminal窗口中执行):
sudo ~/opt/cproxy/cproxy \ --mode tproxy \ --port 7908 \ -- sudo -u $(whoami) bash -i
这个命令的解释:
1.sudo:cproxy 需要 root 权限来配置 tproxy 规则2.--mode tproxy:使用透明代理模式3.--port 7908:连接到我们之前启动的 gost 代理4.-- sudo -u $(whoami) bash -i:启动一个以当前用户身份运行的交互式 bash shell
重要提示:这里为什么要用两层 sudo?
•第一层 sudo 是让 cproxy 以 root 身份配置网络规则•第二层 sudo 是在配置好网络环境后,切换回普通用户身份,确保应用运行时具有正确的用户环境和权限
步骤 4:在代理环境中启动应用
当上面的命令执行成功后,你会进入一个新的 bash shell。在这个 shell 中:
# 测试网络是否走代理curl https://ipinfo.io/ip# 启动 Antigravity./antigravity# 或者启动其他需要代理的工具./antigravity_tools
在这个特殊环境中,只有通过这个 shell 启动的进程会走代理,系统的其他所有进程都保持原样,不受任何影响。
我们可以通过观察gost的输出日志看到Antigravity进程访问了哪些IP,从而确认相关进程确实走代理了。
5. 原理深度解析
这种方案的精妙之处在于它利用了 Linux 的网络命名空间(Network Namespace)技术:
1.网络隔离:cproxy 为特定进程创建了独立的网络命名空间2.透明代理:通过 iptables 规则,将这个命名空间中的所有流量重定向到代理3.环境保持:通过用户切换,保持了正常的用户环境变量和权限设置
这种方法相比全局代理的优势:
•精准控制:只为需要的应用提供代理•系统兼容:不影响系统更新、包管理器等其他服务•安全可靠:避免将敏感本地服务暴露给代理
总结
通过这种 cproxy + gost 的组合方案,我们实现了在 Linux 系统中为特定进程精准配置代理的目标。这种方法不仅适用于 Antigravity,也适用于其他需要特殊网络环境的应用。
相比全局代理的「一刀切」,这种方案更加优雅、安全且灵活。它充分展示了 Linux 系统的强大和灵活性,让我们能够精细控制每个应用的行为。
如果你有多个需要不同代理配置的应用,甚至可以创建多个独立的网络环境,让每个应用都有自己的网络空间。这种级别的控制,正是 Linux 系统的魅力所在。