IP POOL动态池的管理
IP POOL实现原理: IP POOL管理可分为动态和静态两种形式,静态IP POOL是指在NAS端实现的配置,然后可以由RADIUS 服务器决定使用的POOL的名称,具体配置为:
动态IP POOL 是指由RADIUS服务器配置管理IP POOL,在每次用户授权时,给NAS返回的授权确认中包含该用户使用的IP 地址,它是通过Framed-IP-Address属性实现的。 ippool students{
range-start = 172.168.1.1 range-stop = 172.168.1.254 netmask = 255.255.255.0 cache-size = 800
session-db = ${raddbdir}/db.ippool ip-index = ${raddbdir}/db.ipindex }
authorize {
students }
accounting { students }
IP POOL模块的流程原理: ippool_instantiate
ippool_authorize
ippool_accounting
IP POOL 模块数据库接口,使用GDBM数据库,下面是所使用的接口函数说明: 1. GDBM_FILE gdbm_open(name,block_size,flags,mode,fatal_func) 功能:打开数据库文件
2. Int gdbm_store(dbf,key,content,flag); 功能:存储数据条目
3. Datum gdbm_fetch(dbf,key) 功能:获取一个数据条目
4. Datum gdbm_firstkey(dbf); 功能:获取第一个条目
5. Datum gdbm_nextkey(dbf,key); 功能:获取下一个条目 6. Int gdbm_delete(dbf , key); 功能:删除一个条目 7. Void gdbm_close(dbf) ; 功能:关闭数据库
数据结构
typedef struct ippool_info { uint32_t ipaddr ; char char }ippool_info
typedef struct ippool_key { char int }
加载链表结构
long char char char int char char int }
流程设计及原理
1. 由于IPPOOL模块实现时,需要的数据库接口,所以实现时比较复杂,而且与RLM_SQL模块的接口函数重复存在,所以考虑在RLM_SQL中来实现比较简单。 2. 是否可以加载到内存?不能,必须实时刷新数据库记录,因为RADIUS的DOWN机随
时导致IP-POOL信息的混乱。如果在每个包的AUTHORIZE和ACCOUNTING-STOP
nas[MAX_NAS_NAME_SIZE] ; port ; active ; cli[32] ;
typedef struct ippool_stru {
ipaddress ; active ; client[20] ; nas[20] ; port ; multilink; forbidden ; indexcount ;
过程中都直接读写数据库,这样可能大大影响响应时间,而且以前的内存加载也没有太大的价值了。
initiate :
1. 初始化数据库, 将所有IP地址写入表中,其中,NAS = “0” port =-1 ,active= 0 2. 数据的加载,集中把地址条目加载到相关数据结构中.
Authorize
1.检查包中NAS-IP-ADDRESS属性,必须存在 2. 获取客户名称,CALLING-STATION-ID
3 如果PORT存在,查找PORT是否被使用,如果已被使用,检查是否是复用,或已废除,如废除需重新设置记录。
4 搜索数据库检查是否存在空余IPADDRESS可使用,增加计数索引+1 5 创建FRAME-IP-ADDRESS属性
Accounting-stop
1. 检查是否有NAS-PORT属性,没有则不处理 2. 获取NAS-IP-ADDRESS或NAS-INDENTIFIER
3. 查找该PORT的IP-ADDRESS条目,设置Active = 0 4. 计数索引减少1
数据库设计 表名: ippool_t 字段标识 Ipaddress Active Client Nas Port Multilink Forbidden IndexCount 类型和长度 Long VARCHAR(1) VARCHAR(20) VARCHAR(20) Integer VARCHAR(1) VARCHAR(1) Integer 主键 Y N N N Y N N N 是否为空 说明 NOT NULL IP地址 是否使用 客户名 服务器名称 NOT NULL 端口 NOT NULL 是否链路复用 NOT NULL 是否禁用 Y/N NOT NULL 索引计数器
说明:ipaddress表示唯一IP地址,当被使用时,必须填写该客户名称,NAS名称及端口