RADIUS:Remote Authentication Dial In User Service,遠程用戶撥號認證系統由RFC2865,RFC2866定義,是應用最廣泛的AAA協議。AAA是一種管理框架,因此,它可以用多種協議來實現。在實踐中,人們最常使用遠程訪問撥號用戶服務(Remote Authentication Dial In User Service,RADIUS)來實現AAA。
RADIUS是一種C/S結構的協議,它的客戶端最初就是NAS(Net Access Server)服務器,任何運行RADIUS客戶端軟件的計算機都可以成為RADIUS的客戶端。RADIUS協議認證機制靈活,可以采用PAP、CHAP或者Unix登錄認證等多種方式。RADIUS是一種可擴展的協議,它進行的全部工作都是基於Attribute-Length-Value的向量進行的。RADIUS也支持廠商擴充廠家專有屬性。
由於RADIUS協議簡單明確,可擴充,因此得到了廣泛應用,包括普通電話上網、ADSL上網、小區寬帶上網、IP電話、VPDN(Virtual Private Dialup Networks,基於撥號用戶的虛擬專用撥號網業務)、移動電話預付費等業務。IEEE提出了802.1x標准,這是一種基於端口的標准,用於對無線網絡的接入認證,在認證時也采用RADIUS協議。
RFC Radius 協議
RFC 2866 Radius Accounting 中文版
RFC 2869 Radius Extensions 中文版
RFC 3576 Dynamic Authorization Extensions to Radius 中文版
Radius-學習
摘 要:
目前,電信運營商和服務提供商所采用的認證方式主要有本地認證、RADIUS認證和不認證;而計費策略更是豐富多彩,常見的有不計費(包月)、按時長計費、按流量計費、按端口計費等等。目前在所有這些認證計費方式中,以采用RADIUS Server進行集中認證計費應用的最為普及和廣泛。
AAA是認證(Authentication)、授權(Authorization)和計費(Accounting)的簡稱,它是一種對網絡安全進行管理的基本框架。而RADIUS (Remote Authentication Dia• -In User Service)即遠程認證撥號用戶服務,是一種分布式的、客戶機/服務器結構的信息交互協議,它能保護網絡不受未授權訪問的干擾。二者結合可以實現對遠程接入用戶身份、權限以及流量的嚴格控制。RADIUS為服務供應商和公司提供了一種靈活通用的協議,用來完成集中式的用戶認證、口令加密、服務選擇、過濾和帳目核對等工作。當進行PAP/CHAP連接或連接第三方認證服務器時,一個單獨的RADIUS數據庫服務器可以在多個復雜網絡上同時管理多個安全系統,並可用於維護成千上萬用戶的信息安全。
RADIUS不僅指運行於服務器上的軟件,還包括網絡訪問服務器與RADIUS服務器之間的交互操作協議。
AAA可以通過多種協議來實現,在實際應用中,最常使用RADIUS協議。
RADIUS是一種分布式的、客戶端/服務器結構的信息交互協議,能保護網絡不受未授權訪問的干擾,常應用在既要求較高安全性、又允許遠程用戶訪問的各種網絡環境中。該協議定義了基於UDP(User Datagram Protocol)的RADIUS報文格式及其傳輸機制,並規定UDP端口1812、1813分別作為默認的認證、計費端口。
RADIUS最初僅是針對撥號用戶的AAA協議,后來隨着用戶接入方式的多樣化發展,RADIUS也適應多種用戶接入方式,如以太網接入等。它通過認證授權來提供接入服務,通過計費來收集、記錄用戶對網絡資源的使用。
RADIUS協議的主要特征
- 客戶端/服務器模式
- 安全的消息交互機制
- 良好的擴展性
客戶端/服務器模式
-
RADIUS客戶端
一般位於網絡接入服務器NAS(Network Access Server)上,可以遍布整個網絡,負責傳輸用戶信息到指定的RADIUS服務器,然后根據從服務器返回的信息進行相應處理(如接受/拒絕用戶接入)。
設備作為RADIUS協議的客戶端,實現以下功能:
- 支持標准RADIUS協議及擴充屬性,包括RFC2865、RFC2866。
- 對RADIUS服務器狀態探測功能。
- 計費結束請求報文的本地緩存重傳功能。
- RADIUS服務器主備或負載分擔功能。
-
RADIUS服務器
一般運行在中心計算機或工作站上,維護相關的用戶認證和網絡服務訪問信息,負責接收用戶連接請求並認證用戶,然后給客戶端返回所有需要的信息(如接受/拒絕認證請求)。RADIUS服務器通常要維護三個數據庫。

