如何解决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 举报,一经查实,本站将立刻删除。