linux aaa认证服务器,西加云杉700E设备AAA认证之Radius服务器与AC的交互

简介

目的: Radius服务器能接收到从AC设备发送来的报文信息。

备注:本文中的Radius服务器使用的是windows版本。

文章结构

AC配置

Radius服务器配置

测试

AC配置

// 配置一个radius服务器

aaa authentication-server radius radius_test

// radius服务器地址

host 192.168.1.138

// 密钥

key 123456789

// AC标识符

nas-identifier natshell

// AC的ip地址

nas-ip 192.168.1.199

// 使用的vlan

source-interface vlan 20

// 配置服务器组

aaa server-group server_group_test

// 将这个radius服务器配置到服务器组中

auth-server radius_test

// 将服务器组配置到captive-portal中

aaa authentication captive-portal inter_captive_portal

server-group server_group_test

192.168.1.138为radius服务器地址

192.168.1.199为AC的ip地址 key 为与radius服务器对接时的密钥

Radius服务器配置

修改根目录下的client文件

\etc\raddb\clients.conf

// 配置AC为radius的服务器

client 192.168.1.199/24 {

#与AC中配置key相同

secret = 123456789

#别名(随意起)

shortname= test

}

测试

步骤

启动本地FreeRadius服务器

向AC发送认证请求

在FreeRadius服务器的命令行查看数据接收状态

启动本地FreeRadius服务器

15358b739677a83a1dffa2af3c023076.png

向AC发送认证请求

具体发送方式请参考文末参考博客,这里只提供调用的方法

调用报文发送方法

/**

* 上线请求测试

*/

public static void ChapAuthTest() {

new SkspruceChapAuth("192.168.1.199", 2000, "192.168.1.200", "zyt", "123456", Utils.getRandom(65025, 0))

.start();

}

方法源码

package tlv.socket;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.net.UnknownHostException;

import java.util.ArrayList;

import java.util.List;

import tlv.bean.Attr;

import tlv.bean.TlvHwBean;

import tlv.enums.TlvType;

import tlv.tools.TlvSkspruce;

/**

* 西加云杉700E设备认证

* @author yet

*

*/

public class SkspruceChapAuth extends Thread {

private DatagramSocket s;

private InetAddress hostAddress;

private byte[] buf = new byte[1000];

private DatagramPacket dp = new DatagramPacket(buf, buf.length);

private byte[] bufRe = new byte[1000];

private DatagramPacket dpRe = new DatagramPacket(bufRe, bufRe.length);

private int port;

private String userIp;

private int serialNo;

private String username;

private String password;

public void run() {

try {

s.send(Dgram.toDatagram(ReqChallenge(), hostAddress, port));

s.receive(dp);

TlvHwBean b = parse(dp.getData());

if(b.getErrCode()==0){

System.out.println("获取Challenge成功");

System.out.println("开始发送认证");

s.send(Dgram.toDatagram(ReqAuth(b.getReqId()), hostAddress, port));

s.receive(dpRe);

TlvHwBean bre = parse(dpRe.getData());

if(bre.getErrCode()==0){

System.out.println("用户认证成功");

}else{

System.out.println("用户认证失败");

}

}else{

System.out.println("获取Challenge失败");

}

} catch (IOException e) {

e.printStackTrace();

System.exit(1);

}

}

/**

* 生成Challenge的请求

* @return

*/

public byte[] ReqChallenge() {

List attr = new ArrayList();

Attr a = new Attr(1, username.getBytes());

Attr b = new Attr(2, password.getBytes());

attr.add(a);

attr.add(b);

return TlvSkspruce.buildSkspruce(TlvType.ReqChallenge,serialNo,0, userIp, attr);

}

/**

* 生成认证请求

* @param reqId

* @return

*/

private byte[] ReqAuth(int reqId){

List attr = new ArrayList();

Attr a = new Attr(1, username.getBytes());

Attr b = new Attr(2, password.getBytes());

attr.add(a);

attr.add(b);

return TlvSkspruce.buildSkspruce(TlvType.ReqAuth,serialNo, reqId, userIp, attr);

}

/**

* 将byte[]转为TlvHwBean

* @param a

* @return

*/

private TlvHwBean parse(byte[] a){

return TlvSkspruce.parseHw(a);

}

/**

* @param ip AC的ip地址

* @param port AC监听的端口

* @param userIp 用户内网ip

* @param username 用户名

* @param password 密码

* @param serialNo 一段时间内唯一的序列号

*/

public SkspruceChapAuth(String ip, int port,String userIp,String username,String password,int serialNo) {

this.port = port;

this.userIp = userIp;

this.serialNo = serialNo;

this.username = username;

this.password = password;

try {

s = new DatagramSocket();

hostAddress = InetAddress.getByName(ip);

} catch (UnknownHostException e) {

System.err.println("Cannot find host");

System.exit(1);

} catch (SocketException e) {

System.err.println("Can't open socket");

e.printStackTrace();

System.exit(1);

}

System.out.println("请求开始");

}

}

在FreeRadius服务器的命令行查看数据接收状态

命令行打印出新的内容表示接收到了从AC传来的数据,图中报错是因为mysql数据库未启动

5dbeb552900225e8747794d83db7398c.png

下载链接

参考博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值