Freeradius 3.0 不通过 mysql 发送任何数据radacct 表为空

问题描述

我已经在 Ubuntu (20.04) 中部署了一个带有 MysqL 的 freeradius 服务器版本 3.0。 有radius和MysqL各自的版本:

root@server:/etc/freeradius/3.0# MysqL -V
MysqL  Ver 8.0.23-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
root@server:/etc/freeradius/3.0# freeradius -v
radiusd: FreeRADIUS Version 3.0.20,for host x86_64-pc-linux-gnu,built on Jan 25 2020 at 06:11:13
FreeRADIUS Version 3.0.20
copyright (C) 1999-2019 The FreeRADIUS server project and contributors

我的情况是:我需要从手机连接到接入点并使用半径数据库中指定的用户名和密码对该 WLAN 网络 (802.11i-WPA-802.1x) 进行身份验证。

我想将每个用户(在本例中为 demouser)的并发登录数限制为 1,因为我只有一个唯一用户。我花了很多时间搜索论坛和文档,但找不到任何可以解决的问题。

这是调试模式下 freeradius 的 output

我对在数据库中创建用户的最佳方式有几个疑问。 目前它以基本方式配置,也就是说我在 radcheck 表中指定了用户,在 nas 表中指定了我的客户端(接入点):

MysqL> SELECT * FROM nas;
+----+-------------+-----------+-------+-------+----------+--------+-----------+---------------+
| id | nasname     | shortname | type  | ports | secret   | server | community | description   |
+----+-------------+-----------+-------+-------+----------+--------+-----------+---------------+
|  1 | 172.20.1.20 | AP_1      | other |  NULL | 12345678 | NULL   | NULL      | Client Radius |
+----+-------------+-----------+-------+-------+----------+--------+-----------+---------------+
1 row in set (0.00 sec)
MysqL> SELECT * FROM radcheck; SELECT * FROM radgroupcheck; SELECT * FROM radgroupreply; SELECT * FROM radusergroup;
+----+----------+--------------------+----+----------+
| id | username | attribute          | op | value    |
+----+----------+--------------------+----+----------+
|  1 | demouser | Cleartext-Password | := | demopass |
+----+----------+--------------------+----+----------+
1 row in set (0.00 sec)

+----+------------+------------------+----+-------+
| id | groupname  | attribute        | op | value |
+----+------------+------------------+----+-------+
|  1 | demo_group | Simultaneous-Use | := | 1     |
+----+------------+------------------+----+-------+
1 row in set (0.00 sec)

+----+------------+--------------------+----+---------------------+
| id | groupname  | attribute          | op | value               |
+----+------------+--------------------+----+---------------------+
|  1 | demo_group | Service-Type       | := | Framed-User         |
|  2 | demo_group | Framed-Protocol    | := | PPP                 |
|  3 | demo_group | Framed-Compression | := | Van-Jacobsen-TCP-IP |
+----+------------+--------------------+----+---------------------+
3 rows in set (0.00 sec)

+----+----------+------------+----------+
| id | username | groupname  | priority |
+----+----------+------------+----------+
|  1 | demouser | demo_group |        0 |
+----+----------+------------+----------+
1 row in set (0.00 sec)

如果我看到日志文件,则身份验证成功:

  • 这是/var/log/freeradius/sqllog.sql

    输出

    INSERT INTO radpostauth (username,pass,reply,authdate) VALUES ( 'demouser','','Access-Accept','2021-04-27 09:04:19');

  • 这是/var/radacct/172.20.1.20/auth-detail....

    的另一个输出
    Tue Apr 27 09:37:46 2021
    Packet-Type = Access-Request
    User-Name = "demouser"
    Service-Type = Framed-User
    NAS-IP-Address = 172.20.1.20
    NAS-Port = 1
    NAS-Port-Id = "1"
    State = 0x7eea823f76e09b79e9fd1595f5ebf47a
    Called-Station-Id = "EC-E5-55-FF-FB-34:HirsCHMANN_C"
    NAS-Port-Type = Wireless-802.11
    WLAN-RF-Band = 2
    WLAN-Pairwise-Cipher = 1027076
    WLAN-Group-Cipher = 1027076
    WLAN-AKM-Suite = 1027073
    Calling-Station-Id = "78-B8-D6-32-9A-32"
    Connect-Info = "CONNECT 72 Mbps 802.11g/n"
    NAS-Identifier = "AP_1"
    Framed-MTU = 1500
    EAP-Message = 0x020a002e190017030300230000000000000004425534a3fe3939c900e3f3f672628ae179e4a05c48c1964a31dba1
    Message-Authenticator = 0xd87613c17b7b62950f6613cbca20e109
    Event-Timestamp = "Apr 27 2021 09:37:46 CEST"
    Timestamp = 1619509066
    
    

如果我从 radpostauth 表中执行选择,我还会看到用户已成功通过身份验证。

MysqL> select * from radpostauth;
+----+----------+------+---------------+---------------------+
| id | username | pass | reply         | authdate            |
+----+----------+------+---------------+---------------------+
| 55 | demouser |      | Access-Accept | 2021-04-27 09:04:19 |
| 56 | demouser |      | Access-Accept | 2021-04-27 09:04:19 |
+----+----------+------+---------------+---------------------+

问题是在 radacct 表中没有存储数据,当我执行选择时它显示为空,我创建了另一个具有相同结构并在 MysqL 配置文件中指定的表 radaacct2 但也没有插入任何数据.

据我所知(如果我错了,请纠正我)Radius 将会计数据存储在 radacct 表中。我读过这个document

如果没有存储数据,下面的查询将无法正确执行。 /etc/freeradius/3.0/main/MysqL/queries.conf

#######################################################################
# Simultaneous Use Checking Queries
#######################################################################
# simul_count_query     - query for the number of current connections
#                       - If this is not defined,no simultaneous use checking
#                       - will be performed by this module instance

simul_count_query = "\
        SELECT COUNT(*) \
        FROM ${acct_table1} \
        WHERE username = '%{sql-User-Name}' \
        AND acctstoptime IS NULL"

总之,我需要控制特定用户的同时登录以及无法正常工作的原因我认为是由于没有将数据插入到MysqL表中。我可能是错的,因为我是新手,请在这种情况下,有人向我提供有关如何解决此问题的信息或具体说明有问题的错误是什么。

我已经为此工作了数周,这是我需要配置的最后一件事,但我无法弄清楚。

如果需要更多配置文件,请告诉我,我会附上它们。

请帮忙

PD:作为额外信息,我必须补充一点,我已按照此 page 上的配置步骤进行操作,但仍然无法正常工作。

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)