Node.js - 通过编程方式连接VPN或通过VPN路由HTTP请求

18

这可能有点难度。但是在Node.js中,我想通过VPN服务器进行HTTP请求(例如,使用npm上的request包),我已经设置了VPN服务器(使用HideMyAss),并且可以在操作系统级别连接到它,方法是在操作系统的网络设置部分进行配置。但我想使用一个Nodejs程序编程地连接到它,并将使用该程序进行的任何HTTP请求路由到该VPN。

这可以通过代理完成,例如:

var request = require('request');

var url = 'https://www.google.com';
var proxy = 'http://username:password@usa.proxyservice.com:1234';

request.get({ url: url, proxy: proxy }, function(err, res, body) {

});

...但是我希望使用VPN做类似的事情。这是否可能?谢谢!


嘿,你能找到解决方案吗? - A.R Naseef
你想在这里查看 https://serverfault.com/questions/992624/vpn-client-doesnt-have-internet-connection - The Onin
1个回答

17

通常情况下,VPN会通过一个特定的通道隧道化第二层或第三层网络数据包。从应用层的角度来看,您无需关心更低层次,因为操作系统将负责路由网络数据包。例如,OpenVPN创建了一个虚拟接口(TUNTAP)并通过安全隧道将所有操作系统发送到这些接口的数据包通道化。选择使用哪个接口是根据路由表进行的。与 VPN 相比,Web 代理服务器要简单得多,因为它只接受 HTTP 请求(应用层)并转发它们。

实际上,这取决于您使用的 VPN 的类型。假设您正在使用 OpenVPN 并且它为您创建了虚拟接口(如 tun0),该接口具有自己的 IP 地址(例如 10.124.1.6)和可能(取决于服务器的拓扑)一个 P2P 地址(例如 10.124.1.5)。您可以使用localAdress指令使 Node 通过特定的(本地)网络接口绑定网络连接:

var options = {
  host: "example.com",
  path: "/path/to/web/service",
  localAddress: '10.124.1.6', // IP address network interface
};
http.request(options);

假设这是有选择地通过VPN接口进行隧道传输特定请求的解决方案。 无论是否有效,我不能保证。但我认为它会让你开始思考一些想法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接