- Users:用於存儲用戶信息(如用戶名、密碼以及使用的協議、IP地址等配置信息)。
- Clients:用於存儲RADIUS客戶端的信息(如共享密鑰、IP地址等)。
- Dictionary:用於存儲RADIUS協議中的屬性和屬性值含義的信息。
安全的消息交互機制
RADIUS客戶端和RADIUS服務器之間認證消息的交互是通過共享密鑰的參與來完成的。共享密鑰是一個帶外傳輸的、客戶端和服務器都知道的字符串,不需要單獨進行網絡傳輸。RADIUS報文中有一個16字節的驗證字字段,它包含了對整個報文的數字簽名數據,該簽名數據是在共享密鑰的參與下利用MD5算法計算得出。收到RADIUS報文的一方要驗證該簽名的正確性,如果報文的簽名不正確,則丟棄它。通過這種機制,保證了RADIUS客戶端和RADIUS服務器之間信息交互的安全性。另外,為防止用戶密碼在不安全的網絡上傳遞時被竊取,在RADIUS報文傳輸過程中還利用共享密鑰對用戶密碼進行了加密。
良好的擴展性
RADIUS報文是由報文頭和一定數目的屬性(Attribute)構成,新屬性的加入不會破壞協議的原有實現。
AAA介紹
AAA概述
AAA是認證(Authentication)、授權(Authorization)和計費(Accounting)的縮寫,它是運行於NAS(網絡訪問服務器)上的客戶端程序。提供了一個用來對認證、授權和計費這三種安全功能進行配置的一致性框架,實際上是對網絡安全的一種管理。這里的網絡安全主要指訪問控制。包括哪些用戶可以訪問網絡服務器;具有訪問權的用戶可以得到哪些服務;以及如何對正在使用網絡資源的用戶進行計費。
下面簡單介紹一下AAA所提供的三種服務:
- 認證功能
AAA支持以下認證方式:
• 不認證:對用戶非常信任,不對其檢查,一般情況下不采用這種方式。
• 本地認證:將用戶信息(包括本地用戶的用戶名、密碼和各種屬性)配置在接入服務器上。本地認證的優點是速度快,降低運營成本;但存儲信息量受設備硬件條件限制。
• 遠端認證:支持通過RADIUS協議或HWTACACS協議進行遠端認證,由接入服務器作為Client端,與RADIUS服務器或TACACS服務器通信。
- 授權功能
AAA支持以下授權方式:
• 直接授權:對用戶非常信任,直接授權通過。
• 本地授權:根據寬帶接入服務器上為本地用戶賬號配置的相關屬性進行授權。
• if-authenticated授權:如果用戶通過了認證,並且使用的認證方法不是none,則對用戶授權通過。
• RADIUS認證成功后授權:RADIUS協議的認證和授權是綁定在一起的,不能單獨使用RADIUS進行授權。
- 計費功能
AAA支持以下計費方式:
• 不計費
• 遠端計費:支持通過RADIUS服務器或TACACS服務器進行遠端計費。

