跳到正文
Lutong's Homepage

华为H3C实战 | 第33章 AAA 认证与 RADIUS 对接

📚 本系列共 43 篇(第 33 / 43 篇) · 第五卷 BRAS 与认证计费篇 —— 大规模用户接入

← 上一篇:第 32 章 BRAS PPPoE 服务器配置  下一篇:第 34 章 IPoE 接入与 Web/Portal 认证 →


本章导读:BRAS 不做决策只做执行——账号在 RADIUS,带宽属性也在 RADIUS,BRAS 只是照着属性去执行。本章把 AAA 三件套、RADIUS 报文交互和两家设备上的域/方案/服务器模板配置讲清楚。

本章结构:

  • 33.1 功能原理与业务场景 —— 认证/授权/计费各管什么、RADIUS 报文往返全过程(Access-Request → Accept 带授权属性 → 计费 Start/Stop)、为什么账号必须集中管理、认证通过后被拒的三种常见原因
  • 33.2 华为设备配置详解 —— RADIUS 服务器模板、认证/计费方案、域与地址池绑定的完整模板
  • 33.3 H3C 设备配置详解 —— RADIUS scheme 写法与差异标注
  • 33.4 华为 / H3C 命令对照表
  • 33.5 配置验证 —— 在线用户、认证失败记录、RADIUS 计数、计费报文状态
  • 33.6 排错与故障树 —— “密码对但认证失败"“能认证但没计费"的分支定位
  • 33.7 新手踩坑与注意事项
  • 33.8 本章小结

重点提示:认证失败先分清是"BRAS 根本没发请求”(域/服务器模板问题)还是"服务器回了 Reject”(账号或属性问题),33.1.2 的报文图就是判断依据;想改限速却发现改 BRAS 没用,那是要改 RADIUS 属性——见 35.1 开头。 关联章节:PPPoE 服务器上线流程见第 32 章;IPoE 场景下的 Portal 与 RADIUS 见第 34 章;属性下发的执行侧(限速、ACL)见第 35 章;AAA 通用认证(设备管理登录)见第 30 章。

33.1 功能原理与业务场景

33.1.1 这功能是干嘛的(通俗版)

AAA 是三个英文词的缩写,但你可以把它想成酒店前台的三件套:

  • 认证(Authentication):「请出示身份证」——你得证明你是你,也就是核对用户名和密码。
  • 授权(Authorization):「您订的是行政套房」——认证通过了,接下来告诉你有什么权限、多大的带宽、哪些网站能上。
  • 计费(Accounting):「您住了三晚,消费 XX 元」——你用了多少资源,记下来好结账。

RADIUS(远程认证拨号用户服务,Remote Authentication Dial-In User Service)[8] 就是前台打电话给总部查身份证的那条电话线。BRAS 是前台,RADIUS 服务器是总部档案室。

为什么 BRAS 不能自己存账号?三个理由:

  1. 量太大:一个学校 3 万账号,一个 BRAS 存不下、也管不过来。
  2. 要集中:账号要在全校/全省统一,不能每台 BRAS 各存一份。
  3. 要能实时改:用户欠费了要立刻断,改本地配置根本来不及。

所以BRAS 不做决策,只做执行。这个认知是本章的核心,也是新手最容易搞反的地方——你以为你要在 BRAS 上配限速,其实你要在 RADIUS 上配属性,BRAS 只是照着属性去执行。

33.1.2 RADIUS 报文是怎么走的

RADIUS 基于 UDP,认证用 1812 端口,计费用 1813 端口(老设备用 1645/1646)。完整交互:

   BRAS(客户端 NAS)                      RADIUS 服务器
   ─────────────────                    ──────────────
   ① Access-Request
      ├─ User-Name: user1@isp_dorm
      ├─ CHAP-Password(或 User-Password 带 PAP)
      ├─ NAS-IP-Address: 10.200.0.2
      ├─ NAS-Port-Id: 1/0/2.1:100
      └─ Called-Station-Id: 00-11-22-33-44-55
                                    ────────→
                                          ② 查库、校验
                        ←───────────────  ③ Access-Accept(或 Access-Reject)
      Access-Accept 里带授权属性:
      ├─ Framed-IP-Address: 10.200.10.88   (指定固定IP)
      ├─ Framed-Pool: pool_vip             (用哪个地址池)
      ├─ Filter-Id: acl_campus             (下发ACL)
      ├─ Session-Timeout: 3600             (1小时强制重认证)
      └─ Idle-Timeout: 600                 (空闲10分钟踢)
      
   ④ 用户上网(数据不走RADIUS,直接转发!)
   
   ⑤ Accounting-Request(Start)  ────────→  计费开始
      ├─ Acct-Status-Type: Start
      ├─ Acct-Session-Id: 8a1b2c3d
      └─ User-Name / NAS-IP-Address
                        ←───────────────  ⑥ Accounting-Response
   
   ⑦ 用户下线
   ⑧ Accounting-Request(Stop)   ────────→  计费结束
      ├─ Acct-Status-Type: Stop
      ├─ Acct-Session-Time: 1830          (秒)
      ├─ Acct-Input-Octets: 12345678      (下行字节)
      ├─ Acct-Output-Octets: 2345678      (上行字节)
      └─ Acct-Terminate-Cause: User-Request
                        ←───────────────  ⑨ Accounting-Response

这张图上有三个必须刻在脑子里的点:

  1. RADIUS 只管认证和计费,不管数据转发。用户上网流量完全不经过 RADIUS 服务器。如果 RADIUS 挂了,已经在线的用户照样能上网,只是新用户上不来——这是个非常重要的现象,第 36 章会用到。
  2. 认证报文和计费报文是分开的两条流。认证失败和计费失败是两个完全独立的问题,症状也不同。
  3. Acct-Session-Id 是整条会话的身份标识。一个用户多次上下线,每次的 Session-Id 都不同,这是对账的关键。

33.1.3 常用 RADIUS 属性:这才是 BRAS 的「遥控器」

属性(Attribute)是本章最核心的概念。BRAS 收到 Access-Accept 后,会逐条读取里面的属性,然后照着做。常用的属性:

属性 编号 作用 BRAS 怎么执行
User-Name 1 用户名 请求里带出去
User-Password 2 PAP 密码(加密) 请求里带出去
CHAP-Password 3 CHAP 应答 请求里带出去
NAS-IP-Address 4 客户端 IP 请求里带出去,服务器据此识别哪台 BRAS
Framed-IP-Address 8 指定用户的 IP 直接把这个 IP 发给用户
Framed-IP-Netmask 9 指定掩码 配合上面用
Framed-Routing 10 路由方式 —
Filter-Id 11 下发过滤策略名 BRAS 找到同名 ACL/策略并套用
Framed-MTU 12 用户侧 MTU 覆盖 VT 上的设置
Session-Timeout 27 会话最大时长 到点强制下线重认证
Idle-Timeout 28 空闲超时 长时间无流量就踢
Framed-Pool 88 指定地址池 用户从这个池取地址
Framed-IPv6-Prefix 97 IPv6 前缀 双栈场景
Class 25 服务器回传的不透明数据 BRAS 原样带回计费包

