如何将用户的Cisco-AVPair值传入FreeRADIUS的inner-tunnel以实现Meraki UDN
问题:FreeRADIUS中Cisco-AVPair无法通过inner-tunnel传递给Meraki实现UDN功能
现状与问题
用户文件配置如下:
rick Cleartext-Password := "password1" Cisco-AVPair = "udn:private-group-id=500" morty Cleartext-Password := "password2" Cisco-AVPair = "udn:private-group-id=501"
单独测试时,radtest或RTRadPing能正常返回该属性,但该值无法传入inner-tunnel,导致Meraki无法接收。已确认问题核心:在inner-tunnel和default的post-auth段添加静态值配置时,Meraki能正常接收:
update reply { Cisco-AVPair := "udn:private-group-id=500" }
但静态配置会给所有用户设置固定UDN,需要实现每个用户对应专属值的传递。
无效尝试
在/etc/freeradius/3.0/sites-enabled/inner-tunnel的post-auth段尝试以下配置均无效:
- 读取session-state中的属性:
if (&session-state:Cisco-AVPair) { update reply { Cisco-AVPair := &session-state:Cisco-AVPair } }
- 读取request中的属性:
if (&request:Cisco-AVPair) { update reply { Cisco-AVPair := &request:Cisco-AVPair } }
- 在authorize段将值存入临时控制属性,再在post-auth段引用,同样无法传递当前用户的特定值。
解决方案指导
- 确保用户属性被加载到inner-tunnel的授权上下文
- 在
inner-tunnel的authorize段中,确认启用了files模块(用于加载本地用户文件),如果用户数据来自其他数据源(如LDAP),需确保对应模块在inner-tunnel的authorize链中启用。默认inner-tunnel可能未包含files模块,需手动添加:authorize { ... files ... }
- 在
- 在inner-tunnel的authorize段捕获属性并存储到session-state
- 用户属性加载后,将Cisco-AVPair存入session-state,保证跨处理段可用:
authorize { ... files if (&Cisco-AVPair) { update session-state { Cisco-AVPair := &Cisco-AVPair } } ... }
- 用户属性加载后,将Cisco-AVPair存入session-state,保证跨处理段可用:
- 在inner-tunnel的post-auth段从session-state读取并添加到回复
- 修改post-auth段配置,使用
+=避免覆盖其他可能存在的Cisco-AVPair属性:post-auth { ... if (&session-state:Cisco-AVPair) { update reply { Cisco-AVPair += &session-state:Cisco-AVPair } } ... }
- 修改post-auth段配置,使用
- 开启调试模式排查流程
- 通过FreeRADIUS调试模式(
radiusd -X)查看属性在各阶段的流转情况,确认Cisco-AVPair是否被正确存储和读取:radiusd -X
authorize和post-auth阶段的属性变化日志。 - 通过FreeRADIUS调试模式(
- 检查属性权限配置
- 确认
files模块的attrs配置中允许传递Cisco-AVPair属性,无命名空间或权限限制。
- 确认
内容的提问来源于stack exchange,提问作者RandomPrecision
相关产品推荐
相关产品推荐