• 本地認證——即在NAS端進行認證、授權和計費,
• 遠程認證——通過協議進行遠程的認證、授權和計費。
AAA的實現可采用RADIUS協議。RADIUS用來管理使用串口和調制解調器的大量分散用戶。
網絡接入服務器簡稱NAS。當用戶想要通過某個網絡(如電話網)與NAS建立連接從而獲得訪問其他網絡的權利時,NAS可以選擇在NAS上進行本地認證計費,或把用戶信息傳遞給RADIUS服務器,由RADIUS進行認證計費;RADIUS 協議規定了NAS與RADIUS 服務器之間如何傳遞用戶信息和計費信息,即兩者之間的通信規則;RADIUS服務器負責接收用戶的連接請求,完成認證,並把用戶所需的配置信息返回給NAS。用戶獲得授權后,在其正常上線、在線和下線過程中,RADIUS服務器還完成對用戶賬號計費的功能。
C/S結構

RADIUS采用典型的客戶端/服務器(Client/Server)結構,它的客戶端最初就是NAS,現在任何運行RADIUS客戶端軟件的計算機都可以成為RADIUS的客戶端。NAS上運行的AAA程序對用戶來講為服務器端,對RADIUS服務器來講是作為客戶端。負責傳輸用戶信息到指定的RADIUS服務器,然后根據從服務器返回的信息進行相應處理(如接入/掛斷用戶)。RADIUS服務器負責接收用戶連接請求,認證用戶,然后給NAS返回所有需要的信息。
1、RADIUS的客戶端通常運行於接入服務器(NAS)上,RADIUS服務器通常運行於一台工作站上,一個RADIUS服務器可以同時支持多個RADIUS客戶(NAS)。
2、RADIUS的服務器上存放着大量的信息,接入服務器(NAS)無須保存這些信息,而是通過RADIUS協議對這些信息進行訪問。這些信息的集中統一的保存,使得管理更加方便,而且更加安全。
3、RADIUS服務器可以作為一個代理,以客戶的身份同其他的RADIUS服務器或者其他類型的認證服務器進行通信。用戶的漫游通常就是通過RADIUS代理實現的。簡單地說,代理就是一台服務器,可以作為其他RADIUS服務器的代理,負責轉發RADIUS認證和計費數據包。所謂漫游功能,就是代理的一個具體實現,這樣可以讓用戶通過本來和其無關的RADIUS服務器進行認證。
RADIUS在協議棧中的位置
RADIUS是一種流行的AAA協議,采用UDP協議傳輸,在協議棧中位置如下:

RADIUS為何采用UDP,而不是TCP的原因如下:
1、NAS和RADIUS服務器之間傳遞的一般是幾十至上百個字節長度的數據,用戶可以容忍幾秒到十幾秒的驗證等待時間。當處理大量用戶時服務器端采用多線程,UDP簡化了服務器端的實現過程。
2、TCP是必須成功建立連接后才能進行數據傳輸的,這種方式在有大量用戶使用的情況下實時性不好。
3、當向主用服務器發送請求失敗后,還要必須向備用的服務器發送請求。於是RADIUS要有重傳機制和備用服務器機制,它所采用的定時機制,TCP不能很好的滿足。
RADIUS協議采用的是UDP協議,數據包可能會在網絡上丟失,如果客戶沒有收到響應,那么可以重新發送該請求包。多次發送之后如果仍然收不到響應,RADIUS客戶可以向備用的RADIUS服務器發送請求包。
RADIUS網絡安全
RADIUS協議的加密是使用MD5加密算法進行的,在RADIUS的客戶端(NAS)和服務器端(RADIUS Server)保存了一個密鑰(key),RADIUS協議利用這個密鑰使用MD5算法對RADIUS中的數據進行加密處理。密鑰不會在網絡上傳送。
RADIUS的加密主要體現在以下兩方面:
包加密
在RADIUS包中,有16字節的驗證字(authenticator)用於對包進行簽名,收到RADIUS包的一方要查看該簽名的正確性。如果包的簽名不正確,那么該包將被丟棄,對包進行簽名時使用的也是MD5算法(利用密鑰),沒有密鑰的人是不能構造出該簽名的。
口令加密
在認證用戶時,用戶的口令在NAS和RADIUS Server之間不會以明文方式傳送,而是使用了MD5算法對口令進行加密。沒有密鑰的人是無法正確加密口令的,也無法正確地對加密過的口令進行解密。
口令加密與口令驗證過程
當用戶上網時,NAS將決定對用戶采用何種認證方法。下面對使用RADIUS認證的情況下PPP用戶與NAS之間的PAP和CHAP認證過程進行介紹。
- PAP 驗證
用戶以明文的形式把用戶名和他的密碼傳遞給NAS,NAS把用戶名和加密過的密碼放到驗證請求包的相應屬性中傳遞給RADIUS服務器。RADIUS服務器根據NAS上傳的帳號進行驗證來決定是否允許用戶上網並返回結果。NAS可以在其中包含服務類型屬性Attribute Service-Type=Framed-User,和Framed-Protoco• =PPP作為提示來告訴RADIUS服務器PPP是所希望的服務。
Secret password =Password XOR MD5(Challenge + Key)
(Challenge就是RADIUS報文中的Authenticator)
- CHAP驗證
對於CHAP(挑戰握手認證協議),它提供對用戶口令進行加密的機制。
當用戶請求上網時,NAS產生一個16字節的隨機碼給用戶(同時還有一個ID號,本地路由器的Host name)。用戶端得到這個包后使用自己獨有的設備或軟件客戶端將CHAP ID、用戶密碼(口令字)用MD5算法對該隨機碼進行加密生成一個Secret Password,隨同用戶名user name一並傳給NAS。
NAS把傳回來的user name和Secret Password分別作為用戶名和密碼,並把原來的16字節隨機碼以及CHAP ID傳給RADIUS服務器。RADIUS根據用戶名在服務器端查找數據庫,得到和用戶端進行加密所用的一樣的密鑰,用MD5算法對CHAP ID,密鑰和傳來的16字節的隨機碼進行加密,將其結果與傳來的Password作比較,如果相匹配,服務器送回一個接入允許數據包,否則送回一個接入拒絕數據包。
RADIUS報文
報文格式
RADIUS協議是基於UDP協議的 。