四个最常用、也最容易配错的属性,重点讲:

① Framed-IP-Address(8):给用户固定 IP。 在 RADIUS 的 users 文件里给某个账号配这个属性,用户上线时就一定拿到这个 IP。适用场景:服务器、打印机、监控设备。

② Framed-Pool(88):让用户从指定池取地址。 注意它和 Framed-IP-Address 的区别:前者给「池」,后者给「具体 IP」。一个域可以绑默认池,但某些用户通过 Framed-Pool 走 VIP 池——这是做差异化服务的标准手法。

③ Filter-Id(11):下发 ACL。 这是「按用户下发访问控制」的核心。服务器返回 Filter-Id = "acl_library",BRAS 就去找本地名为 acl_library 的 ACL 并套用。关键点:ACL 本身要在 BRAS 上预先配好,RADIUS 只负责「点名」,不负责「定义」。这是新手最常搞混的:以为在 RADIUS 上写个 Filter-Id 就能凭空下发一条规则,结果 BRAS 上没这个 ACL,下发失败或静默忽略。

④ Session-Timeout(27)与 Idle-Timeout(28):会话寿命控制。 前者是「绝对时长」,后者是「空闲时长」。运营商常用 Session-Timeout 做「每 24 小时强制重拨一次」,好处是能把地址换个位置、也能重新核对一次欠费状态。

33.1.4 厂商私有属性:厂商差异的根源

标准属性不够用时,各家厂商会扩展私有属性(Vendor-Specific Attribute,VSA)。这就是跨厂商对接时最大的坑:华为和 H3C 的私有属性编号和含义完全不同,服务器要按厂商分别下发。

最典型的就是「带宽限速」这件事,标准属性里根本没有,必须用私有属性:

   华为侧(举例形态)                   H3C 侧(已核实的官方示例)
   ─────────────────                   ──────────────────────
   VSA 携带上下行速率                  H3C_Input_Average_Rate
   具体属性名按华为文档                 H3C_Output_Average_Rate
   (第35章会详细给出)                 (单位 bps,官方示例:4000000)

H3C 这两个属性的含义,官方 BRAS 配置举例里给得很明确:H3C_Input_Average_Rate 和 H3C_Output_Average_Rate 用来给用户下发上下行平均速率限制,单位是 bps。所以 4000000 就是 4Mbps。这个在 FreeRADIUS 里的写法(官方示例):

# FreeRADIUS users 文件:H3C 官方示例写法
User1@isp1  Cleartext-Password :="pass1"
            H3C_Input_Average_Rate = 4000000,
            H3C_Output_Average_Rate = 4000000

注意最后的逗号——FreeRADIUS 的属性列表用逗号分隔。

⚠ 厂商私有属性必须分别核对:华为的限速私有属性名与 H3C 完全不同,且随版本演进。本书不给出未核实的华为私有属性名,第 35 章会给出已核实的配置途径并标注待核实项。任何私有属性,都必须在厂商的《RADIUS 属性说明》文档里查到确切编号和取值格式后再用。

33.1.5 域(Domain):把用户分流到不同策略的开关

一个 BRAS 上可能同时服务多种用户,他们的认证服务器、地址池、限速策略都不一样。域就是用来分流的路由器:

   用户 user1@isp_dorm       → 域 isp_dorm  → RADIUS-A → 池 pool_dorm → 限速 10M
   用户 user2@isp_vip        → 域 isp_vip   → RADIUS-A → 池 pool_vip  → 限速 100M
   用户 user3@isp_guest      → 域 isp_guest → RADIUS-B → 池 pool_guest→ 限速 2M

域名的来源有两种:

  1. 用户名里带后缀:user1@isp_dorm → 域 = isp_dorm。这是最标准的方式。
  2. 接口/VT 上指定默认域:用户只输 user1,则用接口上配的默认域。

最危险的情况是两者都没配:BRAS 用一个「全局默认域」,所有用户挤在一起,认证服务器、地址池全乱了。这就是为什么第 32 章反复强调必须显式配置默认域。

33.1.6 RADIUS 服务器选路与主备

一台 BRAS 通常配多台 RADIUS 服务器做备份。选路逻辑直接影响故障时的表现:

   华为:radius-server algorithm loading-share | master-backup [strict|sequence]
   H3C :primary / secondary 服务器 + 服务器状态探测
  • 负载分担(loading-share):按权重把请求摊到多台服务器,性能好,但某台挂了会有部分用户受影响。
  • 主备(master-backup):优先用主服务器,主挂了才切备用。行为简单可预测,是保守场景的首选。

一个关键细节(华为文档明确说明):如果不配 strict,计费服务器会跟随认证服务器的选择结果——即给某个用户做认证的那台服务器,也会给这个用户做计费。配了 strict 则严格按各自算法选,保证主计费优先。

这个设计的意义在于:同一个用户的认证和计费记录落在同一台服务器上,对账时不用跨服务器拼数据。这在多服务器部署时非常重要。

33.1.7 RADIUS 报文的可靠性机制:为什么「超时」是个独立问题

RADIUS 跑在 UDP 上,UDP 本身不保证送达。所以 RADIUS 自己实现了一套重传机制:

   BRAS 发 Access-Request
      ↓
   等 response-timeout(默认通常 5 秒)
      ↓
   没回 → 重传(默认重传 3 次)
      ↓
   3 次都不回 → 判定服务器不可用,上报"认证超时"

这套机制带来两个必须理解的后果:

后果一:超时时间决定了用户体验。 如果超时设 5 秒、重传 3 次,用户最坏要等 15 秒才看到「认证失败」。用户体验极差。所以生产上通常把超时调到 2~3 秒,重传 2 次,这样最坏 6 秒内出结果。

后果二:重传会放大服务器压力。 服务器如果只是「慢」而不是「挂」,BRAS 的重传会让它更慢,形成雪崩。这就是为什么 RADIUS 服务器性能不足时会出现「用户集体上不了线」的连锁反应。

参数 典型值 设太大 设太小
响应超时 2~5 秒 用户等待久 误判服务器不可用
重传次数 2~3 次 雪崩风险 一次抖动就失败

这两条参数的命令已核实(RADIUS 服务器组视图下):

# 进入 RADIUS 服务器组视图
radius-server group rd1

# 认证请求:重传 2 次、每次超时 3 秒
radius-server authentication retransmit 2 timeout 3

# 计费请求:重传 3 次、每次超时 5 秒
radius-server accounting retransmit 3 timeout 5

commit

已核实语法(官方原文):「Run radius-server { authentication | accounting } retransmit retry-times timeout second — The number of transmissions and the retransmission timeout period are configured for request packets to be sent to the RADIUS server.」

两个要点:① 认证和计费是分开配的(各有自己的 retransmit/timeout),因为两者对时延的容忍度不同;② 命令在 RADIUS 服务器组视图下,不在系统视图。 URL:https://support.huawei.com/enterprise/en/doc/EDOC1100367122/(User Access → AAA → Configuring a Device as a RADIUS Client)

另外还有一个配套的计费缓存重传命令:radius-server accounting cache retransmit <n> timeout <t>(配置缓存计费报文的重传间隔),以及手动触发 radius-server cache resend packet。

