BRAS INTEGRATION · 华为 BRAS 对接实战
以华为 NE40E / ME60 BRAS(V8 平台)为例,给出二层普通用户 IPoE 接入下“MAC 快速认证优先 + Portal 认证兜底”的完整方案:四域规划、RADIUS 与 DM/CoA、Portal 服务器对接、网间网出口与 NAT 归属、上线验证与排障,并逐项对齐 OpenPortal 侧的 BAS IP、NAS 列表、高级扩展与接入账户组参数。
STEP BY STEP / 从平台配置到上线
配置命令可直接对照设备粘贴修改;表格可左右滑动,截图点击可放大。
适用产品/版本:NE40 ME60 BRAS —— 即华为 NE40E 系列(NE40E / NE40E-M / NE40E-F)与 ME60,V8 平台(V800R011C10 及以上,示例按 V800R023/V800R024 语法);本文配置对 NE40E 与 ME60 通用,型号差异项见第 7 章
认证模型:二层普通用户(IPoE / layer2-subscriber)+ MAC 快速认证优先 + Portal 认证
认证路径:华为 NE40 ME60 BRAS "Web+MAC 认证(MAC 简化认证)"成熟模型 —— "MAC 认证域 → Web 认证前域 → 认证后域"三段式,本方案扩展为四域(MAC 认证前/后域、Portal 认证前/后域)
修订记录:V1.1 按现场实际项目经验补充 radius local-ip all(DM/CoA 必需)、web-server redirect-key user-mac-address mac simple type1(MAC 冒号格式)、portal-server redirect-key、http-hostcar enable、dns primary-ip、idle-cut、web-server mode 等命令
修订记录:V1.2 新增网间网出口(VLAN10 / g1/0/10 子接口 / 100.0.0.1 / 上级防火墙 100.0.0.254)与默认路由,并修正原占位默认路由
修订记录:V1.3 补充 RADIUS 授权属性落地(用户名 / 用户组 / 域 / Filter-Id);V1.4 统一设备称呼为 NE40 ME60 BRAS、明确对接 OpenPortal,并按 OpenPortal 截图补入 CoA IP 核对项
修订记录:V1.5 纠正 Portal 端口语义 —— 50100 是 Portal 服务器侧侦听的 UDP 端口(设备发报文的目的端口),2000 是 BRAS 侧侦听 Portal 报文的 UDP 端口(即 OpenPortal 里的「BAS端口」),两者不是同一个端口,不可混用
修订记录:V1.6 纠正 CoA IP 结论 —— OpenPortal 的 COA IP 留空时默认发往 NAS 的「IP地址」字段(10.0.0.1),等效于正确配置,无需强制补填
修订记录:V1.7 补全华为 Domain 属性的下发位置 —— 「NAS 列表 → 高级扩展」选华为高级后,Domain 取值来自「接入账户组 → 详细信息」字段;不指定域时必须留空,填错会导致认证失败或落错域(见 3.10 ④)
修订记录:V1.8 新增 8.6 终端信息上送 —— 澄清 HW-HTTP-UA(26-159) 属交换机/AC 的 NAC 特性且走计费报文,BRAS 侧不支持;BRAS 可上送的是 HW-Dhcp-Option(26-187)
修订记录:V1.9 新增 8.7 终端主机名识别 —— 「高级扩展=华为高级」后 OpenPortal 解析 187 中的 Option 12 主机名并写入「终端主机名管理」表;BRAS 侧只需 radius-attribute include hw-dhcp-option 12
修订记录:V1.10 纠正 MAC 格式结论 —— MAC 写法差异(设备缺省 xxxx-xxxx-xxxx vs OpenPortal 的 11:22:33:44:55:66)由 OpenPortal 侧自适应,设备侧不要改 calling-station-id mac-format(该命令作用于整个 RADIUS 组,会连带影响计费与按 MAC 解析的下游系统),仅在服务器不支持时才作兜底
┌──────────────────────────────┐
│ Portal + RADIUS 服务器 │
│ 10.0.0.2 │
│ 服务器侦听 UDP 50100 │
│ RADIUS 1812/1813 │
│ CoA/DM 3799 │
└───────────────┬──────────────┘
│ VLAN 500
│ 10.0.0.1/24(BRAS 侧地址)
┌───────────────┴──────────────┐
│ NE40 ME60 BRAS │
│ g1/0/1.500 → 服务器侧 │
│ g1/0/2.100 → 用户侧 │
│ g1/0/10.10 → 网间网出口 │
└───┬───────────────────┬──────┘
│ VLAN 100 │ VLAN 10
│ │ 100.0.0.1/24
│ │ 默认路由 → 100.0.0.254
│ ┌──────────┴───────────┐
│ │ 上级防火墙 / 出口 │
│ │ 100.0.0.254 │
│ │ 承担 NAT(方案A) │
│ └──────────┬───────────┘
│ │ 公网
│ ┌──────────┴───────────┐
│ │ Internet │
│ └──────────────────────┘
┌───┴──────────────────────────┐
│ 接入交换机 / 用户终端 │
│ 192.168.0.0/24 网关 .0.1 │
└──────────────────────────────┘
出口与认证的关系:用户流量路径为 终端 → NE40 ME60 BRAS(网关 192.168.0.1) → 默认路由 → 防火墙 100.0.0.254 → 公网。认证与 NAT 是解耦的两件事——认证在 g1/0/2.100 上做,NAT 在出口侧做(本方案默认由防火墙承担,见 5.6 节)。
| 项目 | 规划值 | 说明 |
|---|---|---|
| Portal 服务器地址 | 10.0.0.2 | 与 RADIUS 合设,同一地址 |
| Portal 跳转 URL | http://10.0.0.2 | 前域强制重定向地址 |
| Portal 服务器侦听端口 | 50100 | 服务器侧 UDP 端口,设备发 Portal 报文的目的端口:web-auth-server 10.0.0.2 port 50100 |
| BRAS 侦听端口 | 2000 | 设备侧 UDP 端口,即 OpenPortal「BAS端口」:web-auth-server listening-port 2000 |
| RADIUS 认证/计费 | 10.0.0.2:1812 / 1813 | 标准端口 |
| RADIUS 授权(CoA/DM) | 10.0.0.2:3799 | 服务器主动下发,需 radius local-ip |
| 共享密钥 | portal | Portal 与 RADIUS 统一使用(上线前建议改强密钥) |
| NE40 ME60 BRAS 对接服务器地址 | 10.0.0.1/24 | VLAN 500,g1/0/1 子接口;同时作为 BAS-IP / NAS-IP |
| URL 参数 | wlanuserip=用户 IP,mac=用户 MAC(aa:bb:cc:dd:ee:ff),basip=10.0.0.1 | MAC 用 simple type1 输出冒号格式 |
| 用户业务 VLAN | 100 | 端口 g1/0/2 |
| 用户网段/网关 | 192.168.0.0/24,网关 192.168.0.1 | DHCP 本地地址池下发 |
| 用户 DNS | 114.114.114.114、8.8.8.8 | 需免认证放通 |
| 网间网出口 VLAN | 10 | 端口 g1/0/10,子接口 g1/0/10.10 |
| 出口本地地址 | 100.0.0.1/24 | 与上级防火墙三层对接(掩码按现场,见 3.9 说明) |
| 上级防火墙网关 | 100.0.0.254 | 默认路由下一跳 |
| 默认路由 | 0.0.0.0/0 → 100.0.0.254 | 原占位 10.0.0.254 已废弃 |
| 序号 | 域名称 | 角色 | 认证方案 | 落地命令 |
|---|---|---|---|---|
| ① | mac-pre | MAC 认证前域 | radius(MAC 作纯用户名) | BAS 接口 default-domain pre-authentication |
| ② | mac-post | MAC 认证后域 | radius + 计费 | BAS 接口 default-domain authentication |
| ③ | portal-pre | Portal 认证前域 | none(不认证,仅推页面) | authening authen-fail online authen-domain |
| ④ | portal-post | Portal 认证后域 | radius + 计费 | authening authen-redirect online authen-domain |
用户接入 VLAN100 / g1/0/2.100
│ 首包(ARP / HTTP)触发
▼
┌─────────────────────────┐
│ ① mac-pre(MAC 认证前域)│ 未认证用户仅放通:Portal 10.0.0.2、DNS
│ 以"MAC 地址"作纯用户名 │ 向 RADIUS 认证(default-user-name include mac-address)
└───────┬─────────┬───────┘
│ │
RADIUS 命中 RADIUS 未命中 / 拒绝
(该 MAC 已注册) │ authening authen-fail online authen-domain portal-pre
│ ▼
│ ┌──────────────────────────┐
│ │ ③ portal-pre(前域/重定向域)│ 仅放通 Portal + DNS
│ │ HTTP 302 → http://10.0.0.2 │
│ │ ?wlanuserip=192.168.0.x │
│ │ & mac=aa:bb:cc:dd:ee:ff │
│ │ & basip=10.0.0.1 │
│ └───────┬──────────────────┘
│ │ 用户输入账号密码 → Portal 协议 AUTH → NE40 ME60 BRAS 转 RADIUS
│ 认证通过 │
│ ▼
│ ┌───────────────────────────┐
│ │ ④ portal-post(Portal 后域)│ RADIUS 授权 + 计费,全权限
│ └───────────────────────────┘
▼
┌──────────────────────────┐
│ ② mac-post(MAC 认证后域)│ RADIUS 授权 + 计费,全权限
│ 免弹窗,用户无感知上线 │
└──────────────────────────┘
核心特征: 终端只要在 RADIUS/Portal 侧登记过 MAC,用户上线即自动通过(免 Portal 弹窗);未登记 MAC 的终端才被重定向到 Portal 页面输入账号密码。
# 设备名称
sysname NE40-ME60-BRAS
# BAS 业务授权(二层普通用户接入必需,槽位号按单板实际位置填写)
license
active bas slot 1
# 业务 VLAN(子接口 dot1q 终结方式下非必需,保留便于后续二层口扩展)
# 10=网间网出口 100=用户业务 500=服务器互联
vlan batch 10 100 500
# 与 Portal、RADIUS 服务器互联的三层子接口,地址即 BAS-IP / NAS-IP
interface GigabitEthernet1/0/1.500
description TO_Portal_RADIUS_Server_10.0.0.2
vlan-type dot1q 500
ip address 10.0.0.1 255.255.255.0
# RADIUS 服务器组
radius-server group rd1
radius-server type standard
# 认证 / 计费服务器
radius-server authentication 10.0.0.2 1812 weight 0
radius-server accounting 10.0.0.2 1813 weight 0
# 共享密钥,与 RADIUS / Portal 服务器一致
radius-server shared-key-cipher portal
# 超时与重传
radius-server retransmit 3
radius-server timeout 5
# 认证请求携带认证类型属性,便于服务器区分 MAC 认证 / Portal 认证用户
radius-attribute include HW-Auth-Type
# 【DM/CoA 三件套之一】允许本机地址作为 RADIUS 报文(含 CoA/DM)的本地地址
# DM/CoA 是服务器主动发往设备 3799 端口的报文,只有被纳入 RADIUS socket 的本地地址才能接收
radius local-ip all
# 【DM/CoA 三件套之二】允许 10.0.0.2 作为 RADIUS 授权服务器(DM 强制下线 / CoA 动态改授权)
# 只放通该地址,防止非法服务器踢线或篡改授权
radius-server authorization 10.0.0.2 shared-key-cipher portal
# 【DM/CoA 三件套之三】授权服务器端口(默认 3799,一般无需修改,仅列出备查)
# radius-server authorization port 3799
# 【设备侧侦听端口】本机侦听 Portal 协议报文的 UDP 端口,缺省 2000
# 对应 OpenPortal「设备对接默认设置 → BAS端口」,服务器把报文发到这个端口
web-auth-server listening-port 2000
# 【服务器侧目的端口】设备发往 Portal 服务器的目的 UDP 端口,缺省 50100,key 与服务器一致
# 对应 OpenPortal 服务器自身侦听 Portal 业务的端口(50100),不是 BAS端口
web-auth-server 10.0.0.2 port 50100 key simple portal
# 协议版本兼容:优先 V2,兼容 V1
web-auth-server version v2 v1
# 使能 Portal 功能
web-auth-server enable
两个端口不要混。 Portal 协议是双向的 UDP 交互,双方各自侦听、互为对端端口:
| 方向 | 报文目的端口 | 由谁决定 | 配置命令 |
|---|---|---|---|
| 服务器 → 设备(REQ_CHALLENGE / REQ_AUTH / ACK_LOGOUT) | 2000 | 设备侦听,服务器填「BAS端口」 | web-auth-server listening-port 2000 |
| 设备 → 服务器(ACK_CHALLENGE / ACK_AUTH / NTF_LOGOUT / AFF_ACK_AUTH) | 50100 | 服务器侦听,设备填 port | web-auth-server 10.0.0.2 port 50100 |
典型配错:把 web-auth-server ... port 写成 2000(两边都填 2000)。此时设备把报文发到服务器的 2000 端口,服务器在 50100 上收不到,现象是能弹窗、点登录后一直转圈最后超时,而设备侧 display web-auth-server statistics 显示报文发出去但无响应。
web-auth-server listening-port 取值范围 1024~55535,且必须全局唯一;若该端口被其他业务占用,配置会直接失败,可用 display udp 核查。
# 本地地址池,网关与 DNS 由设备直接下发
ip pool pool100 bas local
gateway 192.168.0.1 255.255.255.0
section 0 192.168.0.2 192.168.0.254
# 用户 DNS(与域视图 dns primary-ip 保持一致,域视图优先)
dns-server 114.114.114.114 8.8.8.8
# 未认证用户组(认证前域使用)
user-group pre-grp
# 认证通过用户组(认证后域使用,此处不做限制;如需限速/ACL 在此挂策略)
user-group post-grp
# —— 免认证放行:Portal 服务器地址 + 用户 DNS ——
acl number 6000
rule 5 permit ip source user-group pre-grp destination ip-address 10.0.0.2 0
rule 10 permit ip source user-group pre-grp destination ip-address 114.114.114.114 0
rule 15 permit ip source user-group pre-grp destination ip-address 8.8.8.8 0
# —— 未认证用户的其余流量:丢弃(由 Portal 重定向页面引导认证)——
acl number 6001
rule 5 permit ip source user-group pre-grp destination ip-address any
# 流分类
traffic classifier pre-allow operator or
if-match acl 6000
traffic classifier pre-deny operator or
if-match acl 6001
# 流行为
traffic behavior pre-allow
permit
traffic behavior pre-deny
deny
# 流量策略:先放通免认证地址,其余拒绝(precedence 小者优先)
traffic policy pre-policy
share-mode
classifier pre-allow behavior pre-allow precedence 1
classifier pre-deny behavior pre-deny precedence 2
# 全局入方向应用(对用户组 UCL 生效)
traffic-policy pre-policy inbound
aaa
# 允许 HTTP 重定向到 Portal 页面
http-redirect enable
# 二层 IPoE 用户以报文 MAC 作"纯用户名",密码统一(MAC 简化认证关键)
default-user-name include mac-address
default-password cipher portal
# 对强制 Web 认证用户的 HTTP 报文做 host CAR,防止 HTTP 报文洪水冲击主控 CPU
http-hostcar enable
# 认证方案:MAC 认证(前域使用)
authentication-scheme mac-radius
authentication-mode radius
# MAC 认证失败:不下线,强制转入 Portal 认证前域弹页面
authening authen-fail online authen-domain portal-pre
# 认证方案:认证后域使用(MAC / Portal 认证通过后统一走 RADIUS 授权)
authentication-scheme post-radius
authentication-mode radius
# 认证方案:Portal 认证前域使用(不认证)
authentication-scheme none-scheme
authentication-mode none
# 认证通过后从 Portal 认证后域上线
authening authen-redirect online authen-domain portal-post
# 计费方案
accounting-scheme radius-acct
accounting-mode radius
accounting realtime 15
accounting-scheme none-acct
accounting-mode none
# ===== ① MAC 认证前域:用户上线先落此域,先用 MAC 向 RADIUS 认证 =====
domain mac-pre
authentication-scheme mac-radius
accounting-scheme none-acct
radius-server group rd1
ip-pool pool100
# 域视图下发 DNS(优先生效于地址池视图;RADIUS 下发优先级最高)
dns primary-ip 114.114.114.114
dns second-ip 8.8.8.8
# 绑定未认证用户组 → 仅可访问 Portal 与 DNS
user-group pre-grp
# 使能 MAC 认证(RADIUS 记录 MAC-账号关联,实现二次上线免输入)
mac-authentication enable
# ===== ② MAC 认证后域:BAS 接口的认证后域,全权限 + 计费 =====
domain mac-post
authentication-scheme post-radius
accounting-scheme radius-acct
radius-server group rd1
ip-pool pool100
user-group post-grp
# 闲置切断:10 分钟内业务流量低于阈值即强制下线,及时释放 IP 与在线会话
# V8 新版本等价写法:idle-cut 10 zero-rate
idle-cut 10 0
# ===== ③ Portal 认证前域(重定向域):仅放通 Portal/DNS,弹认证页面 =====
domain portal-pre
authentication-scheme none-scheme
accounting-scheme none-acct
ip-pool pool100
# 域视图下发 DNS(用户地址在此域分配,必须能解析域名才能触发重定向)
dns primary-ip 114.114.114.114
dns second-ip 8.8.8.8
user-group pre-grp
# ---- Web 强制认证服务(HTTP 重定向)----
# Portal 服务器地址
web-server 10.0.0.2
# 强制重定向 URL
web-server url http://10.0.0.2
# HTTP 方式:get —— 参数随 URL query string 传递(与 URL 带参需求匹配)
web-server mode get
# URL 参数:用户 IP → wlanuserip
web-server redirect-key user-ip-address wlanuserip
# URL 参数:用户 MAC → mac,simple=明文,type1=冒号分隔 aa:bb:cc:dd:ee:ff
web-server redirect-key user-mac-address mac simple type1
# URL 参数:设备 IP(NAS-IP 10.0.0.1) → basip
web-server redirect-key mscg-ip basip
# ---- Portal 强制认证服务(Portal 协议 V2 交互)----
# Portal 服务器地址与跳转 URL(与 web-server 侧保持一致)
portal-server 10.0.0.2
portal-server url http://10.0.0.2
# Portal 协议重定向报文中的 MAC 参数名,须与 web-server 侧一致
portal-server redirect-key user-mac-address mac simple
# ===== ④ Portal 认证后域:Portal 认证通过后全权限 + 计费 =====
domain portal-post
authentication-scheme post-radius
accounting-scheme radius-acct
radius-server group rd1
ip-pool pool100
user-group post-grp
idle-cut 10 0
quit
# 用户业务子接口:终结 VLAN 100,认证点即"按 VLAN"生效
interface GigabitEthernet1/0/2.100
description USER_SERVICE_VLAN100
vlan-type dot1q 100
bas
# 二层普通用户(IPoE);前域=mac-pre(MAC 快速认证),后域=mac-post
access-type layer2-subscriber default-domain pre-authentication mac-pre authentication mac-post
# 认证方式:Web(Portal);配合前域 mac-authentication enable 形成 MAC 优先
authentication-method web
# 可选:加快用户触发认证(按版本支持情况开启)
# arp-trigger
# ip-trigger
# ========== 出口物理口:只承载 VLAN10,不做认证 ==========
interface GigabitEthernet1/0/10
description TO_Internet_Firewall_100.0.0.254
# 上行口不启用 bas,避免用户侧流量误入认证流程
undo shutdown
# ========== 出口子接口:dot1q 终结 VLAN10,与防火墙三层对接 ==========
interface GigabitEthernet1/0/10.10
description TO_Internet_Firewall_VLAN10
vlan-type dot1q 10
# 互连地址;掩码按现场实际,本例按 /24(.254 与 .1 同网段)
ip address 100.0.0.1 255.255.255.0
# ========== 默认路由 ==========
# 指向上级防火墙;原占位 10.0.0.254 必须删除,否则流量被错误引到服务器网段
# 若此前已配过:undo ip route-static 0.0.0.0 0 10.0.0.254
ip route-static 0.0.0.0 0.0.0.0 100.0.0.254
# 服务器网段 10.0.0.0/24 为直连路由,不受默认路由影响
# 若服务器与 NE40 ME60 BRAS 之间跨网段,需保证回程路由指向 10.0.0.1
# 可选:出口链路 BFD 联动,链路故障秒级感知(对端支持 BFD 时再加)
# ip route-static 0.0.0.0 0.0.0.0 100.0.0.254 bfd all-as
出口配置的 4 个现场确认点
| 确认项 | 说明 | 配错的现象 |
|---|---|---|
| 掩码 | 需求只给了 100.0.0.1 与网关 100.0.0.254,未给掩码。二者要同网段,/24 是唯一自然解(/30 时 .254 不可达)。若现场实际是 /30+.2,请按实际改 | 接口 UP 但 ping 100.0.0.254 不通、默认路由下一跳为 invalid |
| VLAN 封装 | VLAN10 必须是 dot1q 子接口终结,不能只配主接口 IP。对接防火墙的 VLAN 号需两端一致 | 子接口不通,display interface 收包为 0 |
| basip 不要改 | basip 仍取 10.0.0.1(服务器通信地址),不是出口地址 100.0.0.1 | Portal 侧按 basip 回连校验设备时匹配失败 |
radius local-ip 不要改 | 它是 RADIUS/CoA 的本地套接字绑定地址,应绑 10.0.0.1 侧;写成出口地址会导致 DM/CoA 收不到 | 服务器踢线、改带宽全部无效 |
出口口是否需要 port link-type trunk / undo portswitch 取决于单板形态:NE40 ME60 BRAS 的 GE 口默认工作在三层模式,可直接建 dot1q 子接口(与本文 g1/0/1.500、g1/0/2.100 一致),无需切换二层。若该口已被 portswitch 切成二层口,则先在主接口 port link-type trunk + port trunk allow-pass vlan 10。
设备侧配好只是完成一半,OpenPortal 上有四个页面必须与本文对齐(① 基础对接设置、② NAS 列表、③ 高级扩展、④ 接入账户组)。任一处不一致,表现都是"认证不成功"、"能弹窗但提交后无反应",或"能上线但落错域/账号名不对"。
① Portal 管理 → 基础对接设置(设备对接默认设置)
| OpenPortal 字段 | 应填 | 对应本文配置 |
|---|---|---|
| BAS IP | 10.0.0.1 | 设备侧 BAS-IP(VLAN 500 接口地址) |
| BAS端口 | 2000 | 设备侦听端口 → web-auth-server listening-port 2000(服务器往 BRAS 发报文的 UDP 目的端口) |
| 服务器监听端口(Portal 业务端口) | 50100 | 服务器自身侦听端口 → web-auth-server 10.0.0.2 port 50100(若 OpenPortal 侧不是 50100,以服务器实际值为准,改设备这条) |
| 共享密钥 | portal | web-auth-server ... key simple portal |
| 设备类型 | 标准 / V2 / CHAP | web-auth-server version v2 v1 |
| 公共账号 / 公共密码 | public / 1qaz2wsx | 仅"公共账号认证"方式使用,与 MAC / Portal 认证无关 |
| Portal 心跳 | 否 | 设备侧未配心跳,保持关闭 |
| 延迟认证 | 关闭 | — |
② Radius 管理 → nas 列表
| 字段 | 应填 | 说明 |
|---|---|---|
| 名称 | NE40 ME60 BRAS | 仅作标识 |
| IP地址 | 10.0.0.1 | 必须等于设备 BAS-IP,否则 OpenPortal 不认这个 NAS |
| 设备类型 | 华为 | 决定用哪套属性字典,HW-* 私有属性靠它才能识别 |
| 密钥 | portal | 与 radius-server shared-key-cipher portal 一致 |
| COA IP | 留空或 10.0.0.1 | 留空即默认发往本行「IP地址」字段,也就是 10.0.0.1,与设备 BAS-IP 一致,因此留空可以正常工作(截图状态可用)。若要显式填写,值必须是 10.0.0.1;填成别的地址(例如误填出口地址 100.0.0.1)才会出现"服务器点强制下线无效、改速不生效" |
| CoA端口 | 3799 | 与 radius-server authorization port 一致 |
| 计费间隔 | 300 | 与设备 accounting realtime 15 不冲突(设备每 15s 主动上报) |
③ 高级扩展(最容易被忽略,直接影响用户名与域)
| 选项 | OpenPortal 行为 | 设备侧必须配套 |
|---|---|---|
| 关闭 | 只回标准属性 | 仅标准属性(Filter-Id 等)生效 |
| Mac认证账户 | MAC 认证后返回该 MAC 关联账户的账户名 | radius-attribute apply user-name match user-type ipoe(见 8.1);不配则用户名仍是 MAC |
| 华为高级 | 额外返回华为 Domain 属性,取值来自「接入账户组 → 详细信息」字段(见 ④) | 该值即下发域的来源(见 8.4);目标域必须已在设备上创建 |
| Mac认证账户 + 华为高级 | 两者都返回 | 8.1 与 8.4 需同时配好 |
从截图看,当前 Server 侧 CoA IP 为空 —— 按 OpenPortal 的取默认逻辑,空值即发往「IP地址」字段 10.0.0.1,与设备 BAS-IP 相同,这一项无需修改;高级扩展为"关闭",若要用"MAC 快速认证后显示真实账号",需在 OpenPortal 选 Mac认证账户,同时设备侧开 8.1 那条命令 —— 两边缺一个都不生效。
④ 接入账户组 → 「详细信息」(华为 Domain 属性的取值来源)
位置:Radius 管理 → 接入账户组 → 接入账户组修改(浏览器标题「接入账户组列表 / 接入账户组修改」,见截图 4)。
只有 ③ 里选了 华为高级 或 Mac认证账户+华为高级,这个字段才有意义 —— 它的值会被填进 RADIUS Access-Accept 的华为 Domain 属性下发,也就是设备侧的切域依据。
| 字段 | 截图取值 | 说明 |
|---|---|---|
| 区域 | 默认区域 | 账户组归属区域,与域无关 |
| 名称 | 默认 | 账户组名称,仅本地标识,不会作为 Domain 下发 |
| 首登改密 / 绑定手机 / 邮箱 / 人脸 / 身份证 | 关闭 | 准入校验项,与 Domain 无关 |
| 访客授权 | 启用 | — |
| 默认策略 / 接入策略 | 默认策略 / 不指定 | 本方案只用一套策略,保持默认 |
| 每月MAC解绑 / 自注册限制 | 0 / 关闭 | — |
| 详细信息 | 留空 | 就是下发的 HW-Domain-Name。填 isp1 → Access-Accept 带 Domain=isp1;留空 → 不下发任何 Domain |
| NAS 列表 | 勾选 是否允许该NAS(10.0.0.1 / NE40 / 华为) | 账户组只对勾选的 NAS 生效,不勾等于不生效 |
| BAS 列表 | 勾选 是否允许该BAS(10.0.0.1 / 标准 / V2/IMC) | 同上,漏勾时表现是"配置都对但属性没下发" |
「详细信息」强烈建议保持留空,不要随手填。
原因:这个值一旦下发,设备就按它去选域,而选域是硬逻辑,填错没有兜底:
| 设备侧状态 | 填了不存在/未放通的域名的结果 |
|---|---|
domain isp1 未创建 + 关闭漫游 | 认证失败,该账户组下所有用户上不了线 |
domain isp1 未创建 + 开启漫游 | 用户落到漫游域,地址池、限速、ACL 全部按漫游域执行,表现为"能上网但 IP 段不对/限速不对" |
域已创建但 BAS 接口 permit-domain 未放通 | 认证被拒,display aaa offline-record 里能看到域校验失败原因 |
本方案只有一个业务域(mac-post / portal-post 由 BAS 接口与 authening 决定),域不由服务器指定,所以这里留空、让设备按本地配置落域才是正确做法。只有确实要做"一号多出口 / VIP 域高带宽"这类按用户分域的场景,才填真实存在的域名,并按 8.4 把目标域的方案、地址池、策略全部建好。
| 命令 | 所属视图 | 作用 | 结论 |
|---|---|---|---|
radius local-ip all | 系统视图 | DM/CoA 报文本地地址绑定 | 必须加(否则 CoA/DM 收不到) |
radius-server authorization 10.0.0.2 ... | 系统视图 | 指定授权(DM/CoA)服务器与密钥 | 必须加 |
web-server redirect-key user-mac-address mac simple type1 | AAA 域视图 | URL 传 MAC,冒号格式 | 必须加 |
portal-server redirect-key user-mac-address mac simple | AAA 域视图 | Portal 协议侧 MAC 参数名 | 建议加(与 web-server 侧对齐) |
http-hostcar enable | AAA 视图 | HTTP 报文 host CAR 防攻击 | 建议加 |
dns primary-ip / dns second-ip | AAA 域视图 | 域级 DNS 下发(优先级高于地址池) | 建议加(前域必须) |
idle-cut 10 0 | AAA 域视图 | 闲置切断,释放 IP/会话 | 建议加(后域) |
web-server mode get | AAA 域视图 | 强制 Web 认证的 HTTP 方式 | 建议加(与 URL 带参匹配) |
service-policy | 域/策略组视图 | EDSG 业务策略(差异化限速计费) | 不加(本需求用不到) |
radius local-ip <ip-address> [ vpn-name ]、radius local-ip any、radius local-ip all(all/any 为等价语义,具体关键字随版本,报错时按 ? 选)。华为文档明确不建议用 any/all,生产上更稳的是精确指定:radius local-ip 10.0.0.1。本例若服务器只往 10.0.0.1 发 DM/CoA,两种写法效果一致;all 的容错性更好(服务器可能用其他目的地址)。radius-server authorization 10.0.0.2 shared-key-cipher portal(谁可以发)+ 端口默认 3799(发到哪)+ 可选 radius-server authorization match-type { any | all }(报文属性与在线用户信息的匹配方式,默认 any 即按优先级取一个属性匹配;若服务器 DM 只带 User-Name,用 all 更严格)。simple:明文携带(不加密)。若改 cipher aes128 ...,还需在 web-server url-parameter shared-key 配密钥、Portal 侧解密,一般不用。type1:把 MAC 输出格式从默认的 aa-bb-cc-dd-ee-ff 改成 aa:bb:cc:dd:ee:ff,正好满足 xx:xx:xx:xx:xx:xx 的要求。type1 时默认输出横杠格式 aa-bb-cc-dd-ee-ff,Portal 侧按冒号解析会直接失败 —— 这是"参数明明带上了,服务器却报 MAC 非法"的典型原因。web-server 管的是 HTTP 重定向(首包被 302 到 Portal 页面);portal-server 管的是 Portal 协议交互(Portal 服务器与 BRAS 之间的 V2 报文、强制 Portal 服务参数、重定向报文)。两套服务的参数名必须一致。web-server 侧:URL 里有 mac,但 Portal 协议侧的重定向报文里没有 mac,用户在 Portal 页面点认证时服务器取不到 MAC。simple(不带 type1),即 Portal 协议侧按默认格式。若 Portal 服务器对该侧的 MAC 也按冒号解析,同样加 type1 即可(语法支持 simple [ type1 ])——建议现场按服务器实际行为抓包确认后二选一。http-hostcar cir <cir-value> [ pir ] [ cbs ] [ pbs ],按业务规模设置,默认值一般够用。dns { primary-ip | second-ip } ip-address。ip pool 的 dns-server)。dns-redirect,此时前/后域 DNS 可以不同(前域引导、后域正常)。mac-pre、portal-pre,用户地址在此分配)配置即可。0 表示完全无流量)即判定闲置,强制下线。idle-cut <分钟> { idle-data <字节> | zero-rate } [ inbound | outbound ];idle-cut 10 0 为老写法,新版本报错时改 idle-cut 10 zero-rate(等价)或 idle-cut 10 idle-data 1024(低于 1KB 也切)。web-server mode { get | post }:设备强制 Web 认证与 web 服务器交互的 HTTP 方式。get 参数走 URL query string,post 走表单提交。wlanuserip/mac/basip),与 get 天然匹配;Portal 侧若明确要求 POST 表单再改 post。service-policy 属于 EDSG(增强动态业务网关)业务策略体系:service-policy <name> edsg 定义策略 → service-policy-group 聚合 → AAA 域下 service-policy-group <name> 绑定,且需 value-added-service enable。# 简单限速:QoS 模板 + 域下绑定(无需 EDSG)
qos-profile 10M
car cir 10000 cbs 1870000 green pass red discard inbound
car cir 10000 cbs 1870000 green pass red discard outbound
aaa
domain mac-post
qos-profile 10M inbound
qos-profile 10M outbound
domain portal-post
qos-profile 10M inbound
qos-profile 10M outbound
按 VLAN(子接口终结 + bas),理由:
g1/0/2.100 子接口终结 VLAN 100 + bas,等价于对整个 VLAN 100 的所有接入端口统一认证策略;bas。deny 由前域重定向引导;认证通过后用户组切为 post-grp,不再受该策略限制;rule permit ... destination ip-address x.x.x.x 0。| 要素 | 命令 | 作用 |
|---|---|---|
| MAC 作用户名 | default-user-name include mac-address | 二层用户无账号,用 MAC 向 RADIUS 认证 |
| 域内使能 MAC 认证 | mac-authentication enable(mac-pre 域) | 首次 Portal 认证成功后 RADIUS 记录 MAC-账号关系 |
| 失败切域 | authening authen-fail online authen-domain portal-pre | MAC 不通过时不下线,转 Portal 页面 |
| 触发方式 | authentication-method web | 首包触发 Web/Portal 流程 |
顺序天然"先 MAC 后 Portal":上线即用 MAC 认证,成功即放行(无弹窗),失败才进 Portal 前域。
| 参数名 | 取值来源 | 配置命令 |
|---|---|---|
wlanuserip | 用户 IP | web-server redirect-key user-ip-address wlanuserip |
mac | 用户 MAC(aa:bb:cc:dd:ee:ff) | web-server redirect-key user-mac-address mac simple type1 |
basip | 设备侧与服务器通信地址 10.0.0.1 | web-server redirect-key mscg-ip basip |
最终重定向示例: http://10.0.0.2?wlanuserip=192.168.0.20&mac=aa:bb:cc:dd:ee:ff&basip=10.0.0.1
NE40 ME60 BRAS 的 BAS 接口在同一 access-type 下只允许指定一个 default-domain authentication(认证后域)。因此:
mac-post 作为接口认证后域:MAC 认证通过的用户从此域上线;portal-post 作为 Portal 用户独立后域:通过前域认证方案的 authening authen-redirect online authen-domain portal-post 让 Portal 认证通过的用户从该域上线;authen-redirect 行为与预期不一致(Portal 用户仍落 mac-post),业务不受影响(两域授权一致),仅落域名称不同;部署后用 display access-user domain portal-post 核对;HW-Auth-Type(MAC / WEB)在服务器侧区分下发 HW-User-Group、HW-ACL、HW-QoS-Profile,比设备侧拆域更灵活。用户地址是私网 192.168.0.0/24,出公网必须做 NAT,但 NAT 只能在一处做,两端同时做会形成双重 NAT(表现为部分应用注册/回连失败、日志里看不到真实源 IP)。
| 方案 | NAT 位置 | NE40 ME60 BRAS 侧动作 | 适用场景 |
|---|---|---|---|
| A(推荐) | 上级防火墙 | 不配 NAT,只配默认路由 | 出口有安全设备、需统一做安全策略与审计;NAT 日志可追溯 |
| B | NE40 ME60 BRAS 自身 | nat address-group + nat outbound | 无出口安全设备,或需按用户粒度做 NAT/溯源 |
选 A 时防火墙必须补三条(缺任何一条都会出现"认证通过但打不开网页"):
192.168.0.0/24 → 防火墙出口公网地址(或 100.0.0.1);ip route-static 192.168.0.0 255.255.255.0 100.0.0.1;192.168.0.0/24 到 untrust。第 2 条是最常被漏的一项——用户能 ping 通自己的网关 192.168.0.1、Portal 也能弹,但所有网站打不开,本质是防火墙不知道 192.168.0.0/24 从哪里回。
选 B 时的配置模板(NE40 ME60 BRAS 接口 NAT 形态):
# 地址组:复用出口地址做 PAT
nat address-group nat-egress
mode pat
section 0 100.0.0.1 100.0.0.1
# 只对用户网段做 NAT,管理地址与服务器网段不做
acl number 3000
rule 5 permit ip source 192.168.0.0 0.0.0.255
# 在出口子接口上应用
interface GigabitEthernet1/0/10.10
nat outbound 3000 address-group nat-egress
版本差异:部分 V8 版本 NAT 需走 nat instance + nat-policy(策略形态),等价逻辑为"源地址 192.168.0.0/24 → source-nat 到 100.0.0.1"。若 nat address-group 在系统视图报错,按 ? 取当前版本关键字。
另:若选 B,则 100.0.0.1 必须是可路由的公网地址;若选 A,100.0.0.1 可以只是私网互联地址,不影响用户上网。
需求指定 114.114.114.114 + 8.8.8.8,配置已按此下发。需提醒:经国内出口访问 8.8.8.8 往往不通或极慢,用户侧表现为"网页打开要等几秒才出来"(先等主 DNS 超时)。若现场是纯国内出口,建议把备 DNS 换成 223.5.5.5(阿里)或 119.29.29.29(腾讯),前域 ACL 6000 同步放通新地址即可。这一条不影响认证,只影响体验。
# RADIUS 配置与服务器状态(含授权服务器 / DM/CoA 配置)
display radius-server configuration group rd1
display radius-server item
# Portal 服务器配置(输出中核对:本机侦听端口 2000、服务器目的端口 50100)
display web-auth-server configuration
display web-auth-server statistics # 只发不收 = 对端端口或共享密钥不一致
display udp # 核查 2000 / 50100 是否被其他业务占用
# 四个域的上线用户(逐个核对落域)
display access-user domain mac-pre
display access-user domain mac-post
display access-user domain portal-pre
display access-user domain portal-post
# 在线用户总览(IP / MAC / 域 / 接入类型)
display access-user
# 地址池使用情况
display ip pool name pool100
# 认证失败记录
display aaa offline-record all
# ===== 出口与路由核验(新增)=====
# 默认路由必须只有一条有效项,下一跳 100.0.0.254
display ip routing-table 0.0.0.0
# 出口子接口物理/协议均 UP,且出方向有计数增长
display interface GigabitEthernet1/0/10.10
# 用出口地址作源 ping 防火墙,验证二层 VLAN10 与三层连通性
ping -a 100.0.0.1 -c 4 100.0.0.254
# 验证用户到公网(在 NE40 ME60 BRAS 上用用户地址作源,或直接在终端上测)
# ping -a 192.168.0.20 114.114.114.114
# 实时调试(用完务必关闭)
# debugging radius all
# debugging web all
# undo debugging all
常见问题定位
| 现象 | 排查点 |
|---|---|
| 不弹 Portal 页面 | 前域 ACL 是否放通 10.0.0.2 与 DNS;http-redirect enable;dns primary-ip 是否可达;设备侦听 2000 是否被 ACL/防火墙拦截 |
| 弹窗后认证一直失败 | 共享密钥(portal)两侧一致;radius-server authorization 地址与密钥;前域是否分到正确 IP |
| MAC 参数被服务器判非法 | simple type1 是否配置(默认是横杠格式);Portal 侧解析格式是否一致 |
| 所有用户都弹窗(MAC 免认证不生效) | default-user-name include mac-address、mac-authentication enable;RADIUS 侧 MAC-账号关联是否已建立 |
| 服务器踢线/改带宽无效 | radius local-ip all(或 radius local-ip 10.0.0.1)+ radius-server authorization + 3799 端口放通 |
| 认证成功但上不了网 | 后域用户组/ACL;默认路由下一跳是否为 100.0.0.254;出口 NAT 由谁做(5.6 节) |
| 用户频繁掉线 | idle-cut 阈值过激;accounting realtime 与服务器超时;链路抖动 |
| 出口子接口 UP 但 ping 不通防火墙 | 掩码是否与 .254 同网段;VLAN10 是否两端一致;对端是否允许该网段 |
| 认证通过、能 ping 网关、网页全打不开 | 99% 是 NAT 未做 或 防火墙缺 192.168.0.0/24 回程路由(5.6 节) |
| 网页打开要等 3~5 秒 | 备 DNS 8.8.8.8 经国内出口不可达,换 223.5.5.5(5.7 节) |
display ip routing-table 里默认路由指向 10.0.0.254 | 旧占位配置未删:undo ip route-static 0.0.0.0 0 10.0.0.254 |
| 部分终端能上网、部分不行 | 出口 NAT 池不匹配 / 防火墙会话表满 / 用户组 post-grp 未生效 |
| 服务器回了真实用户名,在线名还是 MAC | 未配 radius-attribute apply user-name match user-type ipoe(IPoE 默认不替换,见 8.1) |
| 下发了用户组但限速/ACL 没生效 | 设备无同名 user-group(display access-user 的 UCL-Group 为空);或分类器未并入唯一那条全局 traffic-policy(见 8.2) |
| 用户没落到服务器指定的域 | 域名靠用户名后缀承载,检查 8.1 是否开启、radius-server coa update username 是否开启、目标域是否已创建(见 8.4) |
| 用户全掉线 / 落到非预期域 | OpenPortal「接入账户组 → 详细信息」被填了域名,而设备上该域不存在或 permit-domain 未放通。该字段不指定域时必须留空(见 3.10 ④) |
| Filter-Id 下发后用户上不了线 | 值既不是设备上存在的 ACL 编号、也不是存在的用户组 → 授权失败(不是忽略),见 8.3 |
| Filter-Id 只生效了一条规则 | 报文里多个 Filter-Id 只有最后一个生效;Cisco 风格 xxx in/out 后缀在华为无效 |
license active bas slot X 与实际单板槽位一致;radius-server group)。V5/V600R00x 老版本为 radius-server template,web-auth-server/bas 形态亦有差异;其中 web-auth-server listening-port 若在设备上不识别,请在 web-auth-server ? 下确认该版本侦听端口的命令名(早期版本为 web-auth-server port),值为 2000 不变;radius local-ip:all 与 any 视版本而定,报错时按 ? 选择;生产建议精确到 10.0.0.1;idle-cut:老写法 idle-cut 10 0,V8 新写法 idle-cut 10 zero-rate;portal-server 视图:位于 AAA 域视图(与 web-server 同域);portal,上线建议改 12 位以上强密钥(两侧同步);web-auth-server 可配主备,radius-server authentication 可用两组地址 + weight;100.0.0.1/24 是按网关 .254 推断的自然解,上线前必须与现场规划核对;若实际是小掩码网段,ping 100.0.0.254 会不通;vlan-type dot1q 10,防火墙侧子接口/安全区域绑定的 VLAN 必须是 10;ip route-static 0.0.0.0 0 10.0.0.254,务必删除,否则两条默认路由可能负载或错误引流;192.168.0.0/24 → 100.0.0.1 的回程路由;100.0.0.1 若为运营商分配的互联地址,需确认是否允许做源 NAT;若走方案 A(防火墙 NAT),则无此限制;10.0.0.1),无需强制填写,若填写则必须是 10.0.0.1;web-auth-server listening-port 2000(设备侦听,等于 OpenPortal 的「BAS端口」)与 web-auth-server 10.0.0.2 port 50100(服务器侦听,设备发报文的目的端口)是两个不同的端口,两边都填同一个值必然失败;radius-attribute apply user-name match user-type ipoe,缺一不生效;HW-Domain-Name。填了域名而设备上没有该域,关闭漫游=认证失败、开启漫游=落到漫游域,两类故障都表现为"用户上不了网"(见 3.10 ④);10.0.0.1,不勾等于该账户组的属性(含 Domain)不下发;radius-attribute include hw-dhcp-option 12(187,Access-Request),且要求用户经本机 DHCP 取址(见 8.6);radius-attribute include hw-dhcp-option 12;② OpenPortal「高级扩展」选华为高级;③ OpenPortal 侧完成 MAC 格式适配(设备缺省 xxxx-xxxx-xxxx 与截图 11:22:33:44:55:66 写法不同,由 OpenPortal 归一化即可,设备侧不要改 31 属性格式)。上线后用一个 Windows 终端验证:display access-user detail 看 31 属性,再到 OpenPortal 页面看是否自动新增该 MAC(见 8.7)。这三件事共同点:属性下发只是"带话"给设备,能不能生效取决于设备侧有没有对应配置。华为文档的原文是"RADIUS 服务器下发的属性,只有在设备上有对应配置时才生效"。
结论:需要加一条命令,因为 IPoE 默认不做这件事。
radius-server group rd1
# 对 IPoE 用户启用"用服务器下发的用户名替换设备生成的用户名"
radius-attribute apply user-name match user-type ipoe
| 项目 | 说明 |
|---|---|
| 所属视图 | RADIUS 服务器组视图(radius-server group rd1),不是 AAA 视图、也不是域视图 |
| 服务器侧要求 | Access-Accept 里携带标准 1 号属性 User-Name,值即真实账号,如 zhangsan@isp1 |
| 默认行为 | 只有 EAP 用户和 RADIUS proxy 用户的用户名会被替换;IPoE 用户默认不替换 —— 这就是"明明服务器回了用户名,设备上还是 MAC"的根本原因 |
| 生效范围 | 在线会话的 User-Name、计费报文的 User-Name、日志、CoA/DM 按用户名的匹配 |
改造后的时序:
① 认证请求 User-Name = aabbccddeeff (本地以 MAC 作用户名)
② Access-Accept User-Name = zhangsan@isp1 (服务器回真实账号)
③ 设备替换 在线用户 User-Name = zhangsan@isp1
④ 计费 Start User-Name = zhangsan@isp1 (按真实账号计费)
三个必须注意的坑:
@域 就自动切域。要切域见 8.4。radius-server dm-request support username,否则服务器只能按 Acct-Session-Id / Framed-IP 匹配。另有一个容易混淆的命令:radius-server user-name { domain-included | original }。它管的是发给服务器的用户名里带不带域名(默认 domain-included,带域),与"用服务器下发的用户名替换"是两件事,别混用。
属性:HW-Usr-Group-Name,VSA 26-251,String 类型,长度 1~32 字节,取值由字母、数字、下划线组成。
| 方向 | 位置 | 含义 |
|---|---|---|
| 服务器 → 设备 | Access-Accept / CoA | 指定该用户归属的用户组名,设备据此套用组策略 |
设备收到后,display access-user 里可以看到 UCL-Group 字段被填成该组名。以服务器下发为准,会覆盖域视图下配置的 user-group。
本地要做的三步:
# 第一步:组必须存在(名字、大小写必须与服务器完全一致)
user-group vip-grp
# 第二步:用 ACL 以 user-group 为源匹配
acl number 6100
rule 5 permit ip source user-group vip-grp destination ip-address any
traffic classifier vip-cls operator or
if-match acl 6100
traffic behavior vip-behavior
permit
car cir 50000 cbs 6250000 green pass red discard
# 第三步:并入全局唯一的 inbound 策略
traffic policy pre-policy
share-mode
classifier pre-allow behavior pre-allow precedence 1
classifier pre-deny behavior pre-deny precedence 2
classifier vip-cls behavior vip-behavior precedence 3
traffic-policy pre-policy inbound
关键工程点:全局 traffic-policy ... inbound 只能挂一条。 新增用户组策略时必须把分类器合并进已有策略,不能再来一条 traffic-policy pre-policy2 inbound —— 后一条要么报错、要么覆盖前一条,表现为"免认证放行突然失效"。
两种更省事的替代方案:
| 需求 | 做法 | 说明 |
|---|---|---|
| 只做限速 | 服务器下发 HW-QoS-Profile-Name | 设备侧预建 qos-profile,服务器直接指定模板名,比"组 + ACL + CAR"简单得多 |
| 做细粒度 ACL | 服务器下发 HW-Data-Filter(VSA 26-82)+ aaa 下 remote-download acl enable | 可动态下发 流分类-流行为 对,最灵活,但配置与排障复杂度最高 |
组不生效的排查顺序:① 设备上有没有这个组(display access-user 的 UCL-Group 是否为空)→ ② 组名有没有大小写/空格差异 → ③ 分类器有没有并进那条唯一的策略 → ④ 服务器是否同时下发了 HW-Exec-Privilege(管理用户级别属性,会盖掉组)。
补充:除了 HW-Usr-Group-Name,标准 11 号属性 Filter-Id 同样可以下发用户组名(值填组名,ACL 编号找不到时才当组处理)。如果你的服务器只支持标准属性,用 Filter-Id 即可,详见 8.3。
格式:标准属性 11 Filter-Id,类型 String(协议规定为 Text),单值最长 253 字节;华为侧实际取值建议控制在 1~32 字节。
华为对这个属性的解析顺序是固定的,同一个值可能被当成三种东西:
| 顺序 | 值的形态 | 设备动作 |
|---|---|---|
| ① 先当 ACL 编号 | 3000、3999 这类数字 | 套用设备上预先配好的该编号 ACL 规则 |
| ② ACL 编号不存在,再当 用户组名 | vip-grp 这类字符串 | 套用该用户组关联的 ACL / CAR / VLAN / 优先级 |
| ③ 两者都不存在 | — | 授权失败(不是忽略) |
第③步是最大的坑:ACL 编号写错或用户组没建,结果不是"过滤不生效",而是授权失败。现象很迷惑——认证能过(Access-Accept 正常返回),但用户上不了线或上线即掉线。
路径 A:授权静态 ACL(Filter-Id = ACL 编号)
# 设备侧必须先建好 ACL 及规则,服务器只传一个编号
acl number 3000
rule 5 permit ip destination 10.0.0.0 0.0.0.255
rule 10 deny ip
服务器侧填:Filter-Id = 3000
规则全在设备上维护,服务器只负责"选哪一个"。适合规则稳定、按套餐分类的场景;改规则要上设备。
路径 B:授权用户组(Filter-Id = 组名,推荐)
要先说清一个容易混的点:下发用户组可以用两个属性——
| 属性 | 编号 | 值 | 说明 |
|---|---|---|---|
HW-Usr-Group-Name | 26-251(私有) | 组名 | 语义明确,优先推荐 |
Filter-Id | 11(标准) | 组名 | 靠"ACL 编号找不到才当组"的规则生效 |
两个属性下发的是同一个东西,服务器支持哪个用哪个。路径 B 的设备侧配置与 8.2 完全一致(user-group vip-grp + ACL source user-group + traffic-policy),此处不重复。
为什么优先用组而不是 ACL 编号:ACL 资源有限,用户规模大时"每人一个 ACL"会直接打爆规格;用户组是多个用户复用同一套 ACL,规格上省得多。华为文档给的建议就是"用户权限分类少、在线用户多时用用户组"。
路径 C:动态 ACL(HW-Data-Filter,26-82)
服务器把 ACL 规则本身下发下来,设备不用预配:
aaa
remote-download acl enable
最灵活,规则全在服务器侧管;代价是设备上 display 看不到手工配置,排障时要先想到"这条规则是服务器下发的"。另外它下发的不是"ACL 编号",而是 流分类器-流行为(C-B)对,粒度更细。
| 限制 | 说明 | 现场表现 |
|---|---|---|
| 多个 Filter-Id 只有最后一个生效 | 报文里带多个 11 号属性时,设备只取最后一个 | 服务器同时下发 acl-in 和 acl-out,实际只有后面那个起作用 |
值里含 @ 只取 @ 前 | vip@isp1 会被截成 vip | 服务器用"组名@域"拼接,导致组名对不上 |
| 长度 1~32 字节 | 用户组名场景 | 组名超长被截断或直接授权失败 |
| 不带方向语义 | 华为这里的 Filter-Id 只是一个 ACL / 组标识 | 从 Cisco 风格模板迁过来时最容易踩 |
第四条要特别提醒:Cisco 体系里 Filter-Id 常见写法是 acl-name in / acl-name out,这个写法在华为上不成立。值会被整体当成组名去找,找不到就授权失败。对接 Cisco 风格的 RADIUS 模板时必须改成纯 ACL 编号或纯组名。
方向怎么控制?不靠属性后缀,靠 ACL 规则本身的 permit / deny 表达;确实要上下行分别精确控制时,用 HW-Data-Filter 下发带方向的 C-B 对。
| 场景 | 选择 | 理由 |
|---|---|---|
| 规则稳定、按套餐分几类 | A 静态 ACL 编号 | 简单直观,设备侧可控 |
| 用户规模大、权限分类少 | B 用户组(推荐) | 复用 ACL,不占规格 |
| 规则频繁调整、要服务器统一管 | C 动态 ACL | 无需上设备改配置 |
三者不冲突,可组合:用户组负责带宽/优先级,Filter-Id 或 HW-Data-Filter 负责 ACL,这也是运营商最常见的组合方式。
属性:HW-Domain-Name,VSA 26-138,String 类型,长度为域名字符串(不带 @)。
这条属性两个方向都走,但含义不同,不要混:
| 方向 | 用途 |
|---|---|
| 设备 → 服务器 | 告知服务器"用户实际在哪个域认证"。它可能是漫游域、强制域,不一定等于用户名里的域名,所以服务器不能用它反推用户名 |
| 服务器 → 设备 | 显式指定用户落哪个域。OpenPortal 侧就是「NAS 列表 → 高级扩展 = 华为高级」+「接入账户组 → 详细信息 = 域名」,值即在此下发 |
所以设备侧切域有两条路径,可任选其一、也可并用:
| 路径 | 承载方式 | 适用阶段 | 前置条件 |
|---|---|---|---|
| A. 域属性下发 | HW-Domain-Name(OpenPortal「接入账户组 → 详细信息」) | 认证阶段,Access-Accept 带下来 | Access-Accept 里必须有该属性;设备上目标域必须已创建、permit-domain 已放通 |
B. 用户名带 @域名 | 用户名后缀 user@domain | 认证阶段(靠 8.1 用户名替换)/ CoA 阶段(靠 radius-server coa update username) | 服务器回的用户名要带 @域名,或 CoA 报文改用户名 |
# 路径 A:无需额外命令,属性随 Access-Accept 下发即生效;
# 前提是目标域已创建(domain isp1)且 BAS 接口 permit-domain 已放通,否则认证失败。
# 路径 B-1:认证阶段 —— 靠 8.1 的用户名替换,把 @域名 带进来
radius-server group rd1
radius-attribute apply user-name match user-type ipoe
# 路径 B-2:CoA 阶段 —— 服务器用 CoA 改用户名并切域,必须显式开启
# 华为文档原文:开启允许通过 CoA 报文更新用户名,并根据用户名中携带的域名更新域的功能
radius-server coa update username
OpenPortal 对接补充(取值位置与留空规则)
在 OpenPortal 上,这条下行的 Domain 属性由两处共同决定:
所以「详细信息」留空 = 不下发 Domain,设备按本地配置落域;填了 isp1 = Access-Accept 带 Domain=isp1,设备按它选域。默认应留空,不要随手填写——域不存在或未放通时,关闭漫游会直接认证失败,开启漫游会落到漫游域(策略全不匹配),这两种现象在现场都表现为"用户上不了网",但排查方向完全不同。
另外,华为文档对域来源的表述是"AAA 服务器下发 > BRAS 本地配置 > 运营商分配",但该属性在各版本 Access-Accept 中的处理方式不完全一致,上线前建议抓包确认实际下发的属性号(标准 26-138 或厂商自定义),并确认目标域已在设备上创建、permit-domain 已放通。若服务器侧确实不回该属性(或抓不到),走路径 B:"用户名带 @域名"(8.1 的用户名替换)。
域来源的优先级(华为文档明确):AAA 服务器下发 > BRAS 本地配置 > 运营商分配。 也就是说服务器确实能让用户落到不同域:既可以用域属性(路径 A),也可以用用户名后缀(路径 B)。同一场景下两者都存在时,以服务器实际下发的为准,上线时抓一次 Access-Accept 就能确认走的是哪条。
本地必须配套的几件事:
| 事项 | 配置 | 说明 |
|---|---|---|
| 目标域必须存在 | domain isp1 等 | 域不存在时:关闭漫游则认证失败,开启漫游则落漫游域 |
| 每域独立策略 | 域下绑 authentication-scheme / accounting-scheme / radius-server group / ip-pool / qos-profile / user-group | 这才是"按域做策略"的真正含义——同一台设备按域给不同出口、不同限速、不同地址池 |
| 域白名单 | BAS 接口下 permit-domain(语法随版本,配置前用 ? 确认) | 防止服务器下发任意域导致用户落到未预期域,属于安全加固 |
| 域跳转 | authening authen-fail online authen-domain / authening authen-redirect online authen-domain | 本文 3.7 已用于前域→后域跳转 |
典型用法:isp1 / isp2 两个域分别绑不同 RADIUS 组与不同出口策略,实现"一号多出口";vip 域绑高带宽 qos-profile;guest 域绑受限 ACL。
| 属性名 | VSA | 类型 / 长度 | 方向 | 本地对应配置 |
|---|---|---|---|---|
User-Name | 标准 1 | String ≤253 | 服务器→设备 | radius-attribute apply user-name match user-type ipoe |
Filter-Id | 标准 11 | String/Text ≤253(建议 ≤32) | 服务器→设备 | 预配 ACL 编号,或 user-group+traffic-policy;二者都没有则授权失败 |
HW-Usr-Group-Name | 26-251 | String 1~32 | 服务器→设备 | user-group + ACL(source user-group) + traffic-policy |
HW-Domain-Name | 26-138 | String | 主方向 设备→服务器;下行时用于选域 | 上行无需配置,随报文上送;下行由 OpenPortal「高级扩展=华为高级」+「接入账户组→详细信息」提供,该字段留空即不下发,目标域须已创建并放通(8.4) |
HW-Data-Filter | 26-82 | — | 服务器→设备 | aaa 下 remote-download acl enable |
HW-QoS-Profile-Name | — | String | 服务器→设备 | 设备预建 qos-profile |
HW-Access-Service | 26-83 | String | 服务器→设备 | 设备预建 access-service 业务模板 |
HW-Exec-Privilege | 26-29 | Integer | 服务器→设备 | 管理用户级别,配了会盖掉用户组 |
HW-Dhcp-Option | 26-187 | String | 设备→服务器(Access-Request) | radius-attribute include hw-dhcp-option 12(取主机名,见 8.7);需要终端指纹再加 60,见 8.6.2 |
HW-HTTP-UA | 26-159 | String ≤247 | 设备→服务器(计费报文) | NE40 ME60 BRAS 不支持:属交换机/AC 的 NAC 特性,需 http parse user-agent enable(见 8.6.1) |
服务器侧必须先导入华为 RADIUS 属性字典,否则它不认识 HW-Usr-Group-Name 这类私有属性,会直接丢弃。
先说结论:NE40 ME60 BRAS 侧没有"把浏览器 User-Agent 塞进 RADIUS 报文"的开关。 想在 Access-Request 的 Vendor-Specific 里看到 UA,光靠设备配置做不到,原因见下。
| 项目 | 内容 |
|---|---|
| 属性名 | HW-HTTP-UA,华为扩展属性 159,String,最大 247 字节 |
| 内容 | HTTP 报头里的 UA 字段:操作系统及版本、CPU 类型、浏览器类型及版本、语言、插件 |
| 出现报文 | RADIUS 计费报文(Accounting-Request),不是认证请求 |
| 触发命令 | http parse user-agent enable(系统视图,缺省关闭) |
| 配套属性 | HW-Terminal-Type(157,识别后的终端类型)、HW-Dhcp-Option(158)、HW-LLDP(163)、HW-CDP(164) |
这里有三个必须说清的点,否则配置方向会完全跑偏:
① 这条命令不在 BRAS 的接入特性里。 http parse user-agent enable 属于华为交换机 / AC 的 NAC 终端类型感知特性(官方描述是 "the AC extracts the UA field")。NE40 ME60 BRAS 的「配置 RADIUS 报文属性携带」命令族(radius-attribute include ...)里没有 UA / 终端类型的选项,可选项只有 hw-dhcp-option、hw-dhcpv6-option、hw-web-url、hw-vpn-instance、hw-user-mac、hw-gateway-address 这些。所以:
# 现场一行验证:能补全就支持,报 Unrecognized 就是不支持
http parse user-agent enable ?
② 它走计费报文,不走认证报文。 即使设备支持,UA 也是随 Accounting-Request 上送(因为 UA 要等用户发第一个 HTTP Get 才拿到,而认证早已结束)。如果你盯着 Access-Request 抓包找 UA,永远找不到 —— 这是这类需求最常见的误判。
③ UA 只对明文 HTTP 可见。 HTTPS 门户、HSTS 站点、非浏览器客户端都拿不到 UA。设备侧只解析 HTTP Get,POST 或其他方法也不处理。
在 Access-Request 里携带终端指纹,NE40 ME60 BRAS 支持的是这条路 —— 用 DHCP Option 反推终端:
| Option | 内容 | 终端识别价值 |
|---|---|---|
| 12 | 主机名 | 最高,如 DESKTOP-8H3K2L1、iPhone、HUAWEI-P40 |
| 60 | Vendor Class ID | 高,如 MSFT 5.0、android-dhcp-13、HUAWEI |
| 61 | Client ID | 中,部分终端带厂商特征 |
| 55 | 参数请求列表 | 高,不同 OS 请求的参数集合不同,可作指纹 |
| 82 | 线路 ID(relay 信息) | 定位接入位置,不是终端 |
radius-server group rd1
# 在 Access-Request 中携带 DHCP Option 12 / 55 / 60 / 61(可一次写多个)
radius-attribute include hw-dhcp-option 12 55 60 61
前置条件(缺一条就收不到 Option):
ip pool pool100 本地分配,满足);另外若需要上送访问 URL,NE40 ME60 BRAS 还有 radius-attribute include hw-web-url accounting-request(计费报文带 URL),但这也不是 UA,且属于增值业务/审计范畴,本方案未启用。
| 路径 | 做法 | 代价 |
|---|---|---|
| A. Portal 服务器采集(首选) | OpenPortal 本来就在 HTTP 层接收浏览器请求,UA 天然在它手里。由它在自己的 RADIUS 报文里填充 VSA | 需 OpenPortal 侧支持自定义属性;与设备配置无关,最省事 |
| B. 接入交换机上送 | 若用户经华为 S 系列接入,在交换机上 http parse user-agent enable,由它上送 159 | 只覆盖该交换机下的用户;交换机需能看到 HTTP 报文 |
| C. 前置代理/审计设备 | 由上网行为管理、SSL 网关采集 | 额外设备与成本 |
结论一句话:BRAS 只能上送"它能看见的东西" —— DHCP Option(187)、MAC、VLAN、接入端口、URL(计费报文);浏览器 UA 属于 HTTP 层,设备侧看不到也带不出,只能由 HTTP 层的一方(Portal / 接入交换机 / 代理)提供。
# 确认 include 是否生效(会列出已 include 的属性)
display radius-server configuration group rd1
# 实时看 Access-Request 里带了哪些 VSA(用完关闭)
# debugging radius all
# undo debugging all
抓包判读:HW-Dhcp-Option(187) 应是 Vendor-Id 2011、Vendor-Type 187,值里按 option-code + length + value 依次排列;如果看到 26-159 出现在 Accounting-Request 里,说明是别的接入设备(交换机/AC)上送的,不是 BRAS。
OpenPortal 的「终端主机名管理」是一张 MAC 标识 → 终端主机名 的映射表:
| MAC 标识 | 终端主机名 |
|---|---|
11:22:33:44:55:66 | Huawei-Mate40Pro |
66:55:44:33:22:11 | Xiaomi12 |
11:22:33:44:55:55 | Oppo-FindX5Pro |
这张表的数据来源就是本节要讲的链路:BRAS 在认证请求里上送 DHCP Option 12,OpenPortal 解析出来,以 MAC 为键落库。它是"自动学习 + 可手工修正"的映射表——自动学到的可能不准(用户自己改主机名),所以页面才提供了新增/编辑/删除(截图右上角三个按钮)。
终端 DHCP Discover / Request
└─ Option 12 = "Huawei-Mate40Pro" ← 主机名由终端自己填,不是设备生成的
↓
BRAS 本地 DHCP 池(ip pool pool100)分配 192.168.0.x,同时缓存 Option 12
↓
BRAS 发起 RADIUS Access-Request
└─ VSA 26-187(HW-Dhcp-Option),值 = 0C 12 "Huawei-Mate40Pro"
│ ↑ option-code=12, length=18, 后面 ASCII
↓
OpenPortal(「高级扩展」= 华为高级 时才解析该属性)
↓
按 MAC 建立索引 → 写入「终端主机名管理」
这里有个容易被忽略的价值点:MAC 快速认证的第一个 Access-Request 就同时带上了 MAC、IP 和主机名,也就是说用户还没打开浏览器、页面还没弹出来,OpenPortal 已经知道这台机器叫什么了。这与"MAC 优先、免弹窗"的体验是天然匹配的。
核心只有一条,位置在 RADIUS 服务器组视图:
radius-server group rd1
# 【核心】认证请求报文中携带 DHCP Option,12 = 主机名(Host Name)
# 这是 HW-Dhcp-Option(26-187) 的唯一开关,不配则 OpenPortal 收不到任何 option
radius-attribute include hw-dhcp-option 12
为什么只写 12,不写 12 55 60 61:
HW-Dhcp-Option 是一个 RADIUS 属性(26-187),里面把多个 DHCP option 按 code + length + value 串起来打包。RADIUS 单个属性的长度上限是 253 字节,而 Option 55(参数请求列表)在不同终端上长度差异极大,部分终端能到 40 字节以上。一次性把 12 55 60 61 全塞进去,最容易出现的结果是排在后面的 option 被截断,而 Option 12 恰好排在最前——一旦顺序或终端差异导致它不在首位,主机名就丢了。
所以取主机名时只写 12;确实还需要终端指纹,再单独加 60(Vendor Class ID)并观察长度。display radius-server configuration group rd1 可以确认最终 include 了哪些。
截图里的 MAC 是 11:22:33:44:55:66(冒号、6 组 2 位),而设备 31 号属性 Calling-Station-Id 的缺省格式是 xxxx-xxxx-xxxx(华为 4-4-4 横杠、小写)。两者写法不同,但不需要在 BRAS 上改:
OpenPortal 自身支持 MAC 格式适配 —— 它能识别冒号 / 横杠 / 点分 / 无分隔等常见写法并归一化后再做关联。所以设备侧保持缺省,前面 8.7.3 那一条 radius-attribute include hw-dhcp-option 12 就是全部配置。
这一点很关键,因为 calling-station-id mac-format 改的是整个 RADIUS 组的 31 属性格式,影响面是全局的:
| 影响对象 | 后果 |
|---|---|
| 计费报文 | 计费与认证的 MAC 写法必须一致,老话单里的 MAC 是新格式,对不上历史数据 |
| 其他按 MAC 匹配的系统 | 上网行为管理、审计、IP-MAC 绑定表等若按固定格式解析,会解析失败 |
| 多服务器共用一组 | 一个组里挂了多台服务器,改格式对它们同时生效 |
所以原则是:服务器能适配就不动设备,把差异留在服务器侧,设备侧保持厂商缺省值,最省事也最不容易连带影响别的系统。
只有当 OpenPortal 明确不支持某种写法时,才在设备侧兜底(这一条默认不加,先问清 OpenPortal 侧支持哪些格式):
radius-server group rd1
# 【可选,默认不加】把 31 属性 Calling-Station-Id 的 MAC 改成 XX:XX:XX:XX:XX:XX
# 仅在 OpenPortal 无法识别设备缺省的 xxxx-xxxx-xxxx 时才需要
# 注意:该命令作用于整个 RADIUS 组,认证与计费报文同时改变,会影响按固定格式解析的下游系统
# calling-station-id mac-format colon-split mode2
命令视图差异:calling-station-id mac-format 在 V5/V600 时代位于 radius-server template 视图,V8 移到 radius-server group 视图;配置前用 ? 确认。
同理,本方案 default-user-name include mac-address 生成的纯用户名本身就是 MAC,若 OpenPortal 的「MAC标识」取的是 User-Name 而不是 31 属性,也应由 OpenPortal 侧适配,而不是改设备的用户名分隔符 —— 改 User-Name 会影响服务器侧按 MAC 建账号的匹配。
| 前提 | 不满足时的现象 |
|---|---|
用户经本机 DHCP 取址(本方案 ip pool pool100 bas local,BRAS 自身即 DHCP 服务器) | 静态 IP 用户、或 DHCP 由旁挂服务器分配且报文不经本机 → 187 里根本没有 option 12 |
| 终端主动上报 Option 12 | Windows / macOS / iOS 基本都带;部分安卓(尤其定制 ROM)不带 → 该 MAC 在表里没有主机名,只能在页面上手工补录 |
认证前域与后域都引用同一个 RADIUS 组 rd1 | 本方案已满足(mac-pre/mac-post/portal-post 均引用 rd1);若只在一个域引用,另一类用户就永远没有 187 |
# ① 配置是否真的 include 上了(会列出 include 的属性清单)
display radius-server configuration group rd1
# ② 看 Access-Request 里 187 的实际内容(用完关闭)
# debugging radius all
# undo debugging radius all
# ③ 用户上线后核对在线会话(User-Name / MAC / 授权结果)
display access-user detail
判读技巧:HW-Dhcp-Option 的值是一串十六进制。看到 0C 12 48 75 61 77 65 69 ... 就对了 —— 0C 是 option 12,12(十进制 18)是长度,后面 48 75 61 77 65 69 就是 Huawei 的 ASCII。如果只有 0C 00(长度为 0)或者直接跳到下一个 option code,说明终端没填主机名,不是设备没送。
Filter-Id(见 8.2 / 8.3),并在服务器侧做白名单校验。| 占位符 | 本文取值 | 说明 |
|---|---|---|
10.0.0.2 | Portal / RADIUS 服务器 | 按现场替换 |
10.0.0.1 | NE40 ME60 BRAS 对接地址(BAS-IP) | 按现场替换 |
portal | 共享密钥 | 按现场替换(建议强密钥) |
2000 | BRAS 侦听 Portal 报文的 UDP 端口(OpenPortal 的「BAS端口」) | 缺省 2000,非必要不改 |
50100 | Portal 服务器侦听 UDP 端口(设备发报文的目的端口) | 按服务器实际端口替换 |
slot 1 | BAS License 槽位 | 按单板实际槽位替换 |
100.0.0.1 | 网间网出口本地地址(g1/0/10.10) | 已按要求配置,掩码待现场确认 |
100.0.0.254 | 上级防火墙网关(默认路由下一跳) | 已按要求配置 |
10 | 网间网出口 VLAN | 已按要求配置 |
192.168.0.0/24 | 用户网段 | 已按要求配置 |
下面是设备侧配置的汇总版,与第 3 章逐段配置一致,只是去掉了分段说明、按 # ---------- 小节 ---------- 归类,便于在设备上一个 system-view 后整段粘贴;# 开头的行是注释,不执行。
# =============================================================
# 华为 NE40 ME60 BRAS 对接 OpenPortal —— Portal + RADIUS 认证配置(MAC 快速认证优先)
# 场景:二层普通用户(IPoE) + MAC 快速认证优先 + Portal 认证 + 网间网出口
# 版本:NE40 ME60 BRAS(华为 NE40E / NE40E-M / NE40E-F 与 ME60),V8 平台(V800R011C10 及以上)
# 四域:mac-pre / mac-post / portal-pre / portal-post
# 修订:V1.1 增加 radius local-ip all、simple type1、portal-server、http-hostcar、dns、idle-cut 等
# 修订:V1.2 增加网间网出口 VLAN10(g1/0/10 子接口 100.0.0.1,网关 100.0.0.254)+ 默认路由修正
# 修订:V1.3 增加 RADIUS 下发属性落地(用户名替换 / 用户组 / 域 / Filter-Id)
# 修订:V1.5 纠正 Portal 端口语义:2000=BRAS 侦听端口(OpenPortal 的 BAS端口),50100=Portal 服务器侦听端口
# 修订:V1.7 补充 HW-Domain 属性来源:OpenPortal「接入账户组→详细信息」,不指定域时必须留空
# 修订:V1.8 新增 13.5:UA(159) 为交换机/AC 特性、走计费报文,BRAS 不支持;BRAS 可上送 HW-Dhcp-Option(187)
# 修订:V1.9 新增 13.6:终端主机名识别(Option 12 + OpenPortal 终端主机名管理)
# 修订:V1.10 纠正 MAC 格式结论:写法差异由 OpenPortal 侧自适应,设备侧不改 calling-station-id mac-format
# 对接:OpenPortal(BAS IP 10.0.0.1、BAS端口 2000、服务器 Portal 端口 50100、密钥 portal、设备类型 华为、CoA 3799)
# =============================================================
# ---------- 0. 设备基础 ----------
sysname NE40-ME60-BRAS
# BAS 业务授权(二层普通用户接入必需,槽位号按单板实际位置填写)
license
active bas slot 1
# 业务 VLAN(子接口 dot1q 终结方式下非必需,保留便于二层口扩展)
# 10=网间网出口 100=用户业务 500=服务器互联
vlan batch 10 100 500
# ---------- 1. 服务器互联接口(VLAN 500 / g1/0/1)----------
# 与 Portal、RADIUS 服务器互联的三层子接口,该地址即 BAS-IP / NAS-IP
interface GigabitEthernet1/0/1.500
description TO_Portal_RADIUS_Server_10.0.0.2
vlan-type dot1q 500
ip address 10.0.0.1 255.255.255.0
# ---------- 2. 网间网出口(VLAN 10 / g1/0/10)----------
# 出口物理口:只承载 VLAN10,不做认证,禁止用户从此口上线
interface GigabitEthernet1/0/10
description TO_Internet_Firewall_100.0.0.254
# 上行口不启用 bas,避免用户侧流量误入认证流程
undo shutdown
# 出口子接口:dot1q 终结 VLAN10,与上级防火墙三层对接
interface GigabitEthernet1/0/10.10
description TO_Internet_Firewall_VLAN10
vlan-type dot1q 10
# 与防火墙互联地址;掩码按现场实际,本例按 /24(网关 .254 与本地 .1 同网段)
# 若现场为 /30 等小掩码,必须确认 .254 确在同网段,否则默认路由不可达
ip address 100.0.0.1 255.255.255.0
# ---------- 3. RADIUS 服务器组 ----------
radius-server group rd1
radius-server type standard
# 认证 / 计费服务器
radius-server authentication 10.0.0.2 1812 weight 0
radius-server accounting 10.0.0.2 1813 weight 0
# 共享密钥,与 RADIUS / Portal 服务器一致
radius-server shared-key-cipher portal
# 超时与重传
radius-server retransmit 3
radius-server timeout 5
# 认证请求携带认证类型属性,便于服务器区分 MAC 认证 / Portal 认证用户
radius-attribute include HW-Auth-Type
# ---------- 4. RADIUS DM / CoA 三件套 ----------
# 【1/3】允许本机地址作为 RADIUS 报文(含 CoA/DM)的本地地址
# DM/CoA 是服务器主动发往设备 3799 端口的报文,只有被纳入 RADIUS socket 的本地地址才能接收
# 安全起见生产可精确指定:radius local-ip 10.0.0.1
# 注意:此处绑定的是 10.0.0.0/24 侧地址,与出口 100.0.0.1 无关,不要写成出口地址
radius local-ip all
# 【2/3】允许 10.0.0.2 作为 RADIUS 授权服务器(DM 强制下线 / CoA 动态改授权),仅放通该地址
radius-server authorization 10.0.0.2 shared-key-cipher portal
# 【3/3】授权服务器端口,默认 3799,一般不修改,列出备查
# radius-server authorization port 3799
# ---------- 5. Portal 服务器 ----------
# 【设备侧侦听端口】本机侦听 Portal 协议报文的 UDP 端口,缺省 2000
# 对应 OpenPortal「设备对接默认设置 → BAS端口」= 2000,服务器往 BRAS 发报文的目的端口
web-auth-server listening-port 2000
# 【服务器侧目的端口】设备发往 Portal 服务器的目的 UDP 端口,缺省 50100,key 与服务器一致
# 对应 OpenPortal 服务器自身侦听 Portal 业务的 UDP 50100 —— 注意不是 BAS端口,两个端口不同
web-auth-server 10.0.0.2 port 50100 key simple portal
# 协议版本:优先 V2,兼容 V1
web-auth-server version v2 v1
# 使能 Portal 功能
web-auth-server enable
# ---------- 6. 用户地址池(192.168.0.0/24,DHCP 下发)----------
ip pool pool100 bas local
gateway 192.168.0.1 255.255.255.0
section 0 192.168.0.2 192.168.0.254
# 用户 DNS(与域视图 dns primary-ip 保持一致,域视图优先)
dns-server 114.114.114.114 8.8.8.8
# ---------- 7. 用户组 + 免认证放行 ----------
# 未认证用户组(认证前域使用)
user-group pre-grp
# 认证通过用户组(认证后域使用;如需限速/ACL 在此挂策略)
user-group post-grp
# 免认证放行:Portal 服务器地址 + 用户 DNS
acl number 6000
rule 5 permit ip source user-group pre-grp destination ip-address 10.0.0.2 0
rule 10 permit ip source user-group pre-grp destination ip-address 114.114.114.114 0
rule 15 permit ip source user-group pre-grp destination ip-address 8.8.8.8 0
# 未认证用户的其余流量:拒绝(由前域重定向引导到 Portal 页面)
acl number 6001
rule 5 permit ip source user-group pre-grp destination ip-address any
# 流分类
traffic classifier pre-allow operator or
if-match acl 6000
traffic classifier pre-deny operator or
if-match acl 6001
# 流行为
traffic behavior pre-allow
permit
traffic behavior pre-deny
deny
# 流量策略:先放通免认证地址,其余拒绝
traffic policy pre-policy
share-mode
classifier pre-allow behavior pre-allow precedence 1
classifier pre-deny behavior pre-deny precedence 2
# 全局入方向应用(对用户组 UCL 生效)
traffic-policy pre-policy inbound
# ---------- 8. AAA 方案与四个域 ----------
aaa
# 允许 HTTP 重定向到 Portal 页面
http-redirect enable
# 二层 IPoE 用户以报文 MAC 作"纯用户名",密码统一(MAC 简化认证关键)
default-user-name include mac-address
default-password cipher portal
# 对强制 Web 认证用户的 HTTP 报文做 host CAR,防止 HTTP 报文洪水冲击主控 CPU
http-hostcar enable
# 认证方案:MAC 认证(前域使用)
authentication-scheme mac-radius
authentication-mode radius
# MAC 认证失败:不下线,强制转入 Portal 认证前域弹页面
authening authen-fail online authen-domain portal-pre
# 认证方案:认证后域使用(MAC / Portal 认证通过后统一走 RADIUS 授权)
authentication-scheme post-radius
authentication-mode radius
# 认证方案:Portal 认证前域使用(不认证)
authentication-scheme none-scheme
authentication-mode none
# 认证通过后从 Portal 认证后域上线
authening authen-redirect online authen-domain portal-post
# 计费方案
accounting-scheme radius-acct
accounting-mode radius
accounting realtime 15
accounting-scheme none-acct
accounting-mode none
# ===== ① MAC 认证前域:用户上线先落此域,先用 MAC 向 RADIUS 认证 =====
domain mac-pre
authentication-scheme mac-radius
accounting-scheme none-acct
radius-server group rd1
ip-pool pool100
# 域视图下发 DNS(优先级高于地址池;RADIUS 下发优先级最高)
dns primary-ip 114.114.114.114
dns second-ip 8.8.8.8
# 绑定未认证用户组 → 仅可访问 Portal 与 DNS
user-group pre-grp
# 使能 MAC 认证(RADIUS 记录 MAC-账号关联,实现二次上线免输入)
mac-authentication enable
# ===== ② MAC 认证后域:BAS 接口的认证后域,全权限 + 计费 =====
domain mac-post
authentication-scheme post-radius
accounting-scheme radius-acct
radius-server group rd1
ip-pool pool100
user-group post-grp
# 闲置切断:10 分钟内业务流量低于阈值即下线,及时释放 IP 与会话
# V8 新版本等价写法:idle-cut 10 zero-rate
idle-cut 10 0
# ===== ③ Portal 认证前域(重定向域):仅放通 Portal/DNS,弹认证页面 =====
domain portal-pre
authentication-scheme none-scheme
accounting-scheme none-acct
ip-pool pool100
# 域视图下发 DNS(用户地址在此域分配,必须能解析域名才能触发重定向)
dns primary-ip 114.114.114.114
dns second-ip 8.8.8.8
user-group pre-grp
# ---- Web 强制认证服务(HTTP 重定向)----
# Portal 服务器地址
web-server 10.0.0.2
# 强制重定向 URL
web-server url http://10.0.0.2
# HTTP 方式:get —— 参数随 URL query string 传递(与 URL 带参需求匹配)
web-server mode get
# URL 参数:用户 IP → wlanuserip
web-server redirect-key user-ip-address wlanuserip
# URL 参数:用户 MAC → mac;simple=明文,type1=冒号格式 aa:bb:cc:dd:ee:ff
web-server redirect-key user-mac-address mac simple type1
# URL 参数:设备 IP(NAS-IP 10.0.0.1) → basip
# 注意:basip 必须取 10.0.0.1,不能取出口地址 100.0.0.1
web-server redirect-key mscg-ip basip
# ---- Portal 强制认证服务(Portal 协议 V2 交互)----
# Portal 服务器地址与跳转 URL(与 web-server 侧保持一致)
portal-server 10.0.0.2
portal-server url http://10.0.0.2
# Portal 协议重定向报文中的 MAC 参数名,须与 web-server 侧一致
# 若该侧也需冒号格式,可加 type1:portal-server redirect-key user-mac-address mac simple type1
portal-server redirect-key user-mac-address mac simple
# ===== ④ Portal 认证后域:Portal 认证通过后全权限 + 计费 =====
domain portal-post
authentication-scheme post-radius
accounting-scheme radius-acct
radius-server group rd1
ip-pool pool100
user-group post-grp
idle-cut 10 0
quit
# ---------- 9. 用户业务接口与认证点(按 VLAN 使能)----------
# 用户业务子接口:终结 VLAN 100,认证点即"按 VLAN"生效
interface GigabitEthernet1/0/2.100
description USER_SERVICE_VLAN100
vlan-type dot1q 100
bas
# 二层普通用户(IPoE);前域=mac-pre(MAC 优先),后域=mac-post
access-type layer2-subscriber default-domain pre-authentication mac-pre authentication mac-post
# 认证方式:Web(Portal);配合前域 mac-authentication enable 形成 MAC 优先
authentication-method web
# 可选:加快认证触发(按版本支持情况开启)
# arp-trigger
# ip-trigger
# ---------- 10. 路由 ----------
# 默认路由指向上级防火墙(原占位 10.0.0.254 必须删除,避免错误引流)
# 若此前已配过:undo ip route-static 0.0.0.0 0 10.0.0.254
ip route-static 0.0.0.0 0.0.0.0 100.0.0.254
# 服务器网段 10.0.0.0/24 为直连路由,不受默认路由影响(无需额外静态路由)
# 若服务器与 NE40 ME60 BRAS 之间跨网段,需保证回程路由指向 10.0.0.1
# 可选:出口链路 BFD 联动,链路故障秒级切换(按对端是否支持 BFD 决定)
# ip route-static 0.0.0.0 0.0.0.0 100.0.0.254 bfd all-as
# ---------- 11. NAT 归属(二选一,切勿两端同时做)----------
# 【方案 A:NAT 在上级防火墙做(推荐,出口安全设备统一管控)】
# 本机不配任何 NAT,但必须确认防火墙侧三项:
# ① 源 NAT:192.168.0.0/24 → 防火墙出口公网地址(或 100.0.0.1)
# ② 回程路由:ip route-static 192.168.0.0 255.255.255.0 100.0.0.1
# —— 缺这条的典型现象:认证通过、能 ping 通网关,但打不开网页
# ③ 安全策略放通 192.168.0.0/24 至 untrust 区域
#
# 【方案 B:NAT 在 NE40 ME60 BRAS 上做(出口地址为公网时可如此)】
# nat address-group nat-egress
# mode pat
# section 0 100.0.0.1 100.0.0.1
# acl number 3000
# rule 5 permit ip source 192.168.0.0 0.0.0.255
# interface GigabitEthernet1/0/10.10
# nat outbound 3000 address-group nat-egress
# 说明:NE40 ME60 BRAS 若为 V8 新版本 NAT 实例/策略形态,等价改写为
# nat instance / nat-policy + source-nat,报错时按 "?" 取当前版本关键字
# ---------- 12. 可选:用户限速(不需要 EDSG,用 qos-profile 即可)----------
# qos-profile 10M
# car cir 10000 cbs 1870000 green pass red discard inbound
# car cir 10000 cbs 1870000 green pass red discard outbound
# aaa
# domain mac-post
# qos-profile 10M inbound
# qos-profile 10M outbound
# domain portal-post
# qos-profile 10M inbound
# qos-profile 10M outbound
# ---------- 13. RADIUS 下发属性落地(用户名 / 用户组 / 域)----------
# 【13.1】用服务器下发的用户名替换本地生成的用户名
# 场景:MAC 快速认证时本地用户名=MAC,服务器在 Access-Accept 中回标准 1 号属性 User-Name
# (如 zhangsan@isp1),需要把在线用户名改成真实账号
# 关键:默认只有 EAP / RADIUS proxy 用户的用户名会被替换,IPoE 用户默认【不替换】,必须显式开启
radius-server group rd1
# 对 IPoE 用户启用"用服务器下发的用户名替换本地用户名"
radius-attribute apply user-name match user-type ipoe
quit
# 开启后:display access-user 里 User-Name 由 MAC 变为真实账号,
# 后续计费报文、日志、CoA/DM 匹配均使用新用户名。
# 【13.2】服务器下发用户组(HW-Usr-Group-Name / VSA 26-251)后本地如何生效
# 前提一:设备上必须存在同名用户组,否则下发不生效
# 组名 1~32 位,仅字母 / 数字 / 下划线,区分大小写
user-group vip-grp
user-group normal-grp
# 前提二:全局 inbound 方向只能挂一条 traffic-policy,
# 必须把新组的分类器【合并进已有 pre-policy】,不要重复执行 traffic-policy inbound
acl number 6100
rule 5 permit ip source user-group vip-grp destination ip-address any
acl number 6101
rule 5 permit ip source user-group normal-grp destination ip-address any
traffic classifier vip-cls operator or
if-match acl 6100
traffic classifier normal-cls operator or
if-match acl 6101
# 组策略:VIP 放行并限速 50M,普通组放行并限速 10M
traffic behavior vip-behavior
permit
car cir 50000 cbs 6250000 green pass red discard
traffic behavior normal-behavior
permit
car cir 10000 cbs 1250000 green pass red discard
# 合并后的统一策略(替换第 7 节的 pre-policy)
traffic policy pre-policy
share-mode
classifier pre-allow behavior pre-allow precedence 1
classifier pre-deny behavior pre-deny precedence 2
classifier vip-cls behavior vip-behavior precedence 3
classifier normal-cls behavior normal-behavior precedence 4
traffic-policy pre-policy inbound
# 可选:不本地预建组,让服务器直接创建动态用户组
# aaa
# remote-download user-group enable
# remote-download user-group check interval 300
# quit
# 可选:服务器用 HW-Data-Filter(VSA 26-82) 动态下发 ACL(最细粒度,按需开启)
# aaa
# remote-download acl enable
# quit
# 【13.3】服务器下发域名后本地如何切域
# 上行:设备用 HW-Domain-Name(VSA 26-138) 告知服务器用户实际落在哪个域(漫游域/强制域)
# 下行:设备"按服务器信息切域"有两条路:A=域属性 HW-Domain-Name(OpenPortal 接入账户组→详细信息)
# B=用户名中的域名后缀 user@domain。A 无需额外命令,域存在即生效
# A 的前提:目标域已在设备上创建,且 BAS 接口 permit-domain 放通,否则认证失败
# 认证阶段由 13.1 替换用户名带出域名;CoA 阶段需显式开启下面这条
# ---- OpenPortal 侧对应关系(域属性从哪来)----
# NAS列表 → 高级扩展 = 华为高级(或 Mac认证账户+华为高级)才回该属性
# 域名的值 = 接入账户组 → 详细信息 字段;该字段留空 = 不下发 Domain
# *** 不指定域时务必留空,不要乱填 ***
# 填了域名但本机无该域:关闭漫游=认证失败;开启漫游=落漫游域(策略全不对)
# 本方案域由 BAS 接口 default-domain 与 authening 决定,服务器不需要指定域 → 留空
radius-server coa update username
# 可选:允许服务器用 DM 报文按"用户名"强制下线(服务器只能拿到真实用户名时)
# radius-server dm-request support username
# 可选:域白名单,防止服务器下发任意域导致用户落到未预期域
# 语法随版本差异较大,配置前用 ? 确认
# interface GigabitEthernet1/0/2.100
# bas
# permit-domain mac-pre mac-post portal-pre portal-post
# 【13.4】Filter-Id(标准 11 号属性)下发 ACL / 用户组
# 解析顺序固定:先当 ACL 编号 → 编号不存在再当用户组名 → 都找不到 = 授权失败(不是忽略!)
# 服务器侧值的要求:1~32 字节,不能带 @(含 @ 只取 @ 前),不能带 " in"/" out" 后缀
# 报文内多个 Filter-Id 只有最后一个生效,建议只下发一个
# 路径 A:服务器下发 ACL 编号,设备必须预先配好该 ACL 及规则
acl number 3000
rule 5 permit ip destination 10.0.0.0 0.0.0.255
rule 10 deny ip
# 服务器侧:Filter-Id = 3000
# 路径 B:服务器下发用户组名(推荐,多用户复用一套 ACL,不占 ACL 规格)
# 服务器侧:Filter-Id = vip-grp
# 组与策略配置见 13.2(user-group + ACL source user-group + traffic-policy)
# 路径 C:动态 ACL,规则由服务器用 HW-Data-Filter(26-82) 下发,设备无需预配 ACL
# aaa
# remote-download acl enable
# quit
# 【13.5】终端信息上送(UA / DHCP Option)
# 【结论】NE40 ME60 BRAS 无法把浏览器 User-Agent 放进 RADIUS 报文
# - 承载 UA 的属性是 HW-HTTP-UA(26-159),但它属于交换机/AC 的 NAC 终端类型感知特性
# 触发命令 http parse user-agent enable 只在这些产品上存在,BRAS 的
# radius-attribute include 可选项里没有 UA / 终端类型
# - 且该属性走【计费报文 Accounting-Request】,不是认证请求;只对明文 HTTP Get 有效
# - 现场一行验证:http parse user-agent enable ? (报 Unrecognized 即不支持)
# - 真要 UA:由 OpenPortal 采集(它本就在 HTTP 层),或接入交换机上送,或前置代理
# 【BRAS 能做的】在 Access-Request 中携带 DHCP Option 作为终端指纹
# Option 12=主机名(价值最高) 55=参数请求列表 60=Vendor Class ID 61=Client ID
# 属性:HW-Dhcp-Option = 26-187(注意:交换机/AC 上是 158,号段不通用)
# 前提:用户必须通过本机 DHCP 获取地址;静态 IP 或旁挂 DHCP 不经本机时无 Option 可送
radius-server group rd1
# 只带 Option 12(主机名):187 是"一个属性里打包多个 option",
# 总长受 RADIUS 253 字节限制,塞太多会把后面的 option 挤掉
radius-attribute include hw-dhcp-option 12
# 若不需要终端指纹,删除上面这条即可(不影响认证)
# 可选:计费报文上送访问 URL(属增值业务/审计,不是 UA,本方案未启用)
# radius-attribute include hw-web-url accounting-request
# 【13.6】终端主机名识别(Option 12 → OpenPortal「终端主机名管理」)
# 链路:终端 DHCP Option 12 = 主机名 → BRAS 本地池分配时缓存 →
# Access-Request 的 26-187 里带 0C<len><主机名ASCII> →
# OpenPortal「高级扩展=华为高级」解析 → 按 MAC 写入「终端主机名管理」表
# 注意:主机名来自终端自己填的 Option 12,Windows/iOS/macOS 基本都带,
# 部分安卓不带 → 该 MAC 无主机名,需在 OpenPortal 页面手工补录
#
# 【MAC 格式不用改】设备 31 属性缺省是 xxxx-xxxx-xxxx(华为 4-4-4 横杠小写),
# OpenPortal 表格显示 11:22:33:44:55:66(冒号),两种写法由 OpenPortal 侧
# 自适应/归一化,设备侧保持缺省即可 —— 所以本节的生效配置只有 13.5 那一条
# radius-attribute include hw-dhcp-option 12,此处无需再配任何命令。
#
# 【仅当 OpenPortal 明确不支持缺省格式时才启用下面这条(默认不加)】
# 作用范围是整个 RADIUS 组:认证与计费报文同时改变,
# 会影响计费话单、上网行为管理/审计等按固定 MAC 格式解析的下游系统
# radius-server group rd1
# calling-station-id mac-format colon-split mode2
# quit
# 老版本(V5/V600)该命令位于 radius-server template 视图,配置前用 ? 确认
#
# 同理:若 OpenPortal 的「MAC标识」取的是 User-Name 而非 31 属性,
# 也应由 OpenPortal 侧适配,不要改设备 default-user-name 的 MAC 分隔符
# 验证:display radius-server configuration group rd1 # 确认 hw-dhcp-option 已 include
# ---------- 14. 验证命令(不写入配置,部署后手工执行)----------
# display radius-server configuration group rd1
# display web-auth-server configuration # 核对本机侦听端口 2000 与服务器目的端口 50100
# display web-auth-server statistics # 收发计数:只增不收=对端端口或密钥不对
# display udp # 核查 2000/50100 是否已被其他业务占用
# display access-user domain mac-pre
# display access-user domain mac-post
# display access-user domain portal-pre
# display access-user domain portal-post
# display access-user
# display ip pool name pool100
# display aaa offline-record all
# display ip routing-table 0.0.0.0 # 确认默认路由下一跳为 100.0.0.254
# display interface GigabitEthernet1/0/10.10 # 出口子接口 UP / 收发计数
# ping -a 100.0.0.1 100.0.0.254 # 用出口地址 ping 防火墙
# display access-user # 核对 User-Name 为真实账号、UCL-Group 为服务器下发的组名
RELATED CASES / 相关对接案例