ubuntu · 2025-03-31 0

FreeRadius 搭建及操作

1.安装 freeradius

apt install freeradius freeradius-ldap

2.测试 freeradius

2.1 停止服务

安装成功后会启动 redius 服务器,需要手动执行停止服务,便于后续操作

service freeradius stop

2.2 配置用户

修改配置文件配置文件所在路由 /etc/freeradius/

修改 users 文件,把默认注释掉的用户,取消注释,客户端便可使用此用户连接服务器

steve   Cleartext-Password := "testing"
        Service-Type = Framed-User,
        Framed-Protocol = PPP,
        Framed-IP-Address = 172.16.3.33,
        Framed-IP-Netmask = 255.255.255.0,
        Framed-Routing = Broadcast-Listen,
        Framed-Filter-Id = "std.ppp",
        Framed-MTU = 1500,
        Framed-Compression = Van-Jacobsen-TCP-IP

也可增加用户

# On no match, the user is denied access.
test1   Cleartext-Password := "123456"
test2   Cleartext-Password := "654321"

2.3开启服务

使用 service freeradius start 或 freeradius -X 启动服务,-X 是调试模式

service freeradius start
freeradius -X

2.4测试

打开一个控制台,执行

radtest steve testing localhost 1812 testing123

其中参数分别 steven->用户名、tesdting->密码、localhost ->IP、1812->端口、testing123->key(key是/clients.conf中的secret),操作及返回如下:

root@localhost:~# radtest steve testing localhost 1812 testing123
Sent Access-Request Id 91 from 0.0.0.0:41321 to 127.0.0.1:1812 length 75
    User-Name = "steve"
    User-Password = "testing"
    NAS-IP-Address = 127.0.0.1
    NAS-Port = 1812
    Cleartext-Password = "testing"
Received Access-Accept Id 91 from 127.0.0.1:1812 to 127.0.0.1:41321 length 89
    Message-Authenticator = 0x60d52e64c374d6fc3f6c36410247a557
    Service-Type = Framed-User
    Framed-Protocol = PPP
    Framed-IP-Address = 172.16.3.33
    Framed-IP-Netmask = 255.255.255.0
    Framed-Routing = Broadcast-Listen
    Filter-Id = "std.ppp"
    Framed-MTU = 1500
    Framed-Compression = Van-Jacobson-TCP-IP

3.配置远程可访问

修改 clinet.conf 文件,添加客户端配置

client 0.0.0.0/0 {
        secret          = testing123
}

4.java 操作 freeradius

4.1pom 依赖

<dependency>
    <groupId>com.globalreachtech</groupId>
    <artifactId>tinyradius-netty</artifactId>
    <version>1.5.12</version>
</dependency>

<dependency>
    <groupId>org.tinyradius</groupId>
    <artifactId>tinyradius</artifactId>
    <version>1.1.3</version>
</dependency>

4.2连接

@Test
public void testConnection() throws Exception {
    String host = "192.168.3.205";
    String shared = "testing123";
    String user = "steve";
    String pass = "testing";
    RadiusClient rc = null;
    try {
        rc = new RadiusClient(host, shared);
        rc.setSocketTimeout(3);
        rc.setAuthPort(1812);
        AccessRequest accessRequest = new AccessRequest(user, pass);
        accessRequest.setAuthProtocol("chap");

        RadiusPacket authenticate = rc.authenticate(accessRequest);

        if (authenticate.getPacketType() == 2) {
            System.out.println("radius 认证通过!");
        } else {
            System.out.println("radius 认证不通过!");
        }
        ;
    } finally {
        if (rc != null) {
            rc.close();
        }
    }
}