33.1.8 计费的三种模式:时长、流量、包月

运营商的计费模式决定了 BRAS 要关注什么:

计费模式 依据 BRAS 要保证什么 服务器要算什么
时长计费 Acct-Session-Time 准确记录上下线时间 按时长累计
流量计费 Acct-Input/Output-Octets 字节计数准确、及时上报 按流量累计
包月/包年 只看是否在线 会话能稳定维持 不按量算,只判状态
阶梯/达量限速 流量 + 限速属性 能接收动态改速指令 达阈值后触发 CoA 改速

第 4 种「达量限速」是现在最主流的模式,也最能体现 AAA 的「属性驱动」威力:

   用户当月用量 < 100GB  → 正常速度(RADIUS 下发 100M 限速属性)
   用户当月用量 ≥ 100GB  → 服务器检测到超量
                          → 服务器主动发 CoA 报文给 BRAS
                          → BRAS 把该用户限速改成 10M
   (全程用户不需要重新拨号,体验无感)

这个流程依赖本章讲的两样东西:私有属性(下发限速)和动态授权 / CoA(服务器主动改策略)。缺一个都做不成。理解了这条链路,你就理解了现代宽带运营的核心机制。

33.2 华为设备配置详解

33.2.1 命令行基础速览

华为的 RADIUS 配置在 V8 版本里集中在 radius-server group 和 aaa 两个视图:

# RADIUS 服务器组(V8)
radius-server group rd1

# AAA 视图(认证方案、计费方案、域都在这里)
aaa

# 维护与排查
display radius-server configuration
display aaa online-fail-record

⚠ 版本差异(重要):华为的 RADIUS 配置体系在 V6 到 V8 之间发生过迁移。V6 时代使用 radius-server template 模板体系,V8 改为 radius-server group 服务器组体系。网上大量教程仍是 V6 写法,直接照抄到 V8 设备上会报「命令不存在」。动手前先用 display version 确认版本,再对照对应版本的文档。

33.2.2 完整配置模板

下面这份是华为 V8 的完整 AAA 配置,包含「RADIUS 服务器组 → 认证方案 → 计费方案 → 域」四层:

第一段,RADIUS 服务器组——配服务器地址、密钥、主备策略:

# 进入系统视图
system-view

# 建 RADIUS 服务器组 rd1
radius-server group rd1

# 共享密钥(必须与服务器端完全一致)
radius-server shared-key-cipher Bras@2024

# 认证服务器(IP + 端口)
radius-server authentication 10.200.1.10 1812

# 计费服务器(IP + 端口)
radius-server accounting 10.200.1.10 1813

# 选路算法:主备模式(主挂了才切备)
radius-server algorithm master-backup

# 配置源接口,保证 BRAS 侧发出的报文源地址固定
# 服务器侧的 client 配置需要按这个地址去匹配
radius-server source interface LoopBack0

# 提交
commit
quit

第二段,认证方案与计费方案:

# 进入 AAA 视图
aaa

# 认证方案 auth_radius
authentication-scheme auth_radius
authentication-mode radius
quit

# 计费方案 acct_radius
accounting-scheme acct_radius
accounting-mode radius
quit

第三段,域——把方案、服务器组、地址池串起来:

# 仍在 aaa 视图
domain isp_dorm

# 绑定认证方案与计费方案
authentication-scheme auth_radius
accounting-scheme acct_radius

# 绑定 RADIUS 服务器组
radius-server group rd1

# 绑定本地地址池(也可以由 RADIUS 的 Framed-Pool 指定)
ip-pool pool_dorm

# 提交
commit
quit
quit

第四段,几个应对异常的实用配置(这些在文档里都有,是运维救命稻草):

# 强制发送计费停止报文
# 场景:认证成功但计费失败时,服务器可能残留用户表项占着 IP
radius-server accounting-stop-packet send force

# 认证被拒后轮询其他 RADIUS 服务器
# 场景:主服务器上没有该用户,想让他去备用服务器试试
radius-server authentication rollover-on-reject

# 关闭 RADIUS 服务器不可达告警
# 场景:告警风暴时临时静音(不推荐长期关闭)
radius-server alarm disable

# 提交
commit

33.2.3 逐行讲解

命令 干什么 新手常填错的地方
radius-server group rd1 建服务器组 V6 老设备用 radius-server template,抄错版本会报错
radius-server shared-key-cipher 共享密钥 与服务器不一致 → 全部认证失败,但网络是通的
radius-server authentication <ip> <port> 认证服务器 端口写错(1812 vs 1645)→ 报文没人应答
radius-server accounting <ip> <port> 计费服务器 与认证端口写反 → 能认证但不出账
radius-server algorithm master-backup 主备选路 不配则默认行为可能不符合预期
radius-server source interface 源接口 不配则源地址随出口变,服务器 client 匹配不上
authentication-scheme 认证方案 只建不在域里引用 → 没有效果
authentication-mode radius 用 RADIUS 认证 想用本地兜底要另配 local
accounting-scheme 计费方案 漏配 → 能上网但没账单
domain isp_dorm 建域 域名与用户名后缀不一致 → 走默认域
radius-server group rd1(域内) 域绑服务器组 不绑 → 认证请求不知道发哪
accounting-stop-packet send force 强制发停止报文 文档场景:认证成功计费失败导致 IP 被占死
authentication rollover-on-reject 被拒后轮询 多服务器场景下有用,单服务器配了没意义

几个必须展开讲的关键点:

① 共享密钥(shared key)为什么这么关键? RADIUS 报文里的密码字段是用共享密钥加密的,报文还带一个用密钥算的认证字(Authenticator)防篡改。密钥不一致时,服务器连报文完整性校验都过不了,会直接丢弃——在服务器日志里可能只看到「discarding packet from unknown client」或干脆一片空白,而在 BRAS 上只看到「认证超时」。这个「两边都看不到原因」的现象,是共享密钥问题的典型特征。

② radius-server source interface LoopBack0 为什么强烈建议配? 因为服务器侧的 clients.conf 是按源 IP 来识别和放行客户端的。如果 BRAS 不配源接口,报文源地址会跟着出口接口变(比如主备链路切换后换了出口),服务器就会把这个「陌生 IP」当未知客户端丢弃。配一个稳定的 LoopBack 做源接口,是运营商级部署的标准动作。

③ accounting-stop-packet send force 是干什么的? 文档原文描述的场景很具体:正常情况下 RADIUS 服务器要等计费成功后才会生成用户表项;但某些情况下,认证成功、计费开始之前,服务器就已经建了表项。如果这时计费失败,这个 IP 就释放不了,用户用这个 IP 再也上不来线。这条命令就是让 BRAS 强制发一个 Stop 报文,把这个残留表项清掉。排「某个 IP 死活上不来线」这类怪问题时,这条命令是解药。

33.2.4 本地认证兜底与 RADIUS 优先级

生产上有时需要「RADIUS 挂了还能让管理员账号登录」,这就涉及本地认证的兜底配置:

# 创建本地账号(用于设备管理,不是宽带用户)
aaa
local-user admin password irreversible-cipher Admin@2024
local-user admin privilege level 15
local-user admin service-type telnet http
commit

