【问题标题】:Node.js - Programmatically Connect to a VPN or route HTTP Requests via VPNNode.js - 以编程方式连接到 VPN 或通过 VPN 路由 HTTP 请求
【发布时间】:2015-11-09 23:57:31
【问题描述】:

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

这可以使用代理来完成,例如:

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 做类似的事情。这甚至可能吗?谢谢!

【问题讨论】:

标签: node.js proxy network-programming vpn


【解决方案1】:

VPN(通常)通过特定通道对第 2 层或第 3 层网络数据包进行隧道传输。从应用层的角度来看,您不必关心较低级别,因为路由网络包由操作系统负责。例如,OpenVPN 创建了一个TUN or TAP 虚拟接口,并将操作系统发送的所有数据包通过安全隧道引导到这些接口。使用哪个接口的决定取决于路由表。 Web 代理服务器比 VPN 简单得多,因为它只接受 HTTP 请求(应用层)并中继它们。

这实际上取决于您使用的是哪种 VPN。假设您正在使用 OpenVPN,它会为您创建一个虚拟接口(例如 tun0),该接口有自己的 IP 地址(例如 10.124.1.6),并且可能(取决于服务器的 topology)一个 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 接口选择性地传输特定请求的解决方案。 这是否有效,我无法保证。但我想说这会让你开始一些想法。

【讨论】:

    猜你喜欢
    • 2015-10-21
    • 2011-10-27
    • 2010-10-26
    • 2014-09-18
    • 2013-01-20
    • 2012-07-30
    • 2011-08-28
    • 2012-04-22
    • 2023-03-08
    相关资源
    最近更新 更多