各字段的解釋如下:
-
Code:長度為1個字節,用來說明RADIUS報文的類型。不同RADIUS報文的Code值不相同。例如,Code為1時表示Access-Request報文,Code為2時表示Access-Accept報文。
-
Identifier:長度為1個字節,用來匹配請求報文和響應報文,以及檢測在一段時間內重發的請求報文。RADIUS客戶端發送請求報文后,RADIUS服務器返回的響應報文中的Identifier值應與請求報文中的Identifier值相同。
-
Length:長度為2個字節,用來指定RADIUS報文的長度。超過Length取值的字節將作為填充字符而忽略。如果接收到的報文的實際長度小於Length的取值,則該報文會被丟棄。
-
Authenticator:長度為16個字節,用來驗證RADIUS服務器的響應報文,同時還用於用戶密碼的加密。
-
Attribute:即RADIUS屬性字段,長度不定,為報文的內容主體,用來攜帶專門的認證、授權和計費信息,提供請求和響應報文的配置細節。Attribute可以包括多個RADIUS屬性,每一個RADIUS屬性都采用(Type、Length、Value)三元組的結構來表示。
- 類型(Type):長度為1個字節,取值為1~255,用於表示RADIUS屬性的編號。
- 長度(Length):長度為1個字節,表示該RADIUS屬性(包括類型、長度和屬性值)的長度,單位為字節。
- 屬性值(Value):最大長度為253字節,表示該RADIUS屬性的信息,其格式和內容由類型和長度決定。
報文類型
RADIUS認證報文
報文名稱 | 說明 |
---|---|
Access-Request | 認證請求報文,是RADIUS報文交互過程中的第一個報文,用來攜帶用戶的認證信息(例如:用戶名、密碼等)。認證請求報文由RADIUS客戶端發送給RADIUS服務器,RADIUS服務器根據該報文中攜帶的用戶信息判斷是否允許接入。 |
Access-Accept | 認證接受報文,是RADIUS服務器對RADIUS客戶端發送的Access-Request報文的接受響應報文。如果Access-Request報文中的所有屬性都可以接受(即認證通過),則發送該類型報文。RADIUS客戶端收到此報文后,用戶才能認證通過並被賦予相應的權限。 |
Access-Reject | 認證拒絕報文,是RADIUS服務器對RADIUS客戶端的Access-Request報文的拒絕響應報文。如果Access-Request報文中的任何一個屬性不可接受(即認證失敗),則RADIUS服務器返回Access-Reject報文,用戶認證失敗。 |
Access-Challenge | 認證挑戰報文。EAP中繼認證時,RADIUS服務器接收到Access-Request報文中攜帶的用戶名信息后,會隨機生成一個MD5挑戰字,同時將此挑戰字通過Access-Challenge報文發送給用戶。用戶使用該挑戰字對用戶密碼進行加密處理后,將新的用戶密碼信息通過Access-Request報文發送給RADIUS服務器。RADIUS服務器將收到的已加密的密碼信息和本地經過加密運算后的密碼信息進行對比,如果相同,則該用戶為合法用戶。 |
RADIUS計費報文
報文名稱 | 說明 |
---|---|
Accounting-Request(Start) | 計費開始請求報文。如果RADIUS客戶端使用RADIUS模式進行計費,RADIUS客戶端會在用戶開始訪問網絡資源時,向RADIUS服務器發送計費開始請求報文。 |
Accounting-Response(Start) | 計費開始響應報文。RADIUS服務器接收並成功記錄計費開始請求報文后,需要回應一個計費開始響應報文。 |
Accounting-Request(Interim-update) | 實時計費請求報文。為避免RADIUS服務器無法收到計費結束請求報文而繼續對該用戶計費,可以在RADIUS客戶端上配置實時計費功能。RADIUS客戶端定時向RADIUS服務器發送實時計費請求報文,減少計費誤差。 |
Accounting-Response(Interim-update) | 實時計費響應報文。RADIUS服務器接收並成功記錄實時計費請求報文后,需要回應一個實時計費響應報文。 |
Accounting-Request(Stop) | 計費結束請求報文。當用戶斷開連接時(連接也可以由NAS斷開),RADIUS客戶端向RADIUS服務器發送計費結束請求報文,其中包括用戶上網所使用的網絡資源的統計信息(上網時長、進/出的字節數等),請求RADIUS服務器停止計費。 |
Accounting-Response(Stop) | 計費結束響應報文。RADIUS服務器接收計費停止請求報文后,需要回應一個計費停止響應報文。 |
RADIUS認證、授權、計費流程

