我是新来的。
我有一个带有 sqlippool 和 LDAP 身份验证的 freeradius 3(使用“guest”文件配置的用户),一切运行正常。我有 2 个 sqlippool:
-主池
-guest_pool
我想要执行以下操作:
如果用户是“来宾”,则提供来自 guest_pool 的 IP,否则提供来自 main_pool 的 IP。我的想法是让来宾和其他用户位于不同的 VLAN 中。
我如何告诉 radius dhcp“用户是否是来自 guest_pool 的客人?”
抱歉我的英语不好。
谢谢。
答案1
我解决了!
感谢 Arran Cudbard-Bell 提供的线索!
首先,创建一个名为“userhardaddr”的表,其中用户名和mac(PK)都是varchar。
在 (radius conf dir)/sites-enabled/defaul (post-auth 部分) 中我进行了“REPLACE”查询:
post-auth {
...
update reply {
Tmp-String-0 := "%{sql:REPALCE INTO userhardaddr(username,mac) VALUES(%{User-Name},%{Calling-Station-Id})}"
...
}
}
如果存在,则用表中已连接的 MAC 地址替换用户。如果不存在,则 REPLACE 将像 INSERT 一样创建行。
然后,在 sites-enabled/dhcp (发现和请求部分) 中:
dhcp DHPC-Discover {
update request {
...
User-Name = "%{sql:SELECT username FROM userhardaddr where mac = REPLACE ('%{DHCP-Client-Hardware-Address}',':','-')}"
...
}
...
if(&User-Name=='guest') {
&Pool-Name = "guest_pool"
}
else {
&Pool-Name = "main_pool"
}
...
}
...
dhcp DHPC-Request {
(same in discover)
}
这样我就可以根据 mac 地址从数据库中获取用户名。
在 IF 语句中,我将查询返回的值与“guest”进行比较并分配相应的 IP 池。
再次感谢。
问候。