是否可以在 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