假设我在局域网中有两台计算机,它们连接到路由器以共享公共 IP 地址。路由器将端口 22 转发给其中一台。如果第二台计算机使用其私有 IP 地址(例如)连接到它,这是否与使用其公共 IP 地址(例如)连接到它相同?ssh [email protected]
ssh [email protected]
我说的“相同”是指数据包的路由完全相同。我知道当使用公有 IP 地址连接时,服务器将把主机视为 71.177.17.58,而当使用私有 IP 地址连接时,服务器将把主机视为 192.168.1.2,但这是否意味着在前一种情况下数据包会流出 LAN?还是路由硬件首先解析最短路径(仅通过 LAN)?
答案1
路由完全不同。当您使用本地地址时,路由器只会来回传递数据包,而不会进行转换。如果您只是用交叉电缆将两台计算机连接在一起,这将起作用。您需要路由器才能使外部 IP 地址正常工作。
如果您使用外部地址,路由器将在转发数据包之前转换目的地。这称为 NAT(网络地址转换)。在这种情况下,您将使用 DNAT(目标 NAT)。除非路由器支持发夹 NAT,否则您将无法从本地网络内部连接到外部 IP 地址。当您使用 NAT 时,路由器需要做更多工作,并且连接速度可能会明显下降。
假设您的源计算机位于 192.168.2.8 且您的路由器位于 192.168.2.1,您将获得:
Computer 1 Computer 2
Source IP Destination IP Source IP Destiantion IP
192.168.2.8 -> 192.168.2.2 192.168.2.8 -> 192.168.2.2 Local address (Direct)
192.168.2.8 -> 71.177.17.58 192.168.2.1 -> 192.168.2.2 External Address (NAT)
Source IP Destination IP
Router
对于返回数据包,源 IP 地址和目标 IP 地址会被反转。
对于来自互联网的连接,使用的 NAT 类型取决于连接的来源地。
Local Computer Internet
Source IP Destination IP Source IP Destination IP
192.168.2.2 -> xxx.xxx.xxx.xxx 72.177.17.58 -> xxx.xxx.xxx.xxx Outgoing (SNAT)
xxx.xxx.xxx.xxx -> 192.168.2.2 xxx.xxx.xxx.xxx -> 72.177.17.58 Incoming (DNAT)
Source IP Destination IP
Router
答案2
除非存在某种客户端隔离,否则通过本地网络上的流量,两个主机将直接相互通信,根本不需要路由器。
至于访问公共 IP,这完全取决于路由器。有些路由器会允许这种流量并将其转换为 IP 内部流量。其他路由器则根本不允许。