mysql - 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
我的情况是:我需要从手机连接到接入点并使用在 radius 数据库中指定的用户名和密码对该 WLAN 网络 (802.11i-WPA-802.1x) 进行身份验证。
我想将每个用户(在这种情况下为 demouser)的并发登录数限制为 1,因为我只有一个唯一用户。我花了很多时间搜索论坛和文档,但找不到任何东西。
这是调试模式下 freeradius 的输出。
我对在数据库中创建用户的最佳方式有几个疑问。目前它以基本方式配置,也就是说我在 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 配置文件中指定的 radacct2 表,但也没有插入数据。
据我了解(如果我错了,请纠正我)Radius 将会计数据存储在 radacct 表中。我读了这份文件
如果没有存储数据,下面的查询将无法正确执行。/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:作为额外信息,我必须补充一点,我已按照此页面上的配置步骤进行操作,但它仍然无法正常工作。
谢谢
解决方案
推荐阅读
- php - Arduino 无法将数据发布到 PHP
- javascript - d3 v6 围绕中心而不是光标缩放
- postgresql - Postgresql 驱动程序声称在将环境传递给 DOCKER 的应用程序属性时不接受 JDBC URL
- odoo - 如何使用 shell 命令访问 Odoo 环境中的自定义模型数据?
- gdb - 使用 OpenOCD 从 clion 闪烁和运行失败:错误必须在 init 之前使用 tcl port 命令
- laravel - Laravel 护照错误不支持 grant_type
- node.js - 如何访问/显示 json 对象的元素作为搜索结果而不是整个字段对象?搜索界面/弹性搜索
- vue.js - Nuxt 生产环境中的 404 错误
- c++ - 堆栈分配随机偏移 C++ Windows
- c# - 当我使用 C# 字典中的 Dapper DynamicParameter 时,未向存储过程提供参数