为什么我们必须对从外部世界访问的每个本地资源进行端口转发?为什么没有端口转发就无法做到这一点?

为什么我们必须对从外部世界访问的每个本地资源进行端口转发?为什么没有端口转发就无法做到这一点?

我想知道为什么我们必须对需要从外部世界访问的每个本地资源进行端口转发(外部世界指的是其他人的互联网连接,而不是我们的互联网连接)例如,要访问本地机器的 ssh,我们必须进行端口转发,以便我们可以从外部世界访问它。对于闭路电视摄像机也是如此,要从外部世界访问它们,我们必须进行端口转发。

我的问题是为什么我们必须进行端口转发?为什么没有它就做不到?

答案1

这肯定可以做到如果设备有自己的“公共”IP 地址,即每个客户端都知道如何访问的地址。许多在线服务就是如此运作的,如果服务器有专用 IP 地址,则根本不需要端口转发。

但在大多数情况下,在家庭(和小型企业)互联网连接中,ISP 仅提供为客户的整个网络分配一个公共 IPv4 地址,该地址分配给客户的主路由器。所有其他设备(计算机、打印机、闭路电视)只获得“私有”地址,这些地址只在同一网络内有意义。

因此在这种情况下,当路由器收到与其 IP 地址的连接时,它无法知道您要连接到哪个设备 - 它拥有的唯一信息是 TCP 端口号(服务),而这并未说明目标设备。您的 LAN 可能有 5 或 10 个不同的设备响应同一个端口 80(HTTP)。

因此需要“端口转发”来创建从 TCP 端口到内部 IP 地址的查找表(通常)。如果设备有公共 IP 地址而不是内部 IP 地址,则无需端口转发。

(更准确地说,端口转发是一种数据包重写该功能实际上会改变数据包内的目标地址和/或端口号,但这并没有说明为什么需要它。)


最近,许多 ISP 开始采用 IPv6,它拥有大量可用的 IP 地址 - 允许每个内部设备(即使是家庭 LAN 上的设备)拥有自己的公共可达地址。这又使得端口转发变得没有必要。

(尽管另一方面,您仍然需要添加允许传入连接的防火墙规则 - 端口转发会在大多数路由器上自动执行此操作,但现在您需要手动执行此操作,因此最终配置量相同......)

相关内容