FreeRadius 3 + sqlippool

FreeRadius 3 + sqlippool

我已将 FreeRadius 与 Postgresql 和 Mikrotik 结合使用,并进行了基本配置。SQL 模块配置正确,并且通过数据库进行的 PPPoE 授权有效。我需要连接并配置 sqlippool 模块。此时,我遇到了问题,因为 Internet 上没有关于配置此模块的详细说明。以下是我尝试执行的操作的列表:

  1. 在 sqlippool 文件中指定了“postgresql”方言
  2. 连接模块
  3. 通过 PostgreSQL 模式创建了 radippool 表
  4. 在数据库中添加了以下几行:

INSERT INTO radippool (pool_name, framedipaddress) VALUES ('main_pool', '10.1.0.5');

INSERT INTO radippool (pool_name, framedipaddress) VALUES ('main_pool', '10.1.0.6');

INSERT INTO radcheck (username, attribute, op, value) VALUES ('tester', 'Cleartext-Password', ':=', 'test');

INSERT INTO radcheck (username, attribute, op, value) VALUES ('tester', 'Pool-Name', ':=', 'main_pool');

重启。结果什么都没有。FreeRadius 不会从池中分配 IP 地址,而且我在日志中没有看到任何错误。你能告诉我我做错了什么吗?我需要连接其他东西吗,还是我在某个地方犯了错误?请详细说明正确配置此模块的操作顺序。我认为本指南将帮助许多初学者,因为根本没有详细的信息。

更新。日志:

准备处理请求

(0)已接收访问请求 ID 19,从 10.1.0.1:53161 到 10.1.0.4:1812,长度 198

(0)服务类型 = 框架用户

(0)框架协议 = PPP

(0)NAS 端口 = 15728646

(0)NAS 端口类型 = 以太网

(0)用户名 = “tester”

(0)呼叫站 ID = “C4:12:F5:D4:85:70”

(0)被叫站 ID = “myclients”

(0)NAS 端口 ID = “ether3”

(0)帐户​​会话 ID = “81a00006”

(0)MS-CHAP挑战=0x97e9a21dabacee5e9c0384f778dc7915

(0)MS-CHAP2-响应 = 0x010029335f35cdd38e0fa6eab66e12022f470000000000000000078126d15554660d74add815846c50ab6353c7e0847952eac

(0)NAS 标识符 = “MikroTik”

(0)NAS-IP 地址 = 10.1.0.1

(0)# 从文件 /etc/freeradius/3.0/sites-enabled/default 执行授权部分

