摘要
- RFC 3489 用三组 Binding 测试区分开放互联网、防火墙和四类 NAT,但每个答案都依赖套接字、服务器、目的地、地址域与时刻。
- RFC 5389 保留了 STUN 对映射地址的观察能力,却不再把 NAT 类型当作穿越判决。缺失的证据是目标对端亲自完成的连通性检查,以及直连失败时可用的中继。
2003 年 3 月,RFC 3489 给出了一个极具吸引力的压缩方法。位于未知中间盒之后的客户端,只需向一台协作服务器发送几次请求,就能根据返回地址和不同服务器地址是否能够回包,为自己的处境命名:开放互联网、对称 UDP 防火墙、完全锥形 NAT、受限锥形 NAT、端口受限锥形 NAT,或者对称 NAT。
流程图看起来像一次诊断。测试一要求服务器正常回复,并把本地套接字与 MAPPED-ADDRESS 比较。测试二要求服务器改用另一个 IP 地址和端口回复。测试三只改变服务器端口。客户端还会向 CHANGED-ADDRESS 再做一次测试一,观察映射是否改变。这些观察本身是真实的;问题出在把它们提升为中间设备持久不变的属性。
每个结果只属于那次实验。它绑定一个本地套接字、一台服务器及其备用地址、穿过一台或多台转换器的一个方向、一个地址域和一个时刻。RFC 3489 自己就警告,重复发现时通常应更换本地地址与端口,因为上一次测试留下的绑定会污染下一次结果。另一种办法是等待旧状态过期。换言之,测量本身会改变被测表面。
类型标签还抹掉了目的地。STUN 服务器看到的映射,可能在客户端继续访问这台服务器时保持稳定,却在客户端改访真正对端时改变。过滤规则可能允许来自一个源的回复,同时拒绝另一个源。多层 NAT 会被压缩成“最严格”一层表现出来的结果,却不说明究竟是哪台设备、哪个目的地或哪只计时器做出了决定。
地址域条件同样关键。如果 STUN 服务器不位于通信双方共同的上层地址域,它报告的地址可能无法被另一方使用。两个客户端若位于同一台 NAT 之后,也可能无法通过外部映射彼此联系。MAPPED-ADDRESS 的准确含义只是“这台服务器在这次请求上看到了这个源传输地址”,不是“任何对端都能从这里找到我”。
绑定寿命发现又增加了一层推断。客户端维持一条绑定,同时让另一条绑定经历越来越长的等待,再根据回包估计状态何时消失。但 RFC 3489 已承认,不同绑定可能使用不同计时器;过载可能动态改变超时;NAT 重启也会破坏结果。一次测出的数字不是 NAT 签发的租约。
安全机制没有补上这条证据链。共享秘密与消息完整性可以把某些回复绑定到某次 STUN 交换,却无法让相对于一台服务器的观察自动适用于另一个目的地。RFC 5389 后来还记录了一类错误映射地址攻击:在特定拓扑下,单靠密码学无法从根本上解决。证词是否真实,与证词适用到哪里,是两道不同的问题。
RFC 5389 对旧方案的回顾非常直接。部署经验表明,经典 STUN 不足以成为可部署的完整穿越方案。学到的地址有时可用、有时不可用;旧协议既不能证明它何时可用,也不能在不可用时补救。许多 NAT 根本无法整齐落入原来的几类。修订版因此从基础协议中移除了旧的响应地址与改变请求机制,并把 STUN 从听起来像完整解决方案的“UDP 穿越”改名为“会话穿越工具”。
后续架构保留了有用收据,丢掉了过度结论。RFC 5780 把映射行为与过滤行为分开测量,同时明确保留适用限制。RFC 8445 的 ICE 收集候选地址,在真实通信双方之间组成候选对并执行连通性检查,然后才提名路径。RFC 8656 定义的 TURN 则在直连不能成立时提供中继。运维问题由“这是什么类型的 NAT”改成了“对这两个参与者而言,哪一对候选现在能工作,失败时还有什么退路”。
这次变化符合 Heng Lu 对最小共同机制与本地未来决策的区分。STUN 可以保留为很小的观察工具,各种 usage 再明确选择服务器、时间、认证、检查和回退策略。它也符合现实层分离:创建套接字、请求送达、观察映射地址、采样行为、对端检查、提名路径、交换数据包和应用成功,都是不同收据。
历史教训并不是分类毫无用处。标签可以摘要证据。错误在于让摘要的权威超过产生它的条件。RFC 3489 给中间盒命名;RFC 5389 把注意力重新交还给路径。
来源
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
