摘要

  • RFC 1918 保留三段可重复使用的 IPv4 空间,企业无需向 IANA 或互联网注册机构协调;它承诺的是企业内部或协作集合内部唯一,而非全球唯一。
  • 两个隔离网络使用同一地址可以同时正确。并购、专线、VPN 或其他互联改变了唯一性必须成立的范围,RFC 1918 明确承认这可能迫使主机重编号。
  • 路由回答“包往哪里走”,转换回答“边界两侧如何对应”,认证回答“对端是谁”。三者都不能单独证明业务连接到了原本想找的主机。

围墙原来也是地址的一部分

设想甲公司的 10.8.4.20 是财务系统,乙公司的 10.8.4.20 是仓储控制器。两边各自只有一条到达路径,各自的内部 DNS 也只返回一个对象。它们不是在争抢一段登记给某一方的公共号码;RFC 1918 允许双方不经登记协调就选择这段空间。

因此,在互联之前,完整含义其实是“甲公司范围内的 10.8.4.20”和“乙公司范围内的 10.8.4.20”。管理员平时只写后半段,是因为物理与管理隔离替他保存了前半段。并购不是让其中一个旧配置突然违法,而是把两个原本不相交的解释域变成了一个寻址问题。

如果合并后的路由器只看到目标数字,它没有历史判断力。它不知道发包者想到的是财务还是仓储,也不知道哪一边使用得更早。路由表必须得到额外上下文,或者其中一个地址必须改变。这是局部唯一性的第一笔账:省下的是使用前的全球协调,延期的是范围扩大时的消歧成本。

1994 年的争论已经看见并购

1994 年 3 月发布的 RFC 1597,先把企业内主机按外部连接需求分类。很多收银机、办公终端、显示设备和路由器内部接口只需要在一个组织内通信。为每台机器占用全球唯一地址,会用全球资源解决局部问题。可重复使用的保留地址因此具有强烈的现实吸引力。

同年 7 月,RFC 1627 以 Network 10 Considered Harmful 为题反对这种做法。反对者强调,今天不对外的机器明天可能参加协作,两家企业会合并,一项内部服务会取得外部使用者。重编号也不只是给网卡换一个值:知名服务、软件许可证和长期配置都可能把号码当成稳定条件。文中还叙述了 Apple 的一次大规模重编号,但本研究包没有独立材料核实其主机数量、成本或完整结果,因此只能把它视为当时论辩中的案例主张。

这场争论没有在 1996 年被遗忘。Eliot Lear 同时是 RFC 1627 与 RFC 1918 的作者。作为 BCP 5 发布的 RFC 1918 取代了 RFC 1597 与 RFC 1627,却没有假装反对意见不存在。它保留私有地址复用,并把未来合并可能发生地址重复、从而需要重编号,直接写进缺点部分。

历史意义在这里:标准化不是宣布风险被驳倒,而是在承认风险之后选择交易条件。

三段地址,只有局部承诺

RFC 1918 指定了 10.0.0.0/8、172.16.0.0/12 与 192.168.0.0/16。任何企业都可以使用,无需与 IANA 或互联网注册机构协调;多个企业可以重复使用。文档对唯一性的限定非常清楚:地址只在单个企业,或者共同协调这段空间的一组企业内部唯一。

IANA 当前的 IPv4 特殊用途地址登记仍把三段都列为 Private-Use,并标明不可全球到达。这不是给某个先使用者颁发排他产权,也不是说这些数字天然携带“内部”属性。它是一组关于适用范围的运行规则。

RFC 1918 要求私网路由不得在企业间链路上传播,带私有源地址或目的地址的包不应跨越这些链路,DNS 记录等间接引用也应留在企业内部。地址计划、路由发布与名称可见性必须画出同一条边界。若号码只在本地唯一,而名称却向更大的受众公布,名称层就承诺了寻址层无法兑现的对象。

文档也没有把私有地址包装成安全机制。它的安全部分明确说没有处理安全问题。防火墙、应用网关或不可路由状态可以改变暴露面,却不能让一个重复号码变成身份证明。

并购条款不是脚注,而是价格标签

RFC 1918 直说:几张未经协调的私网并成一张私网时,某些地址可能不再唯一,对应主机需要重编号。它还单列两个组织后来希望建立 IP 连接的情形,并建议随机选择内部子块以降低碰撞风险。随机选择减少概率,不产生协调账本,更不能保证不相遇。