(0)授权{

(0)策略过滤器用户名{

(0)如果(&用户名){

(0)如果(&用户名)-> TRUE

(0)如果(&用户名){

(0)如果(&用户名=〜/ /){

(0)如果(&用户名 =〜/ /)-> FALSE

(0)如果(&用户名=〜/ @ [^@] * @ /){

(0)如果(&用户名=〜/ @ [^@] * @ /)-> FALSE

(0)如果(&用户名=〜/../){

(0)如果(&用户名=〜/../)-> FALSE

(0)如果((&用户名 =~ /@/)&&(&用户名 !~ /@(.+).(.+)$/)){

(0)如果((&用户名 =~ /@/)&&(&用户名 !~ /@(.+).(.+)$/))-> FALSE

(0)如果(&用户名=〜/.$/){

(0)如果(&用户名=〜/.$/)-> FALSE

(0)如果(&用户名=〜/@./){

(0)如果(&用户名=〜/@./)-> FALSE

(0) } # 如果(&用户名)=未找到

(0) } # 策略 filter_username = notfound

(0)[预处理] = 正常

(0)[chap] = 无操作

(0) mschap:找到 MS-CHAP 属性。设置“Auth-Type = mschap”

(0)[mschap] = 确定

(0)[摘要] = 无操作

(0)后缀:检查“@”后的后缀

(0)后缀:用户名 =“tester”中没有“@”,查找领域为 NULL

(0)后缀:没有这样的领域“NULL”

(0)[后缀] = noop

(0)eap:无 EAP 消息,不执行 EAP

(0)[eap] = 无操作

(0)文件:用户:匹配条目 DEFAULT 在第 181 行

(0)[文件] = 正常

(0)sql:扩展%{用户名}

(0)sql:--> 测试人员

(0)sql:SQL-User-Name设置为'tester'rlm_sql(sql):保留连接(1)

(0)sql:扩展选择id、用户名、属性、值、Op FROM radcheck WHERE用户名='%{SQL-User-Name}'按id排序

(0)sql:--> 从radcheck中选择id、用户名、属性、值、Op,其中用户名='tester'按id排序

(0)sql:正在执行选择查询:SELECT id、UserName、Attribute、Value、Op FROM radcheck WHERE Username = 'tester' ORDER BY id rlm_sql_postgresql:状态:PGRES_TUPLES_OK rlm_sql_postgresql:查询受影响的行 = 2,字段 = 5

(0) sql:在radcheck表中找到用户

(0)sql:条件检查项匹配,合并赋值检查项

(0)sql:明文密码:=“test”

(0)sql:池名称:=“main_pool”

(0)sql:扩展选择id、用户名、属性、值、Op从radreply WHERE用户名='%{SQL-User-Name}'按id排序

(0)sql:--> 从radreply中选择id、用户名、属性、值、Op,其中用户名='tester'按id排序

(0)sql:正在执行选择查询:SELECT id、UserName、Attribute、Value、Op FROM radreply WHERE Username = 'tester' ORDER BY id rlm_sql_postgresql:状态:PGRES_TUPLES_OK rlm_sql_postgresql:查询受影响的行 = 0,字段 = 5

(0)sql:扩展选择组名从radusergroup其中用户名='%{SQL-User-Name}'按优先级排序

(0)sql:--> 从radusergroup中选择GroupName,其中UserName ='tester'按优先级排序

(0) sql: 正在执行选择查询:SELECT GroupName FROM radusergroup WHERE UserName='tester' ORDER BY priority rlm_sql_postgresql: 状态:PGRES_TUPLES_OK rlm_sql_postgresql: 查询受影响的行 = 0,字段 = 1

(0) sql:在任何组中都找不到用户 rlm_sql (sql):已释放连接 (1) 需要另外 4 个连接才能达到 10 个备用 rlm_sql (sql):正在打开其他连接 (6),已使用 26 个待处理插槽中的 1 个 rlm_sql_postgresql:使用参数进行连接:dbname='radius' host='localhost' port=5432 user='radius' password='radpass' 已连接到“localhost”上的数据库“radius”服务器版本 110007,协议版本 3,后端 PID 28624

(0)[sql] = 确定

(0)[到期] = 无操作

(0)[登录时间] = 无操作

(0) pap:警告:Auth-Type 已设置。不设置为 PAP

(0)[pap] = 无操作

(0) } # 授权 = 确定

(0)找到 Auth-Type = mschap

(0)# 从文件 /etc/freeradius/3.0/sites-enabled/default 执行组

(0)验证{

(0)mschap:找到明文密码,进行哈希处理以创建 NT 密码

(0)mschap:找到明文密码,进行哈希处理以创建 LM 密码

(0)mschap:使用用户名创建挑战哈希:tester

(0)mschap:客户端正在使用 MS-CHAPv2

(0)mschap:添加 MS-CHAPv2 MPPE 密钥

(0)[mschap] = 确定

(0) } # 验证 = 确定

(0)# 从文件 /etc/freeradius/3.0/sites-enabled/default 执行部分 post-auth

(0)授权后 {

(0)更新{

(0) 没有更新任何属性

(0) } # 更新 = 无操作

(0)sql:扩展.query

(0)sql:--> .查询

(0)sql:使用查询模板‘query’rlm_sql(sql):保留连接(2)

(0)sql:扩展%{用户名}

(0)sql:--> 测试人员

(0)sql:SQL-User-Name设置为'tester'

(0)sql:扩展插入radpostauth(用户名、密码、回复、身份验证日期)值('%{User-Name}','%{%{User-Password}:-Chap-Password}','%{reply:Packet-Type}',NOW())

(0)sql:--> 插入radpostauth(用户名,密码,回复,身份验证日期)值('tester','Chap-Password','Access-Accept',NOW())

(0) sql:正在执行查询:INSERT INTO radpostauth (username、pass、reply、authdate) VALUES('tester'、'Chap-Password'、'Access-Accept'、NOW()) rlm_sql_postgresql:状态:PGRES_COMMAND_OK rlm_sql_postgresql:查询受影响的行 = 1

(0) sql:返回 SQL 查询:成功

(0) sql: 更新了1条记录 rlm_sql (sql): 已释放连接 (2)

(0)[sql] = 确定

(0)[执行] = 无操作

(0)策略 remove_reply_message_if_eap {

(0)如果(&回复:EAP消息&&&回复:回复消息){

(0)如果(&回复:EAP 消息 &&&回复:回复消息)-> FALSE

(0)否则{

(0)[空操作] = 空操作

(0) } # 其他 = 无操作

(0) } # 策略 remove_reply_message_if_eap = noop

(0) } # 验证后 = ok

(0)已将访问接受 ID 19 从 10.1.0.4:1812 发送到 10.1.0.1:53161,长度为 0

(0)框架协议 = PPP

(0)帧压缩 = Van-Jacobson-TCP-IP

(0)MS-CHAP2-成功 = 0x01533d42443236373932353546324538304641374430424235463938333445314331454330323244463233

(0)MS-MPPE-接收密钥 = 0xf03b52e2c28c093649b396d6e2b16945

(0)MS-MPPE发送密钥 = 0xb4d2427c437eca3f444403b060bc59f7

(0)MS-MPPE-加密策略 = 允许加密

(0)MS-MPPE-加密类型 = RC4-40 或 128 位-允许

(0)请求已完成,4.9 秒后唤醒。

(1)收到来自 10.1.0.1:48965 到 10.1.0.4:1813 长度 146 的 Accounting-Request Id 20

(1)服务类型 = 框架用户

(1)框架协议 = PPP

(1)NAS 端口 = 15728646

(1)NAS 端口类型 = 以太网

(1)用户名 = “tester”

(1)呼叫站 ID = “C4:12:F5:D4:85:70”

(1)被叫站 ID = “myclients”

(1)NAS 端口 ID = “ether3”

(1)帐户会话 ID = “81a00006”

(1)框架 IP 地址 = 10.1.0.252

(1)帐户真实性 = RADIUS

(1)事件时间戳 = “2020 年 7 月 13 日 14:57:41 +08”

(1)帐户状态类型 = 开始

(1)NAS 标识符 = “MikroTik”

(1) 计费延迟时间 = 0

(1)NAS-IP 地址 = 10.1.0.1

(1)# 从文件 /etc/freeradius/3.0/sites-enabled/default 执行部分 preacct

(1)预记录{

(1)[预处理] = ok

(1)策略 acct_unique {

(1)更新请求{

(1)&Tmp-String-9 := “ai:”

(1) } # 更新请求 = noop

(1)如果((“%{hex:&Class}”=〜/ ^%{hex:&Tmp-String-9} /)&&(“%{string:&Class}”=〜/ ^ai:([0-9a-f]{32})/i)){

(1)扩展 %{hex:&Class}

(1)-->

(1)扩展 ^%{hex:&Tmp-String-9}

(1)--> ^61693a

(1)如果((“%{hex:&Class}”=〜/ ^%{hex:&Tmp-String-9} /)&&(“%{string:&Class}”=〜/ ^ai:([0-9a-f] {32})/i))-> FALSE

(1)否则{

(1)更新请求{

(1)扩展 %{md5:%{用户名},%{Acct-Session-ID},%{%{NAS-IPv6-地址}:-%{NAS-IP-地址}},%{NAS-标识符},%{NAS-端口ID},%{NAS-端口}}

(1)——> 9b06bc7d71ce816cb361a7625387ab61

(1)&帐户唯一会话 ID:= 9b06bc7d71ce816cb361a7625387ab61

(1) } # 更新请求 = noop

(1) } # else = 无操作

(1) } # 策略 acct_unique = noop

(1)后缀:检查“@”后的后缀

(1)后缀:User-Name =“tester”中没有“@”,查找领域为 NULL

(1)后缀:没有这样的领域“NULL”

(1)[后缀] = noop

(1)[文件] = 无操作

(1) } # preacct = ok

(1)# 从文件 /etc/freeradius/3.0/sites-enabled/default 执行会计部分

(1)会计{

(1)详细信息:扩展/var/log/freeradius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/detail-%Y%m%d

(1)详细信息:--> /var/log/freeradius/radacct/10.1.0.1/detail-20200713

(1)详细信息:/var/log/freeradius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/detail-%Y%m%d 扩展到 /var/log/freeradius/radacct/10.1.0.1/detail-20200713

(1)细节:EXPAND %t

(1)详情: --> 2020 年 7 月 13 日星期一 14:57:45

(1)[详细信息] = 确定

(1)[unix] = 正常

(1)sql:扩展%{tolower:type.%{%{Acct-Status-Type}:-none}.query}

(1)sql:-->type.start.query

(1)sql:使用查询模板‘query’rlm_sql(sql):保留连接(3)

(1)sql:EXPAND %{用户名}

(1)sql:-->测试人员

(1)sql:SQL-User-Name设置为'tester'

(1)sql:扩展插入radacct(AcctSessionId、AcctUniqueId、UserName、Realm、NASIPAddress、NASPortId、NASPortType、AcctStartTime、AcctUpdateTime、AcctStopTime、AcctSessionTime、AcctAuthentic、ConnectInfo_start、ConnectInfo_Stop、AcctInputOctets、AcctOutputOctets、CalledStationId、CallingStationId、AcctTerminateCause、ServiceType、FramedProtocol、FramedIpAddress)值('%{Acct-Session-Id}','%{Acct-Unique-Session-Id}','%{SQL-User-Name}',NULLIF('%{Realm}',''),'%{%{NAS-IPv6-Address}:-%{NAS-IP-Address}}', NULLIF('%{%{NAS-Port-ID}:-%{NAS-Port}}', ''), '%{NAS-Port-Type}', TO_TIMESTAMP(%{integer:Event-Timestamp}), TO_TIMESTAMP(%{integer:Event-Timestamp}), NULL, 0, '%{Acct-Authentic}', '%{Connect-Info}', NULL, 0, 0, '%{Called-Station-Id}', '%{Calling-Station-Id}', NULL, '%{Service-Type}', '%{Framed-Protocol}', NULLIF('%{Framed-IP-Address}', '')::inet)

(1)sql:--> 插入radacct(AcctSessionId、AcctUniqueId、UserName、Realm、NASIPAddress、NASPortId、NASPortType、AcctStartTime、AcctUpdateTime、AcctStopTime、AcctSessionTime、AcctAuthentic、ConnectInfo_start、ConnectInfo_Stop、AcctInputOctets、AcctOutputOctets、CalledStationId、CallingStationId、AcctTerminateCause、ServiceType、FramedProtocol、FramedIpAddress)值('81a00006','9b06bc7d71ce816cb361a7625387ab61','tester',NULLIF('',''),'10.1.0.1',NULLIF('ether3',''),'以太网', TO_TIMESTAMP(1594623461),TO_TIMESTAMP(1594623461),NULL,0,'RADIUS','',NULL,0,0,'myclients','C4:12:F5:D4:85:70',NULL,'Framed-User','PPP',NULLIF('10.1.0.252','')::inet)

(1)sql:正在执行查询:INSERT INTO radacct(AcctSessionId、AcctUniqueId、UserName、Realm、NASIPAddress、NASPortId、NASPortType、AcctStartTime、AcctUpdateTime、AcctStopTime、AcctSessionTime、AcctAuthentic、ConnectInfo_start、ConnectInfo_Stop、AcctInputOctets、AcctOutputOctets、CalledStationId、CallingStationId、AcctTerminateCause、ServiceType、FramedProtocol、FramedIpAddress)VALUES('81a00006','9b06bc7d71ce816cb361a7625387ab61','tester',NULLIF('',''),'10.1.0.1',NULLIF('ether3',''),'以太网', TO_TIMESTAMP(1594623461),TO_TIMESTAMP(1594623461),NULL,0,'RADIUS','',NULL,0,0,'myclients','C4:12:F5:D4:85:70',NULL,'Framed-User','PPP',NULLIF('10.1.0.252','')::inet) rlm_sql_postgresql:状态:PGRES_COMMAND_OK rlm_sql_postgresql:查询受影响的行 = 1

(1)sql:返回SQL查询:成功

(1) sql: 更新了1条记录 rlm_sql (sql): 已释放连接 (3)

(1)[sql] = 确定

(1)[exec] = noop

(1)attr_filter.accounting_response:扩展%{用户名}

(1)attr_filter.accounting_response:-->测试人员

(1)attr_filter.accounting_response:第 12 行匹配条目 DEFAULT

(1)[attr_filter.accounting_response] = 已更新

(1) } # 会计 = 更新

(1)从 10.1.0.4:1813 向 10.1.0.1:48965 发送会计响应 ID 20,长度为 0

(1)请求完成

(1)清理请求包ID为20,时间戳+5,4.9秒后唤醒。

(0)清理请求包ID 19,时间戳+5,准备处理请求

相关内容