skydiablo/skyradius

第一个(据我所知)用PHP原生实现的RADIUS服务器!基于ReactPHP的强大功能,我能够编写这个库。目前实现了RFC2865、RFC2866、RFC2868 + RFC2869,如果您想贡献,可以跟进RFC2867(我总是很高兴看到PRs ;) )。

dev-master 2024-07-11 08:27 UTC

This package is auto-updated.

Last update: 2024-09-11 08:45:58 UTC


README

第一个(据我所知)用PHP原生实现的RADIUS服务器!基于ReactPHP的强大功能,我能够编写这个库。目前实现了RFC2865、RFC2866、RFC2868 + RFC2869,如果您想贡献,可以跟进RFC2867(我总是很高兴看到PRs ;) )。

示例

进入 ./Example/ 目录

cd ./Example/

加载供应商库

composer install

freeRADIUS 项目安装 radclient

sudo apt install freeradius-utils

运行 SkyDiablo/SkyRadius 示例服务器

php radius.php

在独立的控制台会话中运行 radclient

echo "User-Name=test,User-Password=mypass,Framed-Protocol=PPP" | radclient -x 127.0.0.1:3500 auth test

Sent Access-Request Id 31 from 0.0.0.0:52235 to 127.0.0.1:3500 length 50
        User-Name = "test"
        User-Password = "mypass"
        Framed-Protocol = PPP
        Cleartext-Password = "mypass"
Received Access-Accept Id 31 from 127.0.0.1:3500 to 0.0.0.0:0 length 110
        Reply-Message = "Echo Test-Radius-Server"
        User-Name = "test"
        User-Password = "ѣ\3332a\274\016({\312A\257P\3623\214\273-\342\331Z\035\024:\267\254i#h'\200\262\021f˷c\305y2*\201qlNh\234\236u\377\207"
        Framed-Protocol = PPP 
  • 如你所见,echo缺少了属性 Cleartext-Password -> 默认情况下还没有实现,但很快会有 ;)
  • 同时忽略看起来神秘的 User-Password 属性,对于这个属性的服务器端加密也尚未实现。但根据RFC,服务器永远不会做这件事!

基准测试

除了上述示例之外,您可以通过改进请求来对您的 SkyDiablo/SkyRadius 实例进行压力测试

echo "User-Name=test,User-Password=mypass,Framed-Protocol=PPP" | radclient -n 1000 -c 99999999999 127.0.0.1:3500 auth test

在我的设置中,我能够以90%的CPU负载处理每秒15k个请求,使用这里提到的演示服务器。为此,我在同一服务器上启动了5次radclient,使用-n 40000,并将输出重定向到> /dev/null。使用的CPU:Intel(R) Xeon(R) Gold 6140 CPU @ 2.30GHz,2核

15k Benchmark Test

待办事项

  • 属性字典加载器
    • YAML
    • JSON
  • 单元测试

感谢

  • 感谢 reactPHP 的出色工作!
  • BaconFist 提供了基准测试服务器,感谢!