如何通过 cURL 连接到 OpenVPN 服务器?

如何通过 cURL 连接到 OpenVPN 服务器?

是否可以在 cURL 命令中使用 OpenVPN 服务器作为代理?

我不想将我的整个计算机连接到 OpenVPN。相反,我想在单个 cURL 命令中使用它。

就像是

curl -x http://user:password@OpenVPN:port url

但它不起作用并返回

curl: (56) Recv failure: Connection reset by peer

我的操作系统是 Ubuntu 18.04

答案1

不,不是的。

首先,该命令不起作用,因为您告诉 cURL 使用与服务器完全不同的协议。OpenVPN 和http://完全不同 – 服务器无法识别 cURL 发送的任何请求,并且 cURL 无法理解任何响应。

其次,它无法工作,因为 cURL 不支持任何 VPN 协议。无法正确指定 cURL 应该使用 OpenVPN 协议或任何其他 VPN 协议,因为这不在程序中。

(理论上,将其添加到 cURL 中并非不可能,但大规模地与“代理”协议相比,复杂性有所增加,因为 cURL 除了需要了解 VPN 本身之外,还需要学习 TCP 和 IP - 即,它需要复制操作系统中的大部分网络堆栈。)


如果您具有系统的 root 访问权限,则可以使用各种机制来限制 OpenVPN 连接的用途:

  • 常规 IP 路由表,根据目标 IP 地址选择 VPN 使用;
  • 策略路由,根据源 IP 地址选择连接(例如,curl --interface tun0使用 VPN 但常规路由curl不会使用);
  • 防火墙规则,根据所使用的协议和端口甚至用户ID选择连接;
  • 网络命名空间,创建两个不同的“世界”,其中某些进程仅有的VPN,而所有其他进程只能看到原始连接。

例如,如果您希望将 VPN 使用限制为 10.0.0.0/8(或反之亦然,将该网络排除在 VPN 之外),只需使用 OpenVPN 的route选项即可轻松实现。例如,要将 VPN 限制为仅特定网络:

route 10.0.0.0 255.0.0.0 vpn_gateway
route-nopull

并使用 VPN 进行其他所有操作时排除特定网络:

route 10.0.0.0 255.0.0.0 net_gateway

相关内容