我有一个 SonicWall,我想在其上启用 RADIUS SSO 功能。做这个的文章声明 RADIUS 服务器Send the user’s IP address in either Framed-IP-Address or Calling-Station-Id attribute in both Start and Stop messages.
我的设置如下:
AP -> NPS -> (RADIUS Accounting forwarded) Sonicwall
当连接到AP时,它成功登录。当转发的事件到达SonicWall时,它没有Framed-IP-Address
或中的IP Calling-Station-Id
(只有MAC地址)。
Attribute Value Pairs
AVP: l=19 t=Acct-Session-Id(44): 53AB6162-00000010
AVP: l=6 t=Acct-Status-Type(40): Stop(2)
AVP: l=6 t=Acct-Authentic(45): RADIUS(1)
AVP: l=10 t=User-Name(1): user
AVP: l=6 t=NAS-IP-Address(4): 10.10.0.150
AVP: l=14 t=NAS-Identifier(32): xxxxxxxxx
AVP: l=6 t=NAS-Port(5): 0
AVP: l=35 t=Called-Station-Id(30): XX-XX-XX-XX-XX-XX:SSID
AVP: l=19 t=Calling-Station-Id(31): XX-XX-XX-XX-XX-XX
AVP: l=6 t=NAS-Port-Type(61): Wireless-802.11(19)
AVP: l=23 t=Connect-Info(77): CONNECT 0Mbps 802.11b
AVP: l=46 t=Class(25): 420e04e70000013700011700000000000000000000000000...
AVP: l=6 t=Acct-Session-Time(46): 604
AVP: l=6 t=Acct-Input-Packets(47): 182
AVP: l=6 t=Acct-Output-Packets(48): 145
AVP: l=6 t=Acct-Input-Octets(42): 32797
AVP: l=6 t=Acct-Output-Octets(43): 47272
AVP: l=6 t=Event-Timestamp(55): Jun 26, 2014 09:47:54.000000000 PDT
AVP: l=6 t=Acct-Terminate-Cause(49): User-Request(1)
AVP: l=22 t=Proxy-State(33): 1700000000000000000000000000000000000039
我发现我的 Ubiquiti AP 不会发送Framed-IP-Address
或 IP,Calling-Station-Id
他们建议使用 RADIUS 从 DHCP 获取此信息。我一定是遗漏了什么,因为我在 NPS 或 DHCP 服务的任何地方都找不到配置。
如何通过 DHCP 或 NPS 将正确的信息传送至我的 SonicWall?
答案1
其他人有向 Ubiquiti 询问过同样的事情毫无效果。检查代码后,似乎需要一些合理的工程来实现这一点。(Ubiquiti 也得出了同样的结论。
Ubiquiti AP 基于 Linux,使用hostapd提供其 AP 功能。我深入研究了 hostapd 的源代码,发现它不支持填充Framed-IP-Address
RADIUS 属性(src/radius/radius.c
,radius_attr_type radius_attrs
结构)。至于填充属性,就我所见(在从中获取 MAC 的函数中,以及在函数中),Calling-Station-Id
hostpad 仅使用 MAC 地址填充该属性。src/ap/ieee802_11_auth.c
hostapd_radius_acl_query
hostapd_allowed_address
src/ap/ieee802_1x.c
add_common_radius_sta_attr
由于 hostapd 主要关注的是验证移动单元 (MU)(以及小的由于 MU 仅支持部分 RADIUS 计费,因此它不会为 MU 处理任意 IP 流量,一旦通过身份验证,它就不会真正拥有 MU 的 IP 来提供给 RADIUS。
我认为如果不编写代码,您就无法获得想要的结果。理论上,您可以在 NPS 服务和 Sonicwall 之间粘贴某种第 7 层 RADIUS 代理,并将该属性从 MAC 重写为 IP 地址(查询您的 DHCP 服务器)。FreeRADIUS政策也许就能做你想做的事。
答案2
按照 Evan 的建议,我最终使用unifi-api作者: calmh。我对这个项目的 fork包括如何使用 FreeRADIUS 进行设置的说明。
我走了 FreeRADIUS > NPS (Auth) > Sonicwall (Acct) 路线。