私有与保留 IP 地址段

这些地址块永远不会出现在公共互联网上,还有一些看起来像公网地址,其实并不是。

简要说明

IPv4 中有三个地址块保留给私有网络,一个保留给运营商级 NAT,另有几个小地址块分别用于环回、链路本地通信、文档示例和组播。它们都无法从公共互联网访问,而这正是它们的用处所在。

地址块地址数量RFC常见场景
10.0.0.0/816,777,2161918办公网络、VPN、云 VPC
172.16.0.0/121,048,5761918Docker 默认网桥为 172.17.0.0/16,就在此块内
192.168.0.0/1665,5361918家用路由器,常见的 192.168.1.x
100.64.0.0/104,194,3046598ISP 与用户之间的运营商级 NAT
127.0.0.0/816,777,2161122环回;127.0.0.1 即 localhost
169.254.0.0/1665,5363927DHCP 失败时自动分配
192.0.2.0/24、198.51.100.0/24、203.0.113.0/247685737文档示例;从不路由
224.0.0.0/4268,435,4565771组播组
240.0.0.0/4268,435,4561112保留供未来使用

RFC 1918 为何存在

IPv4 约有 43 亿个地址,这些地址在 2010 年代于注册机构层面耗尽。RFC 1918 让每个组织都能在路由器后面重复使用同样的三个地址块,由路由器把私有地址转换为公网地址,从而推迟了耗尽。带有私有源地址或目的地址的数据包会被互联网路由器丢弃,因此同一个 192.168.1.10 可以存在于数百万个家庭网络中而不冲突。

代价是,私有地址只能标识其所在网络内的设备。Web 服务器无法通过私有地址区分两位访客,因为它根本看不到这些地址:它看到的是路由器的公网地址。

三个私有地址块不能互换

它们的区别只在于大小,而大小决定了使用习惯:

运营商级 NAT 不属于 RFC 1918

100.64.0.0/10 于 2012 年被保留,用于 ISP 在无法为每位用户分配公网 IPv4 地址时部署的 NAT 层。它的行为类似私有地址空间,但不属于三个 RFC 1918 地址块之一。这一区别在日志中很重要:100.64.x.x 的源地址意味着请求经过了 ISP 的 NAT,因此该地址不能用来识别用户,对它做地理位置查询返回的是 ISP,而不是用户。

环回与链路本地

127.0.0.0/8 是环回地址块。发往其中任何地址的流量都不会离开本机。127.0.0.1 是惯用名称;127.0.0.53 被一些本地 DNS 解析器使用。仅绑定到 127.0.0.1 的服务无法从其他主机访问,这是安全特性,不是缺陷。

169.254.0.0/16 是链路本地地址。当设备无法从 DHCP 获取地址时,它会从此块中选择一个地址并在本地链路上通告。该地址仅在该链路上有效。在机器上看到 169.254.x.x 是一个诊断信号:DHCP 请求没有得到响应。

文档地址块

192.0.2.0/24、198.51.100.0/24 和 203.0.113.0/24 的存在,是为了让示例、截图和测试可以使用看起来真实、但不指向任何人服务器的地址。它们从不被路由。IPv6 中对应的概念是 2001:db8::/32。如果某个教程使用了属于真实公司的、看起来像公网的地址,那它是个糟糕的教程。

IPv6 私有地址空间

IPv6 没有与 RFC 1918 历史相同的对应物,但有两个保持本地的地址范围:

第三个范围 ::ffff:0:0/96 完全不是私有地址:它是用 IPv6 表示法书写的 IPv4 地址。值得认识它,以免被误认为是原生 IPv6 地址。

实际检查地址段

查询页面会显示你的连接所呈现的公网地址。如果该地址落在上述某个私有或保留地址块中,页面会说明这一点并跳过位置查询,因为不存在可查找的公共位置。如需快速手动检查,请记住:私有地址以 10. 开头,或以 172.16 到 172.31 开头,或以 192.168 开头;链路本地地址以 169.254 开头;环回地址以 127 开头。

一点提醒。日志中的私有地址并不能告诉你它是哪台设备。同一个 192.168.1.10 会出现在数百万个网络中。要将其与某个人关联起来,需要路由器的 NAT 表,而网站没有这张表,也不应索要它。