如何 add/copy VSA(供应商特定属性)到 FreeRADIUS C 模块中 EAP 回复的外部通道
How to add/copy VSAs (Vendor-Specific attributes) to outer channel of EAP reply in FreeRADIUS C module
我正在以编程方式将 VSA 添加到我的 FreeRADIUS C 模块 () 中的 Access-Accept 回复。
出于 debugging/troubleshooting 目的,我需要一种方法来目视检查接收端的 VSA。问题是我的客户在 EAP 外通道上使用内通道协议(PEAP 和 TTLS),而 WireShark 等流量嗅探器工具仅显示外通道数据。
我知道有一种方法可以为此目的将属性复制到外部通道,但无法找到有关如何执行此操作的说明或示例。
更新:这是为了解决下面 Arran 的回答。虽然我确信 Arran 说 unlang 是首选方法是正确的,但它不适用于我的情况 - 我需要在回复中发送到 NAS 的 VSA 集是在 FreeRADIUS 服务器之外定义的,并被传递根据正在验证的用户,在 运行 时间到 C 模块。这就是为什么我正在寻找一种以编程方式执行此操作的方法。
我不建议在您的模块中以编程方式执行此操作,除非出于某种原因它只能在内部隧道服务器中调用。相反,您应该将属性放在内部隧道请求的请求或回复列表中,然后使用 unlang 将它们复制到外部请求。
将属性从内部隧道复制到外部隧道的最简单方法是使用 outer.session-state
列表。此列表在 EAP 身份验证尝试的多个 Access-Request/Access-Challenge 轮中持续存在。
如果您想在最终的 Access-Accept 中添加 return 属性,请使用内部隧道虚拟服务器中的 unlang update
关键字将它们放入 outer.session-state
列表中。
在 Post-Auth 部分的外部虚拟服务器中,将外部请求的 session-state
列表中的属性复制到回复列表中。这将确保您的 VSA 仅在最终 Access-Accept/Access-Reject 中发送,而不在任何中间访问挑战数据包中发送。
内部虚拟服务器:
server inner {
post-auth {
<your_custom_module>
update outer.session-state {
<custom attribute> := &reply:<custom attribute>
}
}
}
外部虚拟服务器:
server {
post-auth {
update reply {
<custom attribute> := &session-state:<custom attribute>
}
}
}
更新 - 如果您不知道要使用哪些属性,可以提前 return 复制整个列表。
server inner {
post-auth {
<your_custom_module>
update {
&outer.session-state: += &reply:[*]
}
}
}
我正在以编程方式将 VSA 添加到我的 FreeRADIUS C 模块 (
出于 debugging/troubleshooting 目的,我需要一种方法来目视检查接收端的 VSA。问题是我的客户在 EAP 外通道上使用内通道协议(PEAP 和 TTLS),而 WireShark 等流量嗅探器工具仅显示外通道数据。
我知道有一种方法可以为此目的将属性复制到外部通道,但无法找到有关如何执行此操作的说明或示例。
更新:这是为了解决下面 Arran 的回答。虽然我确信 Arran 说 unlang 是首选方法是正确的,但它不适用于我的情况 - 我需要在回复中发送到 NAS 的 VSA 集是在 FreeRADIUS 服务器之外定义的,并被传递根据正在验证的用户,在 运行 时间到 C 模块。这就是为什么我正在寻找一种以编程方式执行此操作的方法。
我不建议在您的模块中以编程方式执行此操作,除非出于某种原因它只能在内部隧道服务器中调用。相反,您应该将属性放在内部隧道请求的请求或回复列表中,然后使用 unlang 将它们复制到外部请求。
将属性从内部隧道复制到外部隧道的最简单方法是使用 outer.session-state
列表。此列表在 EAP 身份验证尝试的多个 Access-Request/Access-Challenge 轮中持续存在。
如果您想在最终的 Access-Accept 中添加 return 属性,请使用内部隧道虚拟服务器中的 unlang update
关键字将它们放入 outer.session-state
列表中。
在 Post-Auth 部分的外部虚拟服务器中,将外部请求的 session-state
列表中的属性复制到回复列表中。这将确保您的 VSA 仅在最终 Access-Accept/Access-Reject 中发送,而不在任何中间访问挑战数据包中发送。
内部虚拟服务器:
server inner {
post-auth {
<your_custom_module>
update outer.session-state {
<custom attribute> := &reply:<custom attribute>
}
}
}
外部虚拟服务器:
server {
post-auth {
update reply {
<custom attribute> := &session-state:<custom attribute>
}
}
}
更新 - 如果您不知道要使用哪些属性,可以提前 return 复制整个列表。
server inner {
post-auth {
<your_custom_module>
update {
&outer.session-state: += &reply:[*]
}
}
}