本地用户命令已核实(设备管理账号,aaa 视图下):

# 进入 AAA 视图
aaa

# 创建本地用户并设置不可逆加密密码
local-user admin password irreversible-cipher Admin@2024

# 权限级别 15(最高)
local-user admin privilege level 15

# 允许的服务类型
local-user admin service-type telnet http

commit

IPoE 绑定认证用户的密码生成方式也核实了,这是 IPoE 场景真正会用到的:

# 系统视图下配置 IPoE 用户的默认密码(用于绑定认证,用户无需输入密码)
# 可按 MAC 地址自动生成密码
default-password { option77 | user-class | mac-address { noseparator | separator <c> } }

已核实:default-password [ template <name> ] { cipher <p> | simple <p> | { option60 | vendor-class } [...] | { option77 | user-class | mac-address { noseparator | separator <c> } } }——「A password or password template is configured for an IPoE user」。也就是说 IPoE 绑定认证模式下,设备会用 MAC 地址等自动拼出用户名和密码,这就是"绑定认证"的实现机制。 URL:https://support.huawei.com/enterprise/en/doc/EDOC1100367122/(User Access → Configuring and Managing Users → Configuring Username and Password Generation Modes)

⚠ 官方还有一条安全要求:密码至少 8 位,且至少含大写、小写、数字、特殊字符中的两类;建议用 cipher 密文方式而不是 simple 明文。

强烈建议不要给宽带用户配本地兜底。原因:本地账号是静态的,一旦 RADIUS 挂了自动切本地,用户密码验证就绕过了集中管控;而且本地账号无法反映欠费状态。正确做法是:RADIUS 做主认证,本地只留给设备管理账号。

33.2.5 RADIUS 属性与 ACL 下发

Filter-Id 下发 ACL 的实际配置分两步:先在 BRAS 上定义 ACL,再让 RADIUS 点名。

# 第一步:在 BRAS 上定义 ACL(名字要和 RADIUS 下发的 Filter-Id 完全一致)
acl name acl_library advanced
rule 5 permit ip destination 10.200.20.0 0.0.0.255
rule 10 deny ip
commit
quit

# 第二步:RADIUS 侧给用户配 Filter-Id = "acl_library"
# (这是服务器侧的配置,见 32.3.4 FreeRADIUS 部分)

注意大小写和空格:Filter-Id 的值会原样传给 BRAS 去匹配 ACL 名,多一个空格、大小写不对,都匹配不上。匹配不上时的表现是最恶心的——用户正常上线、正常上网,就是策略没生效,任何日志都看不出异常。

33.2.6 排查 AAA 的核心命令

# 查看上线上线失败记录(第一现场)
display aaa online-fail-record

# 查看 RADIUS 服务器状态(是否可达)
display radius-server

# 查看 RADIUS 配置
display radius-server configuration

# 查看 AAA 相关配置
display current-configuration configuration aaa

display aaa online-fail-record 是本章最重要的命令。它能告诉你每个用户为什么上线失败,失败原因通常会区分到「认证失败」「地址分配失败」「会话数超限」等类别。华为官方知识库明确指出:它无法显示完整的上线交互信息,如果需要更细的追踪,要用 trace 功能。

官方还给出了两条配套命令(已核实):

# 开启「记录用户上线失败」功能(默认可能是关的,关着就查不到失败记录)
aaa
online-fail-record
commit
quit

# 清空上线失败记录
reset aaa online-fail-record

已核实:官方原文「The device records user login failures only when the user login failure recording function is enabled. If the device is disabled from recording user login failures, run the aaa online-fail-record command to enable this function.」以及「Run the reset aaa online-fail-record command in the user view to clear the statistics about all user login failure records.」 URL:https://support.huawei.com/enterprise/en/doc/EDOC1100367122/(User Access → AAA → Maintaining AAA and User Management)

这条极重要:如果你执行 display aaa online-fail-record 看到的是空的,先别以为没失败过——很可能是记录功能没开。

⚠ 未核实项(如实说明):上文提到的 trace 功能(跟踪指定用户完整上线交互过程)在 NE40E 的《配置指南》中没有独立章节,它属于《诊断命令》文档(Diagnose)范畴,本轮未取到其确切命令语法。如果你的现场确实需要 trace,请在 support.huawei.com 检索该版本对应的 NE40E Diagnose/诊断文档。 ⚠ 待核实:待核实 —— NE40E trace 功能(跟踪指定用户上线全过程)在《配置指南》中无独立章节,属《诊断命令》文档范畴,需查 NE40E V800R023C10 Diagnose 文档核对确切语法

33.2.7 华为 RADIUS 属性下发能力的全景

华为在 RADIUS 属性这块提供的能力相当丰富,官方文档的《配置设备作为 RADIUS 客户端》章节列出了一长串可选项。这些能力按用途归类,能帮你快速定位该翻哪一节文档:

能力类别 用途 典型场景
服务器动态下发 ACL 按用户下发访问控制 教学区限制访问娱乐网站
服务器控制用户 QoS 按用户下发带宽策略 套餐限速(第 35 章详述)
RADIUS 动态授权 服务器主动踢人/改策略 欠费立即断、达量降速
RADIUS 代理认证 报文转给其他服务器 多级认证架构
从服务器获取静态路由 按用户下发路由 特殊用户的回程路由
属性转换 兼容不同厂商的属性语法 与第三方服务器对接
关闭 RADIUS 属性 不发某些属性出去 服务器不认识某属性时
属性解析 控制哪些属性被解析 兼容性调优
灵活互通 私有限速属性的兼容处理 老服务器/新 BRAS 混用
RADIUS 报文缓存与重传 提升可靠性 高延迟链路
RADIUS 报文 DSCP 报文优先级 QoS 保障 RADIUS 不丢
RADIUS 扩展源端口 提高并发会话数 单机十万级会话
RADIUS CAR 限制发往服务器的报文速率 防服务器被打爆
服务器状态探测 自动发现服务器不可用 主备切换

其中「属性转换」和「关闭属性」这两项,是解决跨厂商对接问题的关键武器。 举个例子:某些第三方 RADIUS 服务器不理解华为发出去的某个私有属性,会直接拒绝整个报文;这时用「关闭属性」让 BRAS 不发送该属性即可解决。反过来,如果服务器下发的属性格式和 BRAS 期望的不一致,可以用「属性转换」做映射。

还有一个实用的可选特性——本地生成并存储用户话单。官方文档描述得很清楚:如果使用 RADIUS 计费,建议配置「本地生成并存储用户话单」,这样即使对接的 RADIUS 服务器在用户上线或下线时没有响应,用户的计费信息仍然正确。这在计费纠纷时是救命的功能——把所有会话先记在本地,服务器好了再补传。

33.2.8 一个完整的对接实例:从 BRAS 到 FreeRADIUS 逐项核对

