Radius 学习杂记

Radius rfc2866和rfc2865 学习杂记

RFC2866 计费协议  http://www.ietf.org/rfc/rfc2866.txt

RFC2865 认证协议 http://www.ietf.org/rfc/rfc2865.txt

 

认证服务的监听端口号为1812,记费服务的监听端口号为1813。

 

RADIUS的基本工作原理:用户接入NAS,NAS向RADIUS服务器使用Access-Require数据包提交用户信息,包括用户名

、密码等相关信息,其中用户密码是经过MD5加密的,双方使用共享密钥,这个密钥不经过网络传播;RADIUS服务器对用

户名和密码的合法性进行检验,必要时可以提出一个Challenge,要求进一步对用户认证,也可以对NAS进行类似的认证

;如果合法,给NAS返回Access-Accept数据包,允许用户进行下一步工作,否则返回Access-Reject数据包,拒绝用户访

问;如果允许访问,NAS向RADIUS服务器提出计费请求Account-Require,RADIUS服务器响应Account-Accept,对用户的

计费开始,同时用户可以进行自己的相关操作。

 

基本过程如下:(NAS->Radius 认证计费过程)

Radius 学习杂记_第1张图片

1、用户拨入后(1),所拨入的设备(比如NAS)将拨入用户的用户的信息(比如用户名、口令、所占用的端口等等)打包向RADIUS服务器发送(2)。

2、如果该用户是一个合法的用户,那么Radius告诉NAS该用户可以上网,同时传回该用户的配置参数(3);否则,Radius反馈NAS该用户非法的信息(3)。

3、如果该用户合法,MAS就根据从RADIUS服务器传回的配置参数配置用户(4)。如果用户非法,NAS反馈给用户出错信息并断开该用户连接(4)。

4、如果用户可以访问网络,RADIUS客户要向RADIUS服务器发送一个记费请求包表明对该用户已经开始记费(5),RADIUS服务器收到并成功记录该请求包后要给予响应(6)。

5、当用户断开连接时(连接也可以由接入服务器断开)(7),RADIUS客户向RADIUS服务器发送一个记费停止请求包,其中包含用户上网所使用网络资源的统计信息(上网时长、进/出的字节/包数等)(8),RADIUS服务器收到并成功记录该请求包后要给予响应(9)。

《NAS和Radius服务器设计》

3.2  NAS设计

  (1)RADIUS客户端处理程序:负责接收申请者的信息;向RADIUS服务器提交认证、计费、管理等数据包;向申请者返回相应结果。

  (2)服务器管理程序:为了方便网络管理员对RADIUS服务器和数据库的管理,在NAS主机上,还可以运行服务器管理程序,管理程序的功能应该包括有:管理员模块(添加、删除网络管理员,设置管理员权限等);用户信息模块(实现用户的查询、添加、删除等操作);计费信息模块(查询用户的计费信息,创建、修改、删除各种不同的计费方式,);日志信息模块等。

  (3)用户信息的提交:用户需要向NAS提交用户信息,有多种方法可以实现,最简单的方法是采用Web方式提交。在NAS上建立一个Web服务器,这样,用户可以直接使用浏览器来和NAS交互,Web服务器接受到用户提交的信息后,把这些信息传给RADIUS的客户端处理程序。后者把这些信息封装成RADIUS的接入请求(Access-Request)包格式,通过认证端口(1812)向RADIUS服务器提出认证请求。

  (4)计费信息的提交:认证通过之后,NAS客户端程序通过认证端口(1812)向RADIUS服务器发送包含有用户名、用户IP、上网起始时间等信息的“计费请求开始”包(Accounting-Request Start),通知RADIUS服务器开始计费。RADIUS服务器在数据库中纪录下相应项,并返回“计费响应”包(Accounting-Response)。当用户下网时,NAS向RADIUS服务器发送包含有结束时间、数据流量等信息的“计费请求结束”包(Accounting-Request Stop)。后者返回“计费响应”包(Accounting-Response)确认。

  (5)服务器管理程序的提交:也通过RADIUS客户端处理程序来向RADIUS服务器提交。客户端处理程序将管理程序的请求包装成标准的RADIUS包格式,并通过为服务器管理程序定义一个端口号提交给RADIUS服务器。

 

3.3  RADIUS服务器设计

  RADIUS服务器处理来自NAS的各项数据和实现对数据库的操作,并返回相应的结果。RADIUS客户端和服务器端的协议通信采用Socket编程来实现。

  (1)对数据库的操作:RADIUS服务器通过数据库接口与数据库建立起连接。在RADIUS服务器中用SQL语句实现所需的数据库操作模块(如:用户、计费、管理员等信息的查询、添加、修改等操作),当RADIUS服务器需要对数据库操作时,就调用相应的模块。

  (2)认证包处理:通过*认证端口(1812),来监测NAS提交的认证数据包,收到认证包后,查询数据库验证用户,并把结果以RADIUS数据包格式从1812端口返回。对于多个用户申请并发的情况,使用多线程方式处理。

  (3)计费包的处理:当用户的认证通过时,查询该用户计费信息。确定其计费类型、费率等。当*到NAS在计费端口(1813)提交计费包后,就向数据库中添加“计费请求开始”包中所提交的计费信息(包括用户名、上网起始时间等)。在收到用户下网的“计费请求结束”后,根据包中提交的用户结束时间、数据流量等信息,计算用户的上网时长和数据流量,并根据用户计费类型来计算出用户本次上网费用,记录入数据库。

  (4)服务器管理程序请求的处理:*管理程序请求的端口(自定义),收到后解包并执行相应的处理函数。

Radius 计费结束原因

RFC2866

This attribute indicates how the session was terminated, and can

      only be present in Accounting-Request records where the Acct-

      Status-Type is set to Stop.

 

    0                   1                   2                   3

    0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |     Type      |    Length     |             Value

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

              Value (cont)         |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  

 

 Type

      49 for Acct-Terminate-Cause

 Length

      6

 Value

    The Value field is four octets, containing an integer specifying

     the cause of session termination, as follows:

      1       User Request

      2       Lost Carrier

      3       Lost Service

      4       Idle Timeout

      5       Session Timeout

      6       Admin Reset

      7       Admin Reboot

      8       Port Error

      9       NAS Error

      10      NAS Request

      11      NAS Reboot

      12      Port Unneeded

      13      Port Preempted

      14      Port Suspended

      15      Service Unavailable

      16      Callback

      17      User Error

      18      Host Request

 

 

5.1.  Acct-Status-Type

 

   Description

 

      This attribute indicates whether this Accounting-Request marks the

      beginning of the user service (Start) or the end (Stop).

 

      It MAY be used by the client to mark the start of accounting (for

      example, upon booting) by specifying Accounting-On and to mark the

      end of accounting (for example, just before a scheduled reboot) by

      specifying Accounting-Off.  

 

    0                   1                   2                   3

    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |     Type      |    Length     |             Value

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

              Value (cont)         |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

 

   Type

 

      40 for Acct-Status-Type.

 

   Length

 

      6

 

   Value

 

      The Value field is four octets.

 

       1      Start

       2      Stop

       3      Interim-Update

       7      Accounting-On

       8      Accounting-Off

       9-14   Reserved for Tunnel Accounting

      15      Reserved for Failed   

 

 

你可能感兴趣的:(Radius 学习杂记)