![根据 Freeradius 中的 NAS-IP-Address 设置变量](https://linux22.com/image/632393/%E6%A0%B9%E6%8D%AE%20Freeradius%20%E4%B8%AD%E7%9A%84%20NAS-IP-Address%20%E8%AE%BE%E7%BD%AE%E5%8F%98%E9%87%8F.png)
设置
我们目前有一个 Freeradius 服务器,用于根据 Active Directory 服务器验证 Wifi 用户的身份。Freeradius 和 Active Directory 之间的链接由 Winbind 完成。
为了让用户能够获得授权,它需要属于 Active Directory 中的一个组。这可以通过向 ntlm_auth 命令添加参数来实现。
我们正在努力实现的目标
我们现在正在将 802.1X 添加到我们的有线网络,并希望重新使用现有的 Radius 服务器针对同一个 Active Directory 进行身份验证。
除了授权需要基于用户是否属于与 Wifi 网络不同的网络之外,其他一切都将保持不变。
我们已经尝试过
我在文档中阅读了很多关于 freeradius 的内容,并发现可以使用条件和变量。因此,我的计划是在 ntlm_auth 命令中放置一个包含组 SID 的变量(如Freeradius 邮件列表)。组SID将依赖于网络设备的IP,该IP应包含在“NAS-IP-Address”中。
这应该只是编写一个简单的条件语句并设置一个变量的情况。尽管如此,我还是无法做到这一点,因为每次我尝试将条件添加到配置文件时,Freeradius 都不会启动。
我的问题是:
如何在 NAS-IP-Address 函数中设置变量?
在哪些文件中可以使用此类语法?
答案1
Unlang(即您所指的条件语言)只能在虚拟服务器(server {}
块)的子部分内使用。
扩展名%{foo}
有时可以在模块配置项中使用,例如ntlm_auth
,但这取决于配置项。模块配置文件中的示例通常会提示您是否可以使用扩展名。
虚拟服务器配置文件可以在/etc/raddb/sites-available
或中找到/etc/freeradius/sites-available
。
要实现您的要求,最简单的方法就是向各个客户端部分添加额外的配置对,而不是基于 NAS-IP-Address。
例如:
client my_client {
ipaddr = 127.0.0.1
secret = testing123
ad_group = <group>
}
然后您可以使用扩展在参数%{client:ad_group}
中传递 ad_group 值ntlm_auth
。
答案2
我认为该huntgroup
功能可能就是您正在寻找的。(但我不知道它们是否已在版本 2 中可用...)
猎头组描述如下: https://github.com/FreeRADIUS/freeradius-server/blob/v3.0.x/raddb/mods-config/preprocess/huntgroups
您可以像这样创建寻线组:
switch NAS-Identifier == "Cisco-Sw1"
switch NAS-IP-Address == 192.0.2.5
switch NAS-IP-Address == 192.0.2.6
switch NAS-Identifier == "my_client"
您可以huntgroup
像这样使用 s:
if (Huntgroup-Name == "switch") {
noop
}