4. Existing Solutions (现有解决方案)
4. Existing Solutions (现有解决方案)
4.1. IPsec Tunnel Mode (IPsec 隧道模式)
在有限的情况下, IPsec 隧道模式实现 (如 [DHCP] 中描述的) 可以成功穿越 NA(P)T。然而, 成功穿越的要求非常有限, 因此需要更通用的解决方案:
-
IPsec ESP。IPsec ESP 隧道不会在消息完整性检查中覆盖外部 IP 头部, 因此不会因地址转换而导致身份验证数据失效。IPsec 隧道也不需要关心校验和失效。
-
无地址验证。大多数当前的 IPsec 隧道模式实现不执行源地址验证, 因此不会检测到 IKE 标识符与源地址之间的不兼容性。这引入了第 5 节中描述的安全漏洞。
-
"Any to Any" SPD 条目。IPsec 隧道模式客户端可以协商 "any to any" SPD, 这不会因地址转换而失效。这实际上排除了将 SPD 用于过滤允许的隧道流量。
-
单客户端操作。NAT 后面只有一个客户端时, 不存在重叠 SPD 的风险。由于 NAT 不需要在竞争客户端之间进行仲裁, 因此也不存在重新密钥误转换或不当的传入 SPI 或 cookie 解复用的风险。
-
无分片。当使用证书身份验证时, 可能会遇到 IKE 分片。当使用证书链时, 或者即使在交换单个证书时如果密钥大小或其他证书字段 (如专有名称和其他扩展) 的大小足够大, 也可能发生这种情况。然而, 当使用预共享密钥进行身份验证时, 分片的可能性较小。
-
活动会话。大多数 VPN 会话通常在其生命周期内保持持续的流量, 因此 UDP 端口映射不太可能因不活动而被删除。
4.2. RSIP
[RSIP] 和 [RSIPFrame] 中描述的 RSIP 包括用于 IPsec 穿越的机制, 如 [RSIPsec] 中所述。通过启用主机-NA(P)T 通信, RSIP 解决了 IPsec SPI 解复用以及 SPD 重叠的问题。因此, 它适合在企业以及家庭网络场景中使用。通过使 NAT 后面的主机共享 NA(P)T (RSIP 网关) 的外部 IP 地址, 此方法与包含嵌入 IP 地址的协议兼容。
通过隧道传输 IKE 和 IPsec 数据包, RSIP 避免了对 IKE 和 IPsec 协议的更改, 尽管需要对主机 IKE 和 IPsec 实现进行重大更改以使其与 RSIP 兼容。因此, 它与所有现有协议 (AH/ESP) 和模式 (传输和隧道) 兼容。
为了处理 IKE 重新密钥的解复用, RSIP 需要 IKE 源端口的浮动以及重新密钥到浮动端口。因此, 与现有 IPsec 实现的互操作性无法保证。
RSIP 不满足 IPsec-NAT 兼容性解决方案的部署要求, 因为支持 RSIP 的主机需要相应的支持 RSIP 的网关才能与另一个主机建立 IPsec SA。由于 RSIP 仅需要更改客户端和路由器, 而不需要更改服务器, 因此它的部署难度低于 IPv6。然而, 对于供应商来说, 实现 RSIP 需要 IPv6 支持所需资源的很大一部分。因此, RSIP 在长期时间范围内解决了 "过渡性" 问题, 这并不有用。
4.3. 6to4
如 [RFC3056] 中所述的 6to4 可以构成 IPsec-NAT 穿越解决方案的基础。在这种方法中, NAT 为 IPv6 主机提供从 NAT 外部 IPv4 地址派生的 IPv6 前缀, 并将 IPv6 数据包封装在 IPv4 中以传输到其他 6to4 主机或 6to4 中继。这使得使用 IPsec 的 IPv6 主机能够自由地与 IPv6 或 6to4 云中的其他主机通信。
虽然 6to4 是一种优雅且强大的解决方案, 当单个 NA(P)T 分隔客户端和 VPN 网关时, 但它不是普遍适用的。由于 6to4 需要为 NA(P)T 分配可路由的 IPv4 地址以允许形成 IPv6 前缀, 因此当客户端和 VPN 网关之间存在多个 NA(P)T 时不可用。例如, 在其外部接口上具有私有地址的 NA(P)T 不能被其后面的客户端用于通过 6to4 获得 IPv6 前缀。
虽然 6to4 对已经支持 IPv6 的主机只需要很少的额外支持, 但它确实需要对 NAT 进行更改, 这些 NAT 需要升级以支持 6to4。因此, 6to4 可能不适合短期部署。