如何从 NAT 后面的私有 IP ping 到公共 IP

如何从 NAT 后面的私有 IP ping 到公共 IP

最近我意识到 ICMP 不包含任何端口,所以我尝试从无线连接的笔记本电脑 Ping 到公共 IP(当然成功了!)。

在典型配置中,本地网络使用指定的“私有”IP 地址子网之一(RFC 1918)。该网络上的路由器在该地址空间中有一个私有地址。路由器还通过互联网服务提供商分配的“公共”地址连接到互联网。当流量从本地网络传输到互联网时,每个数据包中的源地址都会从私有地址即时转换为公共地址。路由器会跟踪有关每个活动连接的基本数据(特别是目标地址和端口)。

我的路由器是否有专门用于存放 ICMP 数据包的空间?

ICMP 报头

它只有 4 个字段:“类型”、“代码”、“校验和”和“数据”。仅添加额外数据似乎是可行的解决方案。请在回答时提供来源,因为我找不到它们。感谢您的时间:)

答案1

这里缺少的信息是标识符(又名查询 ID),位于 8 字节 ICMP 报头中 - 请参阅https://en.wikipedia.org/wiki/Ping_(networking_utility)#Echo_request当多个内部主机同时 ping 同一个外部主机时,它们很可能会使用不同的查询 ID 进行 ping。

它用于代替路由器 NAT 表中的 TCP/UDP 端口号,以便返回的回复可以与初始请求匹配并发送回正确的内部主机(以及基于外部全局地址的通常匹配)。

也可以看看https://www.rfc-editor.org/rfc/rfc5508#section-3.1

答案2

路由器将您的内部地址转换为其外部地址。数据包以外部地址作为 ICMP 数据包中的源地址发送到 Internet。

响应从另一个系统发送回路由器的外部地址。数据包再次被重写,以将其转发到内部地址。

根据您的路由器,尤其是个人/家庭与企业/企业的路由器,它可以使用多种方法来跟踪哪个内部系统发送了原始 ICMP ping。它可以只保留出站 ICMP 数据包列表并进行匹配,它可以使用多个外部地址,每个内部地址一个,等等。

查看路由器的“状态 NAT”以获取更多详细信息。

相关内容