我是一家云软件公司的软件工程师。通常情况下,我们有一个内部“开发”环境,我们将所有微服务的最新未发布版本部署到 AWS。
用户用来访问我们的开发环境的 Web URL 类似于app.dev.company-dev.com
.company-dev.com
只能在我们的企业 VPN 内解析。
在进行一些网络路由以允许流量从另一个 AWS VPC 到达此主机的过程中,我查找了app.dev.company-dev.com
的 IP 地址。当时我已连接到 VPN。nslookup
报告 IP 为240.x.y.z
,其中有少量不同的值随x.y.z
连续请求返回。我确信只是一点负载平衡;不用担心。
无论如何,我没有意识到240.*
这是我们管理的子网之一,所以我去了其中一个可以查找 IP 信息的网站。我的理论是,这个名字受 CloudFlare 保护,而且这个 IP 是他们的。所以我粘贴了 IP,网站返回错误,说这是一个无效的 IP。什么?试了一下我自己的公共 IP,它工作正常。
因此我去了另一个 IP 测试网站,它返回了一条更有帮助但同样让我感到惊讶的消息:
Addresses starting with 240 or a higher number have not been allocated and should not be used, apart from 255.255.255.255, which is used for "limited broadcast" on a local network.
此时,我了解到 E 类地址的“保留用于实验”性质。我预感到 IPv4 地址空间的紧缩在某些时候会导致一些变化,而这些变化并没有反映在我迄今为止尝试过的工具中,于是我继续尝试了几个 IP 信息网站,但没有。据我所知,E 类地址仍是保留的,大多数路由器只是丢弃任何以此为目的地的数据包,这解释了为什么尝试ping
或traceroute
该 IP 会超时。
但是,尽管如此:如果我在浏览器中加载该 IP(连接到 VPN 时),我会得到一个损坏但显然是我们的 Web 应用程序版本(我不希望它通过 IP 完全正常工作)。如果我加载主机名?它运行正常,一如既往。
这是怎么回事?这怎么可能?
答案1
大多数路由器只是丢弃任何以此为目的地的数据包,这也解释了为什么尝试 ping 或跟踪该 IP 会超时。
有些路由器会这样做1,但有些路由器会将其视为常规单播 IP 地址范围,并将其路由只要他们有路线。
尤其是 Linux,对于使用这些地址(例如,对于内部网络)没有硬编码限制。您可能无法 ping 该地址,因为它被分配给了不响应 ping 的主机;或者它被用作某些 NAT 方案的一部分(我怀疑是 NAT46)。
1(IPv6 吸取了教训,明确规定尚未分配的地址范围必须作为一般单播范围处理,而不能被隔离,以防止出现另一个“E 类”问题。)