这里没有“谁拥有 10/8”这个答案,因为设计前提就是重复使用。真正的决策表应当问:哪一段依赖最少,哪一项业务已经把地址当作身份,谁能修改配置,谁能验证业务,谁承担停机,转换是临时桥梁还是长期架构,保持隔离是否比强行互联更合理。

RFC 1918 还提醒,主机在私有与公共状态之间移动,需要改 IP、DNS 条目以及其他主机中对该地址的配置引用。DHCP 等工具可以减轻部分工作,但不能替管理层分配代价,也不会自动识别某个地址在许可证、访问规则或应用语义中的地位。

Address realm 把被省略的坐标写了出来

1999 年的 RFC 2663 后来提供了一个很有用的词:address realm,即地址被唯一分配、路由能够据此找到对象的网络域。这个定义等于把日常省略的前半句补回去。私有地址不是孤立的身份;它是“某个 realm 内的某个地址”。

传统 NAT 在两个地址域之间改写表示,但它假设内部地址与外部地址不重叠。若同一数值在边界两侧已经各自指向主机,单边改写不足以消歧。RFC 2663 为这种地址碰撞描述了 twice NAT:源与目的都可能在穿越边界时转换。

这说明“加一条路由”为什么不是普遍答案。路由只能在一张给定的转发表内,为某个目的选择下一跳。它无法让同一个前缀同时拥有两套相互冲突的含义,除非再加入表、隧道、策略域、转换或重编号等上下文。

2001 年的 RFC 3022 进一步说明转换的运营代价。Basic NAT 映射地址集合,NAPT 还映射传输层端口;一个会话的往返流量需要经过相容的状态,切换到没有状态的设备可能中断。转换能让内部号码继续存在并获得选择性的外部连接,却会削弱 IP 地址的端到端意义,把更多状态放进网络。

因此,转换表本身成为证据。它必须回答:哪个时间、哪个协议、哪个内部 realm 的对象,被映射成边界另一边的哪个表示。只保留转换后的地址,等于再次丢掉范围。

“连通”有时只是连到了别人

2010 年的 RFC 5684 是 Independent Submission,不是 IETF 标准轨文档。它研究多层 NAT 与远程 VPN 中的私有地址重叠,并用了一个关键概念:mistaken end host identity,误认最终主机。

在它的例子里,上游通告的 DNS 解析器地址可能与下游本地主机相同,查询于是留在本地;拆分隧道下,远端现场的服务也可能与企业内预期服务共用一个地址。连接不一定超时,甚至可能获得格式正确的响应。风险正在于“有东西回答”被误写成“目标系统回答”。

RFC 5684 针对自己的部署场景,建议给对外通告的关键服务使用不重叠或全球地址,并以端到端认证取代单独依赖源 IP。它没有给出所有企业的事故比例,也不证明每次重叠都会产生安全事件。它证明的边界更窄:传输成功与端点身份正确是两份不同的收据。

配置记录说明某设备在本域用了什么地址;路由记录说明包被送往哪里;转换记录说明表示如何变化;凭证可以说明对端是谁;应用观测说明预期交易是否完成。将这些证据合并成一个“网络通了”,会把最危险的错误藏进绿色状态。

100.64/10 是另一种范围,不是第四段 RFC 1918

2012 年的 RFC 6598 为运营商 CGN 与客户侧设备之间设立 100.64.0.0/10 Shared Address Space,并明确把它与 RFC 1918 的企业私有空间区分。IANA 今天把两者都列为不可全球到达的特殊用途地址,但它们服务的管理域并不相同。

这一差别再次说明,“不全球到达”不是一个没有结构的内部世界。家庭、企业、运营商网络各自有不同的控制者、路由与冲突面。地址复用是否成立,取决于范围是否与数据一起被保存。

RFC 1918 没有取消唯一性的重要性,而是把唯一性的维护位置下放了。它让组织只为真正需要全球识别的主机支付全球协调成本。代价也同样明确:边界总会变化,公司会合并,网络会互联。当那一天到来,旧地址仍能准确描述各自的过去,却不足以描述共同的现在。新的网络必须补回 realm、建立可审计映射,或者选择新的号码。

来源