下面把 BRAS 侧和服务器侧的配置并排放,方便逐项核对。这个「对称核对法」是现场实施最有效的手段:

   BRAS 侧(华为)                        服务器侧(FreeRADIUS clients.conf)
   ──────────────────────                 ────────────────────────────────
   radius-server source interface LoopBack0
   LoopBack0 地址 = 10.200.0.2  ────────→  client bras-dorm {
                                               ipaddr = 10.200.0.2      ← 必须一致
   radius-server shared-key-cipher Bras@2024    netmask = 32
                                ────────→      secret = Bras@2024        ← 必须一致
   radius-server authentication 10.200.1.10 1812
                                ────────→  (服务器监听 1812)
   radius-server accounting 10.200.1.10 1813
                                ────────→  (服务器监听 1813)
   BRAS 侧(域)                          服务器侧(users 文件)
   ────────────                           ────────────────────
   domain isp_dorm  ────────────────────→  用户名带 @isp_dorm 后缀
   ip-pool pool_dorm ───────────────────←  Framed-Pool = "pool_dorm"(可选,覆盖域默认)

核对时按这张表的每一行逐个确认。任何一行不一致,就会在对应环节失败,而且失败现象各不相同:

不一致的那一行 失败现象 失败环节
源 IP 服务器无任何日志,BRAS 报超时 报文被服务器丢弃
共享密钥 服务器无日志或报 discarding,BRAS 报超时 完整性校验失败
认证端口 BRAS 报超时,服务器完全无感知 报文发错端口
计费端口 认证正常,但无账单 计费报文发错端口
域名后缀 服务器日志显示 user not found 授权阶段
池名 认证通过但地址分配失败 地址分配阶段

这张表的价值在于:看到现象就能直接定位到是哪一行没对上,不用再逐个试错。

33.3 H3C 设备配置详解

33.3.1 命令差异先说清楚

H3C 的 AAA 配置比华为少一层——没有独立的认证/计费方案,直接写在 ISP 域里。三条关键差异:

  1. 华为 radius-server group → H3C radius scheme
  2. 华为 authentication-scheme + accounting-scheme → H3C 域内直接 authentication ppp radius-scheme rs1
  3. 华为的主备算法配置 → H3C 用 primary / secondary 服务器角色

33.3.2 完整配置模板

下面这份是 H3C 的完整 AAA 配置:

第一段,RADIUS 方案:

# 进入系统视图
system-view

# 建 RADIUS 方案 rs1
radius scheme rs1

# 主认证服务器与主计费服务器
primary authentication 10.200.1.10
primary accounting 10.200.1.10

# 共享密钥(simple 为明文输入,另有 cipher 密文输入)
key authentication simple Bras@2024
key accounting simple Bras@2024

# 退出
quit

第二段,ISP 域:

# 建 ISP 域 isp1
domain name isp1

# PPP 用户的认证、授权、计费全部走 rs1
authentication ppp radius-scheme rs1
authorization ppp radius-scheme rs1
accounting ppp radius-scheme rs1

# 授权地址池
authorization-attribute ip-pool pool1

# 退出
quit

第三段,动态授权(DAS/DAC)——用于服务器主动踢人、改策略:

# 配置动态授权服务器
radius dynamic-author server

# 允许 DAC(服务器的动态授权客户端)10.200.1.10 连接
client ip 10.200.1.10 key simple Bras@2024

# 退出
quit

动态授权是什么? 是 RADIUS 的扩展能力(RFC 3576,也叫 CoA/Disconnect)。传统模式下服务器只能被动等 BRAS 来问;配了动态授权后,服务器可以主动向 BRAS 发指令:踢掉某个用户、改某个用户的限速、给某个用户重新下发策略。这是运营商「用户欠费立即断网」「客服在线提速」的实现基础。

第四段,其他常用配置:

# 配置 BRAS 侧的 NAS-IP(服务器据此识别是哪台 BRAS)
# 具体配置位置按版本,通常在 RADIUS 方案或全局
radius nas-ip 10.200.0.2

# 保存
save force

已核实的语法:H3C 指定 NAS IP 有三个位置,命令名各不相同,这点很容易搞错:

位置 命令 生效范围
系统视图 `radius nas-ip { ipv4-address ipv6 ipv6-address }`
RADIUS 方案视图 `nas-ip { ipv4-address ipv6 ipv6-address }`
三层接口视图 `aaa nas-ip { ipv4-address ipv6 ipv6-address }`

优先级(官方原文):接口视图 > RADIUS 方案视图 > 系统视图。若三处都配了,接口那条最优先——排查「NAS-IP 不对」时要三处都看。 出处:H3C CR16000-F《02-AAA configuration》,URL:https://www.h3c.com/en/d_202001/1262629_294551_0.htm

33.3.3 逐行讲解

命令 干什么 与华为的差异
radius scheme rs1 建 RADIUS 方案 对应华为 radius-server group
primary authentication <ip> 主认证服务器 华为 radius-server authentication <ip> <port>
primary accounting <ip> 主计费服务器 华为 radius-server accounting <ip> <port>
key authentication simple <key> 认证密钥 对应华为 radius-server shared-key-cipher
key accounting simple <key> 计费密钥 H3C 认证与计费密钥可以分开配
domain name isp1 ISP 域 华为 domain isp1
authentication ppp radius-scheme rs1 PPP 用户认证走 rs1 华为要绕 authentication-scheme
authorization ppp radius-scheme rs1 授权走 rs1 华为用 authorization-scheme
accounting ppp radius-scheme rs1 计费走 rs1 华为用 accounting-scheme
authorization-attribute ip-pool pool1 授权地址池 华为 ip-pool pool1
radius dynamic-author server 开启动态授权 华为有对应特性但命令体系不同
client ip <ip> key simple <k> 允许的服务器 —

H3C 的 ppp 关键字必须注意:authentication ppp radius-scheme rs1 里的 ppp 表示「这个配置只对 PPP 类用户(PPPoE/PPP)生效」。如果同一台设备上还有 IPoE 用户,IPoE 用户走的是另一套关键字(例如官方举例里出现过的 authorization ipoe radius-scheme rs1)。这正是 H3C 设计上的灵活之处:同一个域里,不同接入类型的用户可以走不同的服务器和策略。

# H3C:同一个域里分别给 PPP 和 IPoE 用户配置不同策略(官方举例形态)
domain name isp_print
authentication ppp radius-scheme rs1
authorization ppp radius-scheme rs1
accounting ppp radius-scheme rs1
authorization ipoe radius-scheme rs1
accounting ipoe none
quit

上面这段来自 H3C 官方 BRAS 配置举例,展示了 IPoE 用户「只认证不计费」的写法——accounting ipoe none。这个需求在校园网打印服务、设备接入等场景很常见。

33.3.4 FreeRADIUS 对接要点(两家通用)

FreeRADIUS 是开源免费的 RADIUS 服务器,学校和小企业用得最多。对接要点分三块:

第一块:clients.conf —— 告诉服务器「哪些 BRAS 允许连」

# /etc/freeradius/3.0/clients.conf
# 声明一台 BRAS 客户端:IP 与共享密钥
client bras-dorm {
    ipaddr = 10.200.0.2
    netmask = 32
    secret = Bras@2024
    require_message_authenticator = no
}

要点:ipaddr 必须与 BRAS 发出报文的源地址一致(这就是为什么要配 radius-server source interface);secret 必须与 BRAS 上的共享密钥逐字节一致。

第二块:users 文件 —— 配账号与属性

# /etc/freeradius/3.0/users
# 普通用户:密码 + 从指定池取地址
"user1@isp_dorm"  Cleartext-Password := "pass1"
    Framed-Pool = "pool_dorm",
    Session-Timeout = 86400

# 固定 IP 用户
"printer01@isp_dorm"  Cleartext-Password := "Printer@123"
    Framed-IP-Address = 10.200.10.200

# 带 ACL 下发的用户
"user2@isp_dorm"  Cleartext-Password := "pass2"
    Filter-Id = "acl_library"

# H3C 用户:带私有限速属性(官方示例写法)
"User4@isp1"  Cleartext-Password := "pass4"
    H3C_Input_Average_Rate = 10000000,
    H3C_Output_Average_Rate = 10000000

关键点:

  • Cleartext-Password 是明文存储。CHAP 认证必须能拿到明文密码,所以 CHAP 场景下不能用不可逆的哈希存储。
  • 属性之间用逗号分隔,最后一个属性后面不要留逗号(部分版本会报错)。
  • Framed-IP-Address 的 IP 必须在地址池的网段范围内,否则 BRAS 会拒绝下发。

第三块:字典 —— 私有属性必须先定义

FreeRADIUS 默认不认识厂商私有属性,需要加载对应字典:

# 在 /etc/freeradius/3.0/dictionary 中确保引用了厂商字典
# 华为、H3C 的私有属性各有其字典文件

⚠ 厂商字典文件的准确名称与属性编号:不同 FreeRADIUS 版本自带的厂商字典覆盖范围不同,H3C/华为部分私有属性可能需要自行补充字典项。使用任何私有属性前,务必用 radtest 或服务器日志确认属性被正确解析,而不是被当作未知属性丢弃。 ⚠ 待核实:待核实 —— FreeRADIUS 中华为/H3C 私有属性的官方字典文件名与属性编号需按 FreeRADIUS 版本与厂商《RADIUS 属性说明》核对

第四块:调试

# FreeRADIUS 前台调试模式(能看到每一条报文的收发与属性解析)
freeradius -X

# 命令行测试一个账号(快速验证服务器侧是否正常)
radtest user1@isp_dorm pass1 127.0.0.1 0 testing123

freeradius -X 是排 RADIUS 问题的终极武器,它会打印每一条收到的报文、解析出的属性、匹配到的用户、返回的属性。BRAS 侧看到的「认证失败」,在 -X 的输出里几乎总能一眼看出原因。

33.3.5 计费报文与对账

计费这块新手最容易忽略,但它直接关系到钱。三种计费报文:

报文类型 Acct-Status-Type 触发时机 关键字段
开始 Start(1) 用户上线成功 Acct-Session-Id
更新 Interim-Update(3) 周期性上报(如每 10 分钟) Acct-Session-Time、流量计数
停止 Stop(2) 用户下线 Acct-Session-Time、上下行字节、下线原因

为什么需要 Interim-Update(中间计费)? 因为如果只在 Start 和 Stop 时记账,一旦 BRAS 意外重启,Stop 发不出来,这次会话的时长和流量就全丢了。中间计费相当于「定期存档」,丢了也只丢最后一个周期的数据。生产环境一定要开中间计费。

常见的计费问题:

现象 原因 排查
完全无账单 计费方案没配 / 计费端口错 看 accounting-scheme 与端口
有 Start 无 Stop BRAS 重启 / 链路断 查中间计费是否开启
时长明显偏长 Stop 没收到,按最长时间兜底 查 RADIUS 日志
流量对不上 计费方向理解反了 Acct-Input-Octets 是从用户进来的(上行)

流量方向的坑必须说清楚:Acct-Input-Octets 是「进入 BRAS 的字节数」,对 BRAS 来说就是从用户方向来的,也就是用户的上行流量;Acct-Output-Octets 是发往用户的,即下行流量。很多新手把这两个搞反,导致报表上下行颠倒。

33.3.6 双栈用户的 AAA 与计费分离

IPv6 普及后,一个绕不开的问题是:双栈用户的 IPv4 和 IPv6 流量要不要分别计费?

两种做法:

   做法一:合并计费(推荐)
   一次认证 → 一个会话 → 一份账单 → 流量是 v4+v6 合计
   优点:简单、用户易懂
   缺点:无法区分 v4/v6 用量

   做法二:分离计费
   分别统计 IPv4 与 IPv6 的流量,出两份账单数据
   优点:精细
   缺点:配置复杂,且对 keepalive 参数有特殊要求

如果选择分离计费,H3C 官方有一条明确的注意事项:当需要把 PPPoE 用户的 IPv4 与 IPv6 流量分开计费,且用户是通过三层聚合接口或三层聚合子接口上线时,VT 接口上的 keepalive 间隔必须不小于 60 秒。这条限制的意义在于:计费分离依赖周期性的统计采样,keepalive 太频繁会干扰采样周期。

绝大多数校园网和企业网用做法一就够了,不必为了精细拆分去承担额外复杂度。

33.3.7 H3C 的 RADIUS 服务器状态与业务连续性

H3C 的 display radius scheme 输出里能看到服务器状态。这里有个新手极易误判的点需要提前说清楚:

   服务器状态显示 Active  → 正常,报文会发过去
   服务器状态显示 Blocked → H3C 已判定该服务器不可用,不再发报文

Blocked 状态是怎么来的?H3C 通过探测或连续超时判定服务器宕机后,会把它标记为不可用,后续所有认证请求都不再发往这台服务器。这带来的现象是:

  • 用户全部认证失败;
  • 服务器端日志里一条记录都没有(因为报文根本没发出去);
  • 此时不管你怎么查服务器都查不出问题。

这个现象和第 32.1 节讲的「共享密钥问题」表现几乎一模一样(都是「两边都没日志」),但根因完全不同。区分方法:如果是共享密钥问题,服务器可能还有「discarding」类的日志;如果是 Blocked,服务器真的收不到任何东西,且 BRAS 侧 display radius scheme 能看到状态异常。先看 BRAS 侧的服务器状态,再看服务器侧日志,顺序别反。

H3C 侧主动探测服务器状态的命令已核实,配在系统视图下:

# 配置 RADIUS 认证服务器状态探测模板(interval 为探测间隔,单位秒)
radius-server test-profile probe1 username probeuser interval 60

它会周期性地拿一个专门用于探测的账号去试认证,以此判断服务器是否还活着。注意它是系统视图下的「探测模板」,不是配在 RADIUS 方案里的——这点和直觉不同。

出处:H3C CR16000-F《02-AAA configuration》「Configuring a test profile for detecting the status of RADIUS authentication servers」,原文命令 radius-server test-profile profile-name username name [ interval interval ]。URL:https://www.h3c.com/en/d_202001/1262629_294551_0.htm

实务提醒:探测账号要专门建一个权限最小、不会真正上线的账号,别拿真实用户账号去探测,否则会污染计费和在线表。

33.4 华为 / H3C 命令对照表

功能 华为(VRP / NE40E) H3C(Comware / CR16000-F) 差异说明
RADIUS 服务器组/方案 radius-server group rd1 radius scheme rs1 V6 老华为用 radius-server template
认证服务器 radius-server authentication <ip> <port> primary authentication <ip> 华为显式写端口
计费服务器 radius-server accounting <ip> <port> primary accounting <ip> 华为显式写端口
认证密钥 radius-server shared-key-cipher <k> key authentication simple <k> 语法不同
计费密钥 同上(共用密钥) key accounting simple <k> H3C 可分开配
源接口 radius-server source interface <if> 按版本的 nas-ip 等 目的相同:固定源地址
选路算法 radius-server algorithm master-backup primary/secondary 角色 概念对应
认证方案 authentication-scheme + authentication-mode radius 域内 authentication ppp radius-scheme rs1 H3C 少一层
计费方案 accounting-scheme + accounting-mode radius 域内 accounting ppp radius-scheme rs1 同上
授权方案 authorization-scheme(可选) 域内 authorization ppp radius-scheme rs1 —
域 domain isp1 domain name isp1 H3C 多 name
域绑定服务器 radius-server group rd1(域内) 由 radius-scheme rs1 隐含 —
域绑地址池 ip-pool pool1 authorization-attribute ip-pool pool1 —
按接入类型区分 靠不同域/不同 BAS 接口 ppp / ipoe 关键字区分 H3C 更灵活
计费停止强制发送 radius-server accounting-stop-packet send force 按版本命令参考 解 IP 占用问题
认证被拒轮询 radius-server authentication rollover-on-reject 按版本命令参考 多服务器场景
动态授权 有对应特性(命令不同) radius dynamic-author server + client ip ... key ... 服务器主动踢人/改策略
上线失败记录 display aaa online-fail-record 按版本的 display 命令 排错第一现场
提交/保存 commit + save save force 华为特有

33.5 配置验证

AAA 的验证要从服务器侧往回查,因为大部分问题出在服务器而不是 BRAS。按顺序四步:

第一步:确认 BRAS 能到服务器

# 华为:先确认网络可达(RADIUS 走 UDP,ping 只能证明 IP 层通)
ping -a 10.200.0.2 10.200.1.10

ping 通只说明 IP 层通,不代表 UDP 1812/1813 通。中间有防火墙时,很可能 ping 得通但 RADIUS 报文被拦。这种情况要去查防火墙策略。

第二步:确认 BRAS 侧配置正确

# 华为:查看 RADIUS 服务器状态
display radius-server

期望看到服务器状态为 Up 或 Active。如果显示 Down,说明 BRAS 认为服务器不可达。

# 华为:查看 RADIUS 配置
display radius-server configuration

核对服务器 IP、端口、共享密钥类别(不能用 display 看到明文密钥,但能确认已配)。

第三步:让用户拨号,看结果

# 华为:上线失败记录
display aaa online-fail-record

# 华为:在线用户
display access-user domain isp_dorm

online-fail-record 里应该能看出失败原因类别。常见类型:

失败记录中的关键词 含义 转向
认证失败 / Authentication failed 服务器返回了 Reject 查服务器 users 文件
无响应 / No response 服务器没回 查共享密钥、网络、服务器状态
地址分配失败 认证过了但没地址 查地址池
会话数超限 达到上限 查 access-ip-limit

第四步:在服务器侧验证

# FreeRADIUS 前台调试(最关键的一步)
freeradius -X

在 -X 的输出里,看两件事:

  1. 能不能收到 Access-Request:如果完全没收到,问题在网络或共享密钥(被丢弃)。
  2. 返回的是 Accept 还是 Reject:Reject 的话,输出里会写明哪个属性没匹配上。

正常的一次成功认证,-X 输出里应该能依次看到:

(0) Received Access-Request Id 123 from 10.200.0.2:1234 to 10.200.1.10:1812 length 95
(0)   User-Name = "user1@isp_dorm"
(0)   NAS-IP-Address = 10.200.0.2
(0) # Executing section authorize
(0)   [files] = ok
(0) # Executing section authenticate
(0)   [pap] = ok          ← 或 [chap] = ok
(0) Sent Access-Accept Id 123 from 10.200.1.10:1812 to 10.200.0.2:1234 length 44
(0)   Framed-Pool = "pool_dorm"
(0)   Session-Timeout = 86400

如果看到 [files] = notfound,说明用户名在 users 文件里找不到——多半是域后缀不匹配(比如用户配的是 user1 但 BRAS 发来的是 user1@isp_dorm)。

第五步:验证计费

# FreeRADIUS 前台调试,观察计费报文
freeradius -X

用户上线后应看到 Acct-Status-Type = Start,下线后应看到 Stop。如果只有 Start 没有 Stop,说明下线时 BRAS 没发停止报文(可能是异常掉线或 BRAS 重启)。

33.6 排错与故障树

AAA 的故障树和 PPPoE 不同:PPPoE 是「分阶段卡」,AAA 是「分方向查」——要么是请求到不了服务器,要么是服务器拒绝了,要么是服务器答应了但 BRAS 执行不了。

   认证失败
     │
     ├─ Q1: 服务器收到 Access-Request 了吗?(看 freeradius -X)
     │     │
     │     ├─ 没收到 ──┬─ ① 网络不通(防火墙拦 UDP 1812)
     │     │           ├─ ② 共享密钥不一致(报文被丢弃)
     │     │           ├─ ③ 服务器 clients.conf 没这条记录(源 IP 不匹配)
     │     │           └─ ④ BRAS 发到错服务器/错端口
     │     │
     │     └─ 收到了 ──→ Q2
     │
     ├─ Q2: 服务器回的是 Accept 还是 Reject?
     │     │
     │     ├─ Reject ──┬─ ① 用户不存在(域后缀不匹配最常见)
     │     │           ├─ ② 密码错误
     │     │           ├─ ③ 账号被禁用/过期
     │     │           └─ ④ 认证方式不匹配(服务器只支持 PAP,客户端发 CHAP)
     │     │
     │     └─ Accept ──→ Q3
     │
     └─ Q3: BRAS 收到 Accept 后能执行吗?
           │
           ├─ 地址分配失败 ──→ ① 池耗尽 ② Framed-Pool 指向的池不存在 ③ 域没绑池
           ├─ 策略没生效   ──→ ① Filter-Id 对应的 ACL 不存在 ② 属性被丢弃
           └─ 计费不成功   ──→ ① 计费端口错 ② 计费密钥与认证密钥不同且配错

逐条对应排查表:

症状 可能原因 排查命令/方法 定位要点
全部用户认证失败 共享密钥不一致 freeradius -X 看有无报文 两边日志都无原因 → 强怀疑密钥
全部用户认证失败 防火墙拦 UDP display radius-server 状态 Down
全部用户认证失败 服务器 clients.conf 无此 IP 对照源 IP 源接口没配导致 IP 变了
部分用户失败 域后缀不匹配 freeradius -X 看 User-Name 服务器上找不到该用户名
部分用户失败 密码错 日志 —
认证通过但拿不到地址 Framed-Pool 池不存在 display ip pool 池名拼错
认证通过但策略不生效 Filter-Id 的 ACL 不存在 display acl 静默失败,无日志
能认证但无账单 计费端口/密钥错 RADIUS 日志 只看到 Access 无 Acct
某 IP 永远上不来 残留表项占着 IP 服务器数据库 用 accounting-stop-packet send force

几个高频场景的完整路径:

场景一:整个 BRAS 的用户全部认证失败,服务器日志一条记录都没有。

这是最典型的共享密钥问题(或网络问题)。排查顺序:

# 1. BRAS 侧确认服务器可达
display radius-server

# 2. 服务器侧开启调试
#    freeradius -X

# 3. 让一个用户拨号,观察 -X 输出
#    完全无输出 → 报文没到服务器

# 4. 确认源 IP(在 BRAS 上)
display radius-server configuration
#    看源接口配置,再用该接口地址去比服务器的 clients.conf

# 5. 逐字节核对共享密钥
#    特别注意:有没有多余空格、引号、大小写

共享密钥问题的诊断技巧:把服务器上的 secret 临时改成和 BRAS 完全一样(复制粘贴而不是手敲),再试一次。如果立刻好了,就是密钥问题。

场景二:能认证、能上网,但策略(限速/ACL)没生效。

这是 Filter-Id 或私有属性下发失败。按顺序查:

# 1. 服务器侧确认属性确实下发了
#    freeradius -X 里看 Access-Accept 的回复属性

# 2. BRAS 侧确认 ACL 存在且名字完全一致
display acl name acl_library

# 3. 查用户实际拿到的策略
display access-user username user1@isp_dorm
#   看输出里的 ACL/策略字段

# 4. 如果是私有属性(如限速),确认属性编号/格式被正确解析

Filter-Id 匹配不上 ACL 时的表现是完全静默——没有错误日志,用户正常上网,只是策略没生效。所以这条要靠「服务器侧确认下发了 → BRAS 侧确认 ACL 存在」两头核对。

场景三:某个用户突然怎么都上不来,其他人正常。

# 1. 查是否有残留会话
display access-user username user1@isp_dorm

# 2. 有残留 → 踢掉
cut access-user username user1@isp_dorm

# 3. 无残留但仍上不来 → 查失败记录
display aaa online-fail-record

# 4. 如果记录里显示"地址分配失败",可能这个用户的 Framed-IP-Address 被占用

场景四:能认证但一直没账单。

# 1. 确认计费方案已配且被域引用
display domain isp_dorm
#   看 Accounting-scheme-name 是否为空

# 2. 确认计费服务器地址和端口
display radius-server configuration

# 3. 服务器侧看有没有 Acct 报文
#    freeradius -X 中搜索 "Acct-Status-Type"

33.7 新手踩坑与注意事项

  1. 共享密钥不一致——症状是「两边日志都看不到原因」。这是 AAA 排错的第一嫌疑,先查它。
  2. 没配源接口,导致 BRAS 源 IP 变化——主备链路切换后服务器不认了。配 radius-server source interface LoopBack0。
  3. 在 V8 设备上抄 V6 的 radius-server template——命令不存在,别怀疑设备坏了。
  4. 以为 RADIUS 下发策略就能凭空生效——Filter-Id 只是「点名」,ACL 必须在 BRAS 上先定义好。
  5. Filter-Id 大小写/空格不匹配——静默失败,用户正常上网但策略没生效,极难发现。
  6. 把上行下行计费字段搞反——Acct-Input-Octets 是用户上行。报表反了要赔钱。
  7. 不开中间计费——BRAS 一重启,整段时间的用量全丢。
  8. 给宽带用户配本地兜底认证——RADIUS 一挂,欠费用户全放行了。
  9. 端口配错(1812 vs 1645)——老设备用 1645/1646,新设备 1812/1813,配错就是无响应。
  10. Framed-IP-Address 不在池网段内——BRAS 拒绝下发,用户上不来,但日志里原因很隐晦。
  11. 域后缀和服务器用户表不匹配——用户配置成 user1 但 BRAS 发 user1@isp_dorm,服务器查不到。
  12. 不看 freeradius -X 就瞎改 BRAS 配置——RADIUS 问题九成能在 -X 里看明白,别在 BRAS 上瞎试。

33.8 本章小结

  • AAA = 认证(你是谁)+ 授权(你能干什么)+ 计费(你用了多少)。RADIUS 是实现这三件事的协议。
  • BRAS 不做决策,只做执行。策略配在服务器上,BRAS 按属性执行。这是本章最核心的认知。
  • 认证报文走 1812,计费报文走 1813,数据流量不经过 RADIUS。RADIUS 挂了,在线用户照样能上网。
  • 四个核心属性:Framed-IP-Address(固定 IP)、Framed-Pool(指定池)、Filter-Id(下发 ACL)、Session-Timeout(会话时长)。
  • 系统属性不够用时靠厂商私有属性扩展,华为与 H3C 的属性名完全不同,必须分别对接。
  • 华为的 RADIUS 体系在 V6→V8 有过迁移(radius-server template → radius-server group),抄文档务必对版本。
  • H3C 的 AAA 比华为少一层(无独立方案),并且能用 ppp/ipoe 关键字按接入类型分流。
  • 排错三问:服务器收到了吗?回的是 Accept 还是 Reject?BRAS 能执行吗?

适用版本:华为 NE40E V800R023C10 系列(RADIUS 命令体系以 V8 为准,V6 设备请对照 radius-server template 文档);H3C CR16000-F Release 795x;FreeRADIUS 3.0 系列。

自测题

  1. RADIUS 服务器宕机后,已经在线上的用户能不能继续上网?为什么?
  2. Filter-Id 下发 ACL 时,ACL 是定义在 BRAS 上还是 RADIUS 服务器上?
  3. 华为的 RADIUS 配置在 V6 和 V8 之间有什么主要变化?
  4. Acct-Input-Octets 对应的是用户的上行还是下行流量?
  5. 为什么一定要配 radius-server source interface?
  1. 能。因为 RADIUS 只负责认证和计费,用户数据流量直接由 BRAS 转发,不经过 RADIUS 服务器。RADIUS 挂掉只会导致新用户无法认证上线,并影响计费上报。
  2. ACL 必须定义在 BRAS 上。RADIUS 只通过 Filter-Id 属性「点名」一个 ACL 名称,BRAS 用这个名字去本地查找已有的 ACL 并套用。名字不匹配时静默失败。
  3. V6 使用 radius-server template 模板体系,V8 改为 radius-server group 服务器组体系。在 V8 设备上执行 V6 命令会报「命令不存在」。
  4. 上行流量。Acct-Input-Octets 指进入 BRAS 的字节数,即从用户方向发来的流量;Acct-Output-Octets 是发往用户的下行流量。
  5. 因为 RADIUS 服务器通过 clients.conf 的源 IP 来识别和放行客户端。如果不固定源接口,BRAS 报文源地址会随出口接口变化(如链路切换),服务器会把陌生 IP 当作未知客户端丢弃,导致认证全部失败。

关于本书:《华为 / H3C 网络设备典型功能配置详解》—— 面向国内高校/企业网络环境, 华为 VRP 与 H3C Comware 双厂商并排配置的实操教材,共 43 章。 全书所有命令尽量有官方出处,查不到的显式标注「待核实」。 返回系列目录