Radius 客户端的每个 IP 有多个秘密

Multiple secrets per IP for radius client

我有各种连接到我的 radius 系统的路由器,它们的 IP 可能会改变,因为它通过 NAT 网络遍布整个网络..

每个路由器都有一个唯一的 secret。全部在本地数据库中已知

现在我希望以一种方式设置 radius,使每个路由器都可以通过任何 IP 使用其自定义 secret 进行身份验证,但 freeradius 不允许我这样配置它:

client 0.0.0.0/0 {
    shortname = test1
    secret = AA
}   
client 0.0.0.0/0 {
    shortname = test2
    secret = AB
}

有没有办法让我可以禁用 freeradius IP 检查(并且只检查秘密?),或者强制客户端 (/ip) 拥有超过 1 个秘密?

不幸的是,将秘密重新配置为完全相同是不可能的,因为一些路由器已经部署 非常 有限的网络访问。

我正在使用:

 freeradius: FreeRADIUS Version 2.2.8, for host x86_64-pc-linux-gnu, built on Apr  5 2016 at 13:40:43
 Copyright (C) 1999-2015 The FreeRADIUS server project and contributors.

为什么你想要的东西不能单独使用 RADIUS/FreeRADIUS

FreeRADIUS 在解码数据包之前将数据包与客户端进行匹配。在执行匹配之前解码数据包使针对服务器的 DoS 攻击更容易,因为虚假请求会导致服务器使用更多 CPU 时间。

忽略这个秘密也不是一个选择。接入点使用该秘密来解码受保护的属性,例如 WPA2 Enterprise 的 MPPE 密钥属性。

对于带 PAP 的围墙花园,共享密钥用于加密用户提供的明文密码,因此如果您不知道共享密钥,则无法取回明文值进行验证。

在 v4.0.x 中,计划是将来自未知 IP 地址的数据包发送到工作线程进行处理。此时,工作人员将完全了解所有属性,并可以使用该附加信息将秘密绑定到 IP 地址。

它仍然不允许您使用 RADIUS 属性映射传入数据包,但您不太可能看到两个 AP 交换其 WAN IP 的冲突...除了可能在 CGN 环境中有一个小 public池.

可用选项

  • 使用 RADSEC(DTLS/TLS)。客户端使用证书进行验证,共享密钥是固定的。
  • 在 AP 和您的 RADIUS 服务器之间建立隧道 (L2TP/IPSEC/PPP)。使用它来提供一致的本地 IP 地址。
  • 运行 AP 双栈,希望能绕过 NAT。一些 ISP 已经开始提供带前缀委托的 IPv6 连接。在这些情况下,CPE 后面的所有设备都获得 public 可访问的 IPv6 地址。前缀可能会偶尔更改,因此您需要使用某种 'phone home' 系统,AP 可以在其中通知您的服务器其 public 地址。
  • 开发您自己的软件,它会侦听传入的 RADIUS 数据包,并检查 IP 是否与您的客户端数据库中的 IP 匹配。如果没有,它会尝试所有共享秘密,看看是否有任何秘密可以用来验证数据包内容,然后更新该客户端的 IP 绑定。这可能最适合您的一组限制。

我认为 v2.x.x 也有一些补丁允许使用解码属性创建动态客户端,但是 v2.x.x 已经停产了一段时间,而且它们不是正式的支持。