如何使用 ngrok 隧道将流量转发到本地托管的 VM 机器的端口?

Posted

技术标签:

【中文标题】如何使用 ngrok 隧道将流量转发到本地托管的 VM 机器的端口?【英文标题】:How to use ngrok to tunnel a port that forwards the traffic to a VM machine hosted locally? 【发布时间】:2019-03-17 08:15:23 【问题描述】:

我可以通过 ip 12.51.50.142 访问我的 VM 的服务器,但我只能 ngrok localhost 端口。有没有办法可以使用 ngrok 并将流量重定向到我的 VM 的服务器?我在 osx 上,但我认为执行此操作的工具对于 mac 和 linux 是相同的。

【问题讨论】:

【参考方案1】:

我正在使用 VMWare 运行虚拟机,在所述虚拟机中运行 Ubuntu(在 win 10 下)。该虚拟机在本地 IP 192.168.45.128 上运行,并在端口 80 上运行一个网络服务器,这显然无法访问互联网。我按如下方式使用 ngrok(来自 win 10,而不是来自 VM 内部)来获取一个地址,该地址允许我从 Internet 访问此 Web 服务器:ngrok http 192.168.45.128:80

您可能必须先配置 VMware 的网络设置 - 应该有一个选项来使用本地 IP(如我的,如上所述)或 NAT(实际上对我来说不能正常工作)。

你可能想试试:ngrok http 12.51.50.142:80

希望对您有所帮助。

【讨论】:

【参考方案2】:

我相信名为port forwarding 的技术是您正在寻找的东西。 对于 Web 项目,您必须转发端口 80 和 443(从您的 ngrok 发布的机器到您的 vm)。 这是 ngrok 自己不会做的事情,因为他无法单独访问您的虚拟机。 问题是设置因使用的平台而异,所以没有具体细节,我不能提出任何具体的解决方案。 对于 Linux,这通常是通过 iptables 实现的,但我看到了很多其他解决方案。

在 OSX 上,以下问题应该有效: https://apple.stackexchange.com/questions/230300/what-is-the-modern-way-to-do-port-forwarding-on-el-capitan-forward-port-80-to

【讨论】:

它不是一个简单的端口转发,不是吗? b/c 我需要将端口 80 转发到 12.51.50.142:8080,所以它几乎是一个重定向。 它仍然是端口转发 ;) 默认情况下,最简单的端口当然是相同的,所以 80 -> 80,但是有端口转发变化(我相信这称为端口重定向),例如 80 - > 8080,但您仍将流量从一个端口转发到另一个端口,因此一般机制保持不变。 请在问题中添加操作系统(如果是 linux,则添加发行版),我会为您找到一些东西

以上是关于如何使用 ngrok 隧道将流量转发到本地托管的 VM 机器的端口?的主要内容,如果未能解决你的问题,请参考以下文章

无法将 dialogflow webhook 链接到 ngrok 隧道

如何将流量转发到谷歌云运行中的特定网址?

Git over ngrok 隧道转发

通过 SSH SOCKS 隧道将流量转发到特定 IP

ngrok 从 Windows 7 命令行杀死隧道

启动 ngrok HTTP 隧道,但只转发到 HTTP 或 HTTPS,而不是两者