NAT后面的HTTP服务器

8
我正在尝试让一个(apache)服务器在多层NAT后从Internet访问。
限制条件:
1.避免中继。有一个公共服务器(我们称之为OldMan)用于登录/ stun,但其带宽太差以至于无法承载中继数据。
2.我没有权利手动配置NAT。
3.用户不必更改其浏览器或设备。(也就是说,在Android、iOS和任何PC上运行)
我尝试过UPnP,但它只适用于1层NAT。
我试图搜索几个月的NAT穿透解决方案,但没有成功。
我学习了STUN/TURN/ICE,并尝试使用pjsip(icedemo.exe + numb),然而,它的stun无法穿过2层NAT。
我尝试过Mist、Pwnat,但没有成功。而且据我所知,libjingle听起来像是制作Gtalk扩展的API...(?)
我还尝试过使用VPN/N2N来解决这个问题,但这会对公共服务器造成沉重负担。任何VPN客户端都需要服务器(OldMan服务器)将所有数据包中继到另一个服务器,不是吗?
有没有解决这个问题的方法?一个HTTP服务器在多层NAT后面。
顺便说一下,如果STUN/TURN/ICE起作用,我的想法如下,是否可能?
1.用户安装一个应用程序(例如:stun_browser_agent.exe)
2.用户在Chrome上输入以下地址:127.0.0.1:9999
3.Chrome连接到stun_browser_agent.exe守护进程
4.守护进程使用Stun协议连接到HTTP服务器
5.HTTP服务器上的守护进程(例如:stun_apache_agent.exe)接收所有消息并将其中继到Apache守护进程。
6.Apache回复所有http信息-->stun_apache_agent.exe-->stun_browser_agent.exe-->chrome 然后我们就不必修改浏览器和Apache了。
有没有可以参考实现这个的可用资源?
感谢您的耐心。

我猜所有的NAT都有公共IP地址,而STUN使用最接近对等方的NAT的IP地址。因此,在多层情况下,STUN应该可以工作。 - Prashant Borde
1
我很好奇你是否找到了解决这个问题的方法。我有同样的问题(打洞一个双层NAT)。虽然我可以选择中继,但我很想进行点对点通信。 - denniebee
因为我想在浏览器中通过普通的http访问网页。 - Smith.Lai
3个回答

0

像ngrok或remote.it这样的免费服务可以完成这项工作,正如其他人所报告的那样。

该服务建立了一个IP隧道到您网络外的服务器,这是您自己在足够的时间和资源下可以完成的事情。

设置ngrok只需要解压可执行文件,并提供授权令牌即可。

ngrok config add-authtoken somethingsomethingyouwish

建立一个IP隧道,将本地服务器暴露在互联网上。

ngrok http 80

0

您是否能够控制此服务器与“外部世界”之间的所有NAT设备?

一种方法是在您的互联网网关路由器和服务器之间建立一个SSH隧道。

SSH隧道将从您的服务器启动,并连接到运行在您的互联网网关路由器上的sshd。使用SSH的端口转发功能将互联网网关上的80端口转发回您服务器上运行Apache的端口。

另一种方法是在公共互联网上的任何其他可访问服务器上设置sshd(或任何其他隧道产品)。从您的服务器初始化连接并使用该连接将来自公共服务器上80端口的流量转发到您的服务器。

方法基本相同:您需要从服务器启动隧道设置,并使用该连接将公共服务器上的流量转发回您的服务器。


请原谅我。 这是否意味着我需要获得在这些“互联网网关”或“任何其他服务器”上设置sshd的访问权限? 我之前想使用VPN,但这些隧道技术需要中继服务器,是吗? 我实验室里有一台带有公共IP的计算机,用于注册或记录某些内容...但速度太慢,无法成为中继或代理服务器。 - Smith.Lai
你基本上有三种可能的方法来使这个工作:
  1. 一个可以作为网关/中继/代理的互联网服务器(这是我所描述的方法)。
  2. 使用一些工具来查看是否可以建立NAT穿透,参见http://en.wikipedia.org/wiki/NAT_traversal,但听起来你已经尝试过了,没有成功。
  3. 在你和公共互联网之间的NAT设备中手动设置端口转发。但你告诉我们你没有权限这样做。 因此,如果是这种情况,你唯一剩下的选择就是1:在公共互联网上拥有一个网关/代理/中继服务器。
- Colin 't Hart
  1. 一个可以作为网关/中继/代理的互联网服务器(这是我所描述的方法)。请问,这是否意味着有一些“免费资源”可供使用?还是我需要建立另一个网关/中继/代理服务器?正如我所描述的“限制1”,我拥有的所有公共服务器都是旧机器,带宽很差,太慢了,无法成为中继服务器......这就是为什么我尝试使用STUN(TURN / ICE用于未来扩展)的原因。
- Smith.Lai

-1

从拥有互联网连接的NAT设备开始,配置每个NAT设备以端口转发到下一个NAT设备,最内层的NAT将转发到服务器。

更新:“2.我没有权利手动配置NAT。”我不明白您如何拥有在这些NAT设备后面运行服务器的权利,但没有权利在其中配置端口转发。毫无疑问,运行服务器的权利包括运行服务器所需的权利。


谢谢回复...但是NAT设备不能由我们修改,这就是为什么我尝试使用软件解决这个问题的原因。 - Smith.Lai
1
如果您无法修改NAT设备,则唯一的解决方案是在Internet侧有一个设备代表您接受连接并将其代理给您。您无法从内部进行此操作。(而且,最有可能的是,如果我知道您的全部要求,我会完全推荐其他解决方案,例如在其他地方托管网站。)很难想象您如何陷入这种情况,即被要求执行此操作但没有获得执行此操作的能力。 - David Schwartz
@user1553917:做某件事的权利必然包括做任何必要的事情来完成那件事的权利。如果你有使用我的车的权利,那么你就有把钥匙插入点火开关的权利,因为这是使用汽车所必需的。如果你有运行服务器的权利,并且修改NAT是运行服务器所必需的,那么你就有修改NAT的权利。如果你说你有在网络上运行服务器的权利,而我说你不能在不修改NAT的情况下这样做,我们两个都是正确的,那么你就有修改NAT设备的权利。这是简单的逻辑。 - David Schwartz
宿舍为每个租户提供一个位于2个NAT后面的本地IP(192.168.x.x)。他们不期望任何租户成为管理员来修改默认的NAT设置。当然,这些服务器(包括FTP、HTTP等)仅用于个人使用。房东不会告诉你设备的密码。对我糟糕的英语表示抱歉,希望没有让您感到困惑。 - Smith.Lai
@Smith.Lai - 除非你能在NAT网络之外部署服务器,否则你将无法获得传入连接。但是如果你可以在网络之外部署一个盒子,为什么不把HTTP服务器放在那里呢?托管的Web服务器非常便宜,而Amazon EC2上的虚拟机也很便宜。在那里运行你的Web服务器和网站。 - selbie
显示剩余2条评论

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