RADIUS CoA/DM報文
設備支持RADIUS CoA/DM功能,提供一種動態修改在線用戶權限或者強制用戶下線的機制。
RADIUS CoA/DM報文
報文名稱 | 說明 |
---|---|
CoA-Request | 動態授權請求報文。當管理員需要更改某個在線用戶的權限時(例如,管理員不希望用戶訪問某個網站),可以通過RADIUS服務器發送一個動態授權請求報文給RADIUS客戶端,使RADIUS客戶端修改在線用戶的權限。 |
CoA-ACK | 動態授權請求接受報文。如果RADIUS客戶端成功更改了用戶的權限,則RADIUS客戶端回應動態授權請求接受報文給RADIUS服務器。 |
CoA-NAK | 動態授權請求拒絕報文。如果RADIUS客戶端未成功更改用戶的權限,則RADIUS客戶端回應動態授權請求拒絕報文給RADIUS服務器。 |
DM-Request | 用戶離線請求報文。當管理員需要讓某個在線的用戶下線時,可以通過RADIUS服務器發送一個用戶離線請求報文給RADIUS客戶端,使RADIUS客戶端終結用戶的連接。 |
DM-ACK | 用戶離線請求接受報文。如果RADIUS客戶端已經切斷了用戶的連接,則RADIUS客戶端回應用戶離線請求接受報文給RADIUS服務器。 |
DM-NAK | 用戶離線請求拒絕報文。如果RADIUS客戶端無法切斷用戶的連接,則RADIUS客戶端回應用戶離線請求拒絕報文給RADIUS服務器。 |
交互流程
CoA(Change of Authorization)是指用戶認證成功后,管理員可以通過RADIUS協議來修改在線用戶的權限或對其進行重認證。

