理论上如何实现
我将提供一个有点不寻常的答案,因为我注意到到目前为止(出于某种原因)还没有想到这种解决这个问题的特殊“方法”。
如果你想真的让所有应用无一例外地通过你的代理发送互联网流量,你将不得不使用一种称为 TUN/TAP 设备的特殊技术。
简而言之,这些是特殊的驱动程序,在安装时对系统来说就像一个网络适配器(就像您本地的 Ethernet 或 Wireless card),但实际上它们的构建方式是为了易于从软件级别控制。
基本上,当您在系统上安装此类驱动程序时,系统现在将该设备视为功能齐全的网络适配器。因此,如果您现在将此网络适配器设置为默认网关,所有应用程序(不知道或无法阻止它)将自动通过它,就像所有应用程序通过通用 Wireless Adapter / Ethernet .
实现此目的的实用方法/如何将其与代理一起使用?
现在您已经对通过 TAP/TUN 设备重定向系统流量的含义有了基本的了解,有几种方法可以做到这一点。
在我开始之前,我真的建议即使你偏离了这里建议的资源,你也坚持使用 OpenVPN 的开源 TAP 设备,因为它已经过广泛的测试并确认可以在许多系统上工作,并且被广泛使用现在(https://openvpn.net/tuntap 提供了一些基础知识,我相信您应该会发现它嵌入在任何最新版本的 OpenVPN 中,您需要的唯一文件是已编译的驱动程序 (.inf),您不需要拥有全部安装 OpenVPN 以使用它们)。
当考虑使用 SOCKS 代理作为 TAP 设备的端点时,立即想到的项目是 badvpn/tun2socks。该项目基本上完全按照此处概述的方式进行,因此我绝对建议您阅读源代码,或者将其用作独立实用程序(如果您需要一些使用帮助,我建议您查看this wiki page。
如果使用这种方法有什么缺点?
首先,说到兼容性、性能和bug,使用这种方法完全没有缺点,如果有什么比系统提供的方法更可靠、更容易使用的话。
此时我能看到的唯一两个缺点是:
- 您必须小心确保您使用的任何代理/中间主机至少能够处理大部分系统流量,因为如果应用程序发送不兼容的互联网流量,它仍将通过 TAP 重定向设备(这就是它的目的)。
- 代码库可能比其他情况大
另一种“不干净”的方式,尤其是对 Firefox 而言
如果您只想为 Firefox 设置此代理,有几种不干净的方法:For instance, via the command line。然而(在我看来)这是一种非常廉价和肮脏的实现方式,因为它不提供任何兼容性(基本上是一种 hack)。
结论
虽然实现这可能需要一段时间,而且代码库可能很大:
实际上不可能通过任何其他方式达到与 VPN 通过 OpenVPN 服务器隧道传输您机器的全部流量时所达到的效果相同的效果。
如果您想实现这种行为,建议您使用上述方法,因为它比“替代”方法更简洁(例如,通过在软件级别拦截流量)