为什么代理服务器可以访问我的服务器,而我不能?

所以我有一台服务器。 它正在运行。 它可以被代理服务器访问。 问题是 – 服务器可以通过其全球名称访问本地networking,不能通过该名称访问内部…

我使用Windows NAT Traversal API(UPnP)使我的服务器可以远离本地networking…

如何使它在本地networking中的计算机可用acsess我的服务器使用不localIP地址?

长篇故事与细节:

在本地机器上,我有一个服务器( VLC例如从我的webCamera广播现场video数据到一些套接字),我可以在127.0.0.1:5281(回送)和我的本地networking上访问它(我有ADSL路由器4个以太网端口+ wify)到192.168.1.13:5281 – 我的地址在路由器创build的本地networking上。

我使用免费的开源程序像这样转发(绑定)我的端口4773使用UPnP我的外部IP地址97.132.48.111(例如)作为端口33333所以现在任何一个(互联网用户,代理服务器等)有权访问直播到像97.132.48.111:33333的url

但是我或者我的本地networking用户(我的地址是192.168.1.13)不能使用97.132.48.111:33333访问我的stream,只能使用192.168.1.13:5281

我的问题是为什么我无法使用全局地址从我的stream中获取数据,对于我和我本地networking中的人员使用全局地址获取stream数据是否可能(以及如何)?

所以正如我所说的,我使用了一个使用协议请求(UPnP)来转发端口的程序。 我可以configuration(至less在理论上)我的路由器使用像UPnP这样的协议,使我的路由器\ nat聪明? 有没有这样的协议?

所以对我来说主要的一点是要尽可能使用使用开放协议的程序,因为我是一个程序员,我的观点是创build一个程序,让ADSL用户打开他们的服务器,并以我描述的方式我的问题 – 由全球地址(这btw可以是临时的 – 我有一个临时的)=)

至于现在我在我的程序中使用UPnP库来转发端口。 现在我需要一些协议来configuration路由器,使其更智能。 有人知道吗?

不幸的是,你的问题缺乏细节,但是如果我查看一下我的水晶球,就可以知道你的networking上有一个networking服务器托pipe在NAT中,并且你有DNS服务器的公共IP地址。

您可能需要设置设置分割视图DNS。 这意味着您需要为内部IP提供服务,以响应NAT内部主机的DNS请求,并将外部地址发送给外部主机。

Zoredache有正确的想法。 问题在于NAT如何工作。 没有做任何特别的事情,并且使用一个不智能的NAT网关,这就是你的数据包所发生的事情。

  1. 内部用户(位于192.168.1.30)连接到93.100.45.201:33333。 它发送的SYN数据包。
  2. NAT网关将该连接转发到192.168.1.13:4773。
  3. 在192.168.1.13:4773服务器看到192.168.1.30发送一个SYN数据包到4773为了启动TCP对话。 它用SYN / ACK回复到192.168.1.30。
  4. 内部用户(192.168.1.30)看到来自192.168.1.13的SYN / ACK数据包,并将其放在地板上。 它期望来自93.100.45.201的SYN / ACK。
  5. 经过3和9秒左右(192.168.1.13)192.168.1.13重新传输SYN / ACK,这192.168.1.30忠实地落在地板上,因为它仍然在等待93.100.45.201重新回到它。

你有两个select。 第一个是像Zoredache指出的那样,创build一个水平分割的DNS(内部用户看到一组DNS项,外部用户看到另一个)。 这样,同一个名字就可以根据你的位置指向两个不同的IP地址。

解决这个问题的第二种方法是使用足够聪明的NAT网关来识别这个特定的路由。 而不是盲目转发192.168.1.30的数据包,它会重写它,所以源是网关本身。 这被称为Source-NAT(根据谁在卖盒子可以被称为许多其他东西)。 这反转了NAT,所以它是被重写的源,而不是目的地。

第一种方法是build立最便宜的,因为你可以在内部运行你自己的DNS服务器,其余的只是configuration各种types的变化。 第二个将花费金钱,但应该只是工作,如果你到位。