DM(Disconnect Message)是指用戶下線報文,即由RADIUS服務器主動發起的強制用戶下線的報文。

與用戶上線授權或用戶主動下線過程相比,CoA/DM的特點是請求報文是由服務器發送的,回應報文是由設備發送的,成功則回應ACK報文、失敗則回應NAK報文。
會話識別
NAS設備為用戶提供的每一個服務構成一個會話,會話的開頭定義為首次提供服務的點,會話的結束定義為服務結束點。
設備接收到RADIUS服務器的CoA-Request報文或者DM-Request報文后,根據報文中的某些RADIUS屬性來識別用戶。用來識別用戶的RADIUS屬性包括:
- RADIUS標准屬性:User-Name(1)
- RADIUS標准屬性:Acct-Session-ID(4)
- RADIUS標准屬性:Framed-IP-Address(8)
- RADIUS標准屬性:Calling-Station-Id(31)
匹配的方式包括以下兩種:
-
any方式
其中一個屬性與設備上的用戶信息進行匹配檢查。識別用戶所用的RADIUS屬性優先級為:Acct-Session-ID(4) > Calling-Station-Id(31) > Framed-IP-Address(8)。按照優先級在請求報文中查找屬性,優先找到哪個屬性就用哪個屬性與設備上的用戶信息進行匹配,匹配成功時,設備回應ACK報文,否則回應NAK報文。
-
all方式
所有的屬性與設備上的用戶信息進行匹配檢查。識別用戶所用的RADIUS屬性包括:Acct-Session-ID(4)、Calling-Station-Id(31)、Framed-IP-Address(8)和User-Name(1)。請求報文中以上屬性都要與設備上的用戶信息進行匹配,全部匹配成功時,設備回應ACK報文,否則回應NAK報文。
RADIUS服務器的CoA-Request報文或DM-Request報文與設備上的用戶信息匹配失敗時,設備會在回應的CoA-NAK報文或DM-NAK報文中通過錯誤碼描述失敗的原因。
CoA-NAK報文中的錯誤碼
名稱 | 數值 | 說明 |
---|---|---|
RD_DM_ERRCODE_MISSING_ATTRIBUTE | 402 | 請求報文中缺少關鍵屬性,導致RADIUS屬性完整性檢查失敗 |
RD_DM_ERRCODE_INVALID_REQUEST | 404 | 對請求報文進行屬性解析時,解析失敗 |
RD_DM_ERRCODE_INVALID_ATTRIBUTE_VALUE | 407 | 請求報文中包含不支持或不存在的屬性,導致屬性檢查失敗。授權檢查的內容包括:VLAN、ACL、CAR、重定向ACL編號以及基於接口的認證用戶不支持授權華為RADIUS擴展屬性RD_hw_URL_Flag和RD_hw_Portal_URL可能出現的錯誤包括:授權的業務方案不存在授權的QoS模板不存在或QoS模板中未配置用戶隊列授權的上下行優先級超過最大值授權的UCL組索引值不在規格范圍內解析ISP VLAN和出端口信息錯誤重認證屬性與其他屬性同時授權 |
RD_DM_ERRCODE_SESSION_CONTEXT_NOT_FOUND | 503 | 會話請求失敗。包括:當前針對請求用戶的授權正在處理申請RADIUS臨時表失敗用戶信息不匹配或未找到用戶用戶非RADIUS認證用戶 |
RD_DM_ERRCODE_RESOURCES_UNAVAILABLE | 506 | 其他授權失敗的情況使用該錯誤碼 |
DM-NAK報文中的錯誤碼
名稱 | 數值 | 說明 |
---|---|---|
RD_DM_ERRCODE_INVALID_REQUEST | 404 | 對請求報文進行屬性解析時,解析失敗 |
RD_DM_ERRCODE_SESSION_CONTEXT_NOT_REMOVABLE | 504 | 用戶刪除失敗或用戶不存在 |