跳到主要内容

2.19. Requesting an Internal Address on a Remote Network (请求远端网络内部地址)

2.19. Requesting an Internal Address on a Remote Network (请求远端网络内部地址)

最常见于端点到安全网关场景: 端点可能需要在安全网关所保护网络中获得 IP 地址, 并可能需要动态分配. 可在任何创建 Child SA 的请求中 (包括消息 3 中的隐式请求) 通过包含 CP (Configuration, 配置) 载荷来请求此类临时地址. 但通常仅在 IKE_AUTH 交换期间分配一个 IP 地址. 该地址至少持续到 IKE SA 删除.

本功能为试图隧道进入 IPsec 远程访问服务器 (IPsec Remote Access Server, IRAS) 所保护网络的 IPsec 远程访问客户端 (IPsec Remote Access Client, IRAC) 提供地址分配. 由于 IKE_AUTH 交换创建 IKE SA 与 Child SA, IRAC 必须在 IKE_AUTH 交换中请求 IRAS 控制的地址 (以及有关受保护网络的其他可选信息). IRAS 可从多种来源为 IRAC 获取地址, 例如 DHCP/BOOTP (Bootstrap Protocol, 引导协议) 服务器或自身地址池.

Initiator                         Responder
-------------------------------------------------------------------
HDR, SK {IDi, [CERT,]
[CERTREQ,] [IDr,] AUTH,
CP(CFG_REQUEST), SAi2,
TSi, TSr} -->
<-- HDR, SK {IDr, [CERT,] AUTH,
CP(CFG_REPLY), SAr2,
TSi, TSr}

任何情况下, CP 载荷必须插入在 SA 载荷之前. 若协议变体包含多次 IKE_AUTH 交换, CP 载荷必须放在含 SA 载荷的消息中.

CP(CFG_REQUEST) 必须至少包含一个 INTERNAL_ADDRESS 属性 (IPv4 或 IPv6), 但可以包含发起方希望在响应中返回的任意数量其他属性.

例如, 发起方到响应方的消息:

CP(CFG_REQUEST)=
INTERNAL_ADDRESS()
TSi = (0, 0-65535, 0.0.0.0-255.255.255.255)
TSr = (0, 0-65535, 0.0.0.0-255.255.255.255)

注意: 流量选择器 (Traffic Selector) 包含 (协议, 端口范围, 地址范围).

响应方到发起方的消息:

CP(CFG_REPLY)=
INTERNAL_ADDRESS(192.0.2.202)
INTERNAL_NETMASK(255.255.255.0)
INTERNAL_SUBNET(192.0.2.0/255.255.255.0)
TSi = (0, 0-65535, 192.0.2.202-192.0.2.202)
TSr = (0, 0-65535, 192.0.2.0-192.0.2.255)

返回值均取决于实现. 如上例所示, IRAS 也可以发送 CP(CFG_REQUEST) 中未包含的其他属性, 并可以忽略其不支持的非强制属性.

响应方不得在尚未收到发起方 CP(CFG_REQUEST) 的情况下发送 CFG_REPLY, 以免在 IRAC 无法处理 REPLY 时 IRAS 仍做不必要的配置查找.

若 IRAS 配置要求对某身份 IDi 必须使用 CP, 而 IRAC 未发送 CP(CFG_REQUEST), IRAS 必须拒绝该请求, 并以 FAILED_CP_REQUIRED 错误终止 Child SA 创建. FAILED_CP_REQUIRED 对 IKE SA 非致命; 仅导致 Child SA 创建失败. 发起方可稍后通过新的 Configuration 载荷请求纠正. FAILED_CP_REQUIRED 错误无关联数据.