我在我的服务器上安装了FreeRADIUS ,并且还有两个局域网(或可能更多)由此服务器pipe理。 比方说LAN A: 192.168.1.0 ,LAN B: 192.168.2.0 。 我使用FreeRADIUS与postgres数据库结合使用。 在我的radcheck表中,我插入了以下行:
userbane='myuser', attribute='Password', op=':=', value='mypass' 。
现在我想让要求我的FreeRADIUS服务的客户端能够使用这个用户名和密码进行身份validation,只要他们是LAN B的一部分。
问题 :有谁能告诉我如何完成这个任务?
我尝试把更多的一行放在radcheck : username='myuser', attribute='NAS-IP-Address', op=':=', value='192.168.2.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'
使用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-IP-Address}replace%{NAS-Identifier}并且用site_ipreplacesite_id将会使用IP地址