我想知道是否有某种工具可以让我通过特定接口路由给定程序的所有 IP 流量?
背景:我的机器有多个网络接口,连接到不同的网络。我已将消息传递从 Skype 切换到 Wire.com,但是 wire.com Windows 客户端无法通过所有接口工作(“您的连接不是私密的”)。现在我想通过一个特定接口路由与 wire.com 相关的所有 IP 流量。
我到目前为止尝试过的:
- 更改接口指标不是一种选择,因为这会破坏多个其他本地工具。出于测试目的,它适用于 Wire.com。
- 手动编辑路由表不起作用。Wire.com 客户端连接到一个主机列表。我将所有主机名解析为 IP 地址,并将其添加到路由表中,但 Wire.com 仍然无法工作。这不是一个选项,因为 wire.com 声称 IP 地址可能会发生变化。
- 我禁用了所有无法与 Wire.com 配合使用的网络接口,并启动了 Wire 客户端,使用 Wireshark 监控其流量。我将所有 IP 地址添加到 Windows 路由表 (route add dest-ip gateway),但当我重新启用其他接口时,连接却无法正常工作。
因此,我想知道是否存在某种工具可以自动将给定程序的流量路由到特定的网络接口?
答案1
简而言之,不是的。
路由基于 IP、端口和协议,而不是应用程序。它发生在系统级别,在操作系统的网络堆栈中。
唯一的理论让应用程序执行与其他所有操作不同的操作(就我所能想到的而言)的一种方法是暂停应用程序(或其他所有操作),然后根据某种轮询方式恢复。当应用程序恢复时,它会更改路由;当应用程序暂停时,它会将其改回原样。
但是,以这种方式暂停所有非应用程序进程是不可能的。(即使可以,我也无法想象系统或应用程序的性能会很差。)
您唯一的单一操作系统选项是通过 IP、端口或协议来区分应用程序的功能,或者在不同的网络配置文件之间切换一切在应用程序启动并终止时使用应用程序的网络信息。
另一种方法是在同一操作系统上的虚拟机中运行该应用程序,例如虚拟盒或来自VMware。
这样,虚拟机将拥有自己的网络堆栈,并且可以独立于其运行的主机操作系统进行配置。