VPN 客户端的固定内部地址可以放在三个地方,而只应有一个地方真正持有它。RADIUS 可以在 Access-Accept 中返回该地址,网关可以为账号保留静态映射,客户端适配器也可以手动设置。前两者属于策略,第三者是本地猜测,网关完全可以忽略或覆盖它。在前两者之间做选择才是真正的决定,而这取决于网络接入服务器实际实现了什么。

固定地址可能存在的三个地方

当响应携带 Framed-IP-Address 且网关把该值应用到会话时,RADIUS 持有该地址。当管理员把账号映射到地址池内的静态地址时,网关持有该地址。客户端什么也不持有,即使其适配器显示手动地址,因为服务器在协商期间分配内部地址,只有服务器不发送任何地址时本地设置才有意义。三者在正常连接上看起来完全一样,所以冲突往往暴露得很晚。差别会在重新连接、第二台设备以及策略变更之后显现。

两个所有者就是会出问题的配置。当 RADIUS 响应分配 172.28.4.77、而网关为 172.28.4.90 保留静态映射时,最终采用的值取决于厂商代码先检查哪一侧,落败的一方连一行日志都不会留下。同一账号在第二台设备上就会拿到重复地址,症状读起来像路由故障而不是分配冲突。在添加第二种机制之前,先确定所有者。

客户端侧方案只值得一提,因为可以直接排除。手动设置适配器地址只是操作系统可能呈现的偏好,不是预留,也无法阻止另一个会话拿到同一地址。

RADIUS 响应能承诺什么、不能承诺什么

RFC 2865把 Framed-IP-Address 定义为需要为用户配置的 IPv4 地址,它属于 Access-Accept。同一个属性出现在 Access-Request 中只是服务器可以忽略的提示,当客户端或网关提出首选地址时这一点很重要。协议中没有任何机制强制网关接受该响应,因为把它应用到会话的是网络接入服务器。

支持与否是产品问题而不是协议问题。有些网关默认应用成帧地址,有些需要先打开组级开关,还有些接受该属性却从不用于远程接入会话。最后一种最危险,因为计费记录里能看到响应,而客户端拿到的却是地址池地址。要在你实际运行的网关门面和固件上确认行为,而不是参考同系列产品的文档。

网关忽略的响应,看起来和从未发送过的响应一模一样。把 Access-Accept 与会话地址并排对照,是区分这两种情况的唯一办法。

在已经路由的地址池内预留地址

从网关已经在路由、防火墙已经信任的地址池子网中选择固定地址。超出该范围的地址会把策略变更变成路由工程,VPN 能起来,但其后面的任何东西都无法回应。如果存在按地址的访问规则,请在同一次变更中把固定地址加进去。

决定第二个并发会话应该如何处理。同一个地址发两次不是设备管理,由此产生的冲突会表现为两个会话都时断时续。要么为每台设备发放不同身份,要么发放不同分配,要么用受支持的检查强制并发,例如 Simultaneous-Use,而不是寄希望于客户端在旧会话过期前永不重连。

回程路由值得和分配同样重视。网关需要到地址池的路由,内部路由器需要回到网关的路由,固定地址会继承这两条。只有一台客户端能用而其他全部失败,通常意味着地址池路由存在,但预留地址的主机路由不存在。

在相信预留之前先测试响应

分别测试 AAA 侧和会话侧,因为它们的失败原因不同。本地 radtest 显示服务器为该账号返回什么,无需经过网关;users 文件中的条目则显示服务器应当匹配什么。然后重新连接客户端,把它收到的地址与响应中的属性做比较。

Authenticated member: survey-tablet-17
Reply attribute:      Framed-IP-Address = 172.28.4.77
survey-tablet-17  Cleartext-Password := "REPLACE_ME"
                  Framed-IP-Address = 172.28.4.77

radtest survey-tablet-17 REPLACE_ME 127.0.0.1 0 testing123

没有该属性的 Access-Accept 意味着服务器没有匹配到条目,或属性没有应用到该用户。带属性的 Access-Accept 而客户端仍拿到地址池地址,意味着网关忽略了它。Access-Reject 会把你送回凭据或组策略,这些结果都不应通过修改客户端适配器来排查。

在重新连接之后、以及从另一台设备第二次登录之后重复检查。只对第一个会话成立的预留,就是迟早要发生的地址池冲突,现在发现比审计时才发现更省事。

选定一个所有者并写下来

如果网关能可靠地应用成帧地址,就让 RADIUS 持有分配,并删除同一账号的任何静态映射。如果不能,就让网关持有,并从响应中删除该属性,使两个来源不可能互相矛盾。因为两者都“差不多能用”而都保留,等于保证将来某个会话拿到错误地址且找不到明显原因。

把选定的所有者、预留地址及其来源地址池写进账号记录。下一个添加设备的人就能在改动其中任何一项之前,看出该地址是 AAA 策略还是网关映射。

相关文章