我有一个 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 获取正确的信息?
其他人向 Ubiquiti 提出了同样的要求,但无济于事。在检查了代码之后,看起来需要一些合理的工程才能做到这一点。(Ubiquiti 得出了同样的结论。)
Ubiquiti AP 基于 Linux 并使用hostapd来提供其 AP 功能。我稍微研究了 hostapd 的源代码,但没有发现它支持填充
Framed-IP-Address
RADIUS 属性(src/radius/radius.c
结构radius_attr_type radius_attrs
)。至于Calling-Station-Id
填充属性,hostpad 仅使用 MAC 地址填充它,从我所看到的(src/ap/ieee802_11_auth.c
在hostapd_radius_acl_query
它获取 MAC 的函数中hostapd_allowed_address
,以及在src/ap/ieee802_1x.c
函数中add_common_radius_sta_attr
)。由于 hostapd 主要关注对移动单元 (MU) 的身份验证(以及一点点RADIUS 记帐),并且一旦经过身份验证,它就不会为 MU 处理任意 IP 流量,因此它实际上不会有 MU 的 IP 给半径。
我认为不写代码你不会得到你想要的东西。理论上,您可以在 NPS 服务和 Sonicwall 之间粘贴某种第 7 层 RADIUS 代理,并将该属性从 MAC 重写到 IP 地址(查询您的 DHCP 服务器)。FreeRADIUS策略可能只是能够做你想做的事。
按照埃文的建议。我最终使用 Calmh 的unifi-api编写了自己的代码。我的项目分支包括有关如何使用 FreeRADIUS 进行设置的说明。
我去了 FreeRADIUS > NPS (Auth) > Sonicwall (Acct) 路线。