如何通过 VPN 仅路由某些 http/s 请求

如何通过 VPN 仅路由某些 http/s 请求

我正在尝试创建一个 VPN 服务,该服务能够仅通过 VPN 过滤某些 HTTP/S 网络流量,而其他与我的动态过滤条件不匹配的流量应通过默认网关发送。

我知道如果我使用 OpenVPN,我可以通过 VPN 路由某些 IP 的流量(第 2 层和第 3 层),而其他 IP 则通过默认网关路由。但我需要像 HTTP 代理的工作方式一样过滤流量。我实际上正在尝试创建自己的Web 代理服务器,但它是在系统级别而不是浏览器级别工作的。因此,即使用户创建自己的浏览器客户端并尝试访问某些 URL,该流量也可以通过 VPN 路由。这就是为什么我想创建一个能够捕获来自主机的所有流量的 VPN,而不是简单的 HTTP 代理。但现在的问题是如何通过检查 HTTP GET/POST 请求来过滤我需要通过 VPN 发送的流量。因为要做到这一点,VPN 需要访问应用程序层数据,而不是第 2 层或第 3 层。

因此,如果我总结一下我的需求,我正在尝试开发我自己的混合体Web 代理 + VPN (TUN/TAP)设备。

  1. 用户在其机器上安装的应用程序/服务应该能够拦截来自主机的所有流量。
  2. 它应该能够检查来自任何浏览器或自定义客户端的 HTTP/HTTPS 请求,并且只有当这些请求与某些 URL 名称匹配(即 www.facebook.com/*、www.linkedin.com/*、*.js、*.swf)时,流量才会通过 VPN 路由。
  3. 如果请求不符合匹配条件,则请求将通过用户的默认互联网网关发送。
  4. URL 匹配条件可以有很多,并且可以随时更改,因此它们不是硬编码的。

关于如何实现这一点的任何好的提示(代码、我可以编写的 OpenVPN 插件文档等),或者如果我尝试以错误的方式执行此操作的建议,都将不胜感激。

相关内容