我已经FreeRADIUS
在服务器上安装了,并且该服务器还管理两个 LAN(或可能更多)。假设 LAN A:192.168.1.0
和 LAN B: 192.168.2.0
。我将其与数据库FreeRADIUS
结合使用。在我的表中,我插入了以下行:postgres
radcheck
userbane='myuser', attribute='Password', op=':=', value='mypass'
。
现在,我希望让从我的 FreeRADIUS 请求服务的客户端能够使用此用户名和密码进行自我身份验证,前提是它们是 LAN B 的一部分。
问题:有人可以建议我如何完成这件事吗?
我尝试再添加radcheck
一行:username='myuser', attribute='NAS-IP-Address', op=':=', value='192.168.2.1'
,但是没有成功。
任何帮助,将不胜感激。
答案1
我以前没有使用过数据库后端,但是使用用户文件规则看起来如下:
myuser Cleartext-Password := "mypass", NAS-IP-Address == "192.168.2.1"
基于此,我认为您需要radcheck
表中的两个条目:
usernane='myuser', attribute='Password', op=':=', value='mypass'
username='myuser', attribute='NAS-IP-Address', op='==', value='192.168.2.1'
答案2
使用 SQL 数据库,我通过以下方式解决了这个问题:
1)添加特殊行(site_id)
ALTER TABLE radcheck ADD site_id VARCHAR(30) NOT NULL default '0.0.0.0' AFTER value;
2)修改/etc/freeradius/sql/mysql/dialup.conf如下
authorize_check_query = "SELECT id, username, attribute, value, op, site_id, valid_from, valid_until \
FROM ${authcheck_table} \
WHERE username = '%{SQL-User-Name}' AND site_id='%{NAS-Identifier}' \
ORDER BY id"
在我的例子中,我使用了 NAS-Id,但将 %{NAS-Identifier} 替换为 %{NAS-IP-Address} 以及将 site_id 替换为 site_ip 也可以使用 IP 地址