为什么我无法使用外部 IP 地址连接到我网络上的计算机?

为什么我无法使用外部 IP 地址连接到我网络上的计算机?

可能重复:
通过外部 IP 连接到我自己的网络

我家的网络由 ADSL 线路提供服务。调制解调器处于桥接模式。路由器执行 PPPoE。

三台计算机连接到路由器:两台有线 Windows 7 机顶盒和一台通过 wifi 连接的 Ubuntu Linux 机顶盒。

计算机承载着各种形式的服务,包括 FTP 和 HTTP。路由器具有从相关端口到计算机的保留 IP 地址的端口转发映射。

如果我尝试连接到网络内部的服务器(例如ftp://67.xx.xxx.xxx从网络内部),请求就会超时。但是,如果我使用内部映射地址(例如)进行连接,则ftp://192.168.0.100一切正常。

这对于设置软件来说很麻烦,尤其是在需要能够从任何地方打电话回家的笔记本电脑上,而我没有足够的网络专业知识来了解为什么发生这种情况甚至不知道是否可以解决。

编辑:需要注意的是,服务器可以在网络外部访问 - 比如,在街对面的星巴克 - 使用 ISP 提供的地址和适当的端口就可以完全访问。

答案1

端口转发仅重写目标地址。这对于外部来源非常有效。以下是它对内部来源不起作用的原因:

  1. 您尝试连接到外部地址。您形成一个包含内部源和外部目标的数据包。

  2. 数据包采用您的默认路由到达您的路由器。

  3. 路由器端口转发数据包,将目标地址更改为服务器的内部地址。

  4. 服务器接收具有内部源地址(发起机器)和内部目标地址(服务器)的数据包。

  5. 服务器以内部源地址和内部目标地址形成应答数据包。

  6. 由于目的地是本地,因此此数据包不会采用服务器的默认路由。它直接发往原始机器。

  7. 发起机器收到带有内部源地址的回复数据包,但是它期望收到带有外部源地址(它试图联系的机器)的回复。

  8. 发起机器忽略该数据包,连接不起作用。

为了使其工作,您需要“发夹 NAT”,其中源地址和目标地址都被重写,以便来自服务器的回复数据包被直接送回路由器而不是源。

相关内容