我的理解是,在多宿主主机中,根据操作系统中的路由表,为任何连接选择源 IP 地址/NIC。此外,还可以设计应用程序以选择要用于由该应用程序产生的连接的源 IP。
但是一个应用程序(VPN)如何强制其他应用程序(任何)使用特定的接口/源 IP?
据我所知,有些应用程序(如 ForceBindIP)可以通过 dll 注入实现此目的。但大多数程序会阻止第三方 dll 注入。那么商业 VPN 应用程序如何实现应用程序级分割隧道?
ps 有一个类似的帖子问过,但没有答案 这些 VPN 如何实现每个应用程序的隧道传输?
答案1
商业实现通常使用内核网络驱动程序来实现这一点。您可以查看 Mullvad 等应用程序的源代码来了解它是如何实现的。
我正在开发一个 Windows WireGuard vpn 客户端,它使用内核网络驱动程序实现基于应用程序的分割隧道:https://github.com/TunnlTo/desktop-app