关于Dot1X动态VLAN分配

网络工程 转变 VLAN 半径 IEEE-802.1x
2021-07-18 22:32:43

情况:

我正在尝试让 802.1X 为我工作。我希望 RADIUS 服务器根据特定用户的 RADIUS 回复属性将 VLAN 动态分配给端口。我有一个 HP E2620 交换机和一个 FreeRADIUS 服务器。请求者是一台 Windows 8.1 机器

在 freeradius 网站上提到了这个文件


到目前为止我所做的:

在 FreeRADIUS 上,我使用以下参数创建了一个用户:

dot1xtest    User-Password := "secret"
             Tunnel-Type = "VLAN",
             Tunnel-Medium-Type = "IEEE-802",
             Tunnel-Private-Group-ID = "100"

我也尝试过Tunnel-Pvt-Group-ID,但它在 FreeRADIUS 上不起作用,只是对我吠叫(我在 Microsoft NPS 上的配置资源中看到了这一点,其中之一)。我还尝试了隧道介质类型的值“802”、802、6。

我还尝试使用实际的 VLAN 名称而不是 VLAN-ID 作为组 ID 值。无论如何它的数据类型是字符串。

我将 HP 交换机配置为将此 RADIUS 服务器用于 AAA,并将其设置为端口 10:

aaa port-access gvrp-vlans
aaa authentication port-access eap-radius
aaa port-access authenticator 10
aaa port-access authenticator 10 auth-vid 150
aaa port-access authenticator 10 unauth-vid 200
aaa port-access authenticator active

VLAN:

VLAN 100 - VLAN which I want to get after authentication.
VLAN 150 - VLAN which I get now, because my config is not working
VLAN 200 - Unauthorized VLAN which is used on auth. failure

笔记:

  • 端口10还具有分配给它的标记的VLAN 150: vlan 150 untagged 10而且我无法摆脱静态分配

  • 上面列出的所有 VLAN 都存在于交换机的 VLAN 数据库中。

  • 每当我插入此端口时,它都会要求我提供凭据;在我通过身份验证成功后,它只会将我发送到 VLAN150,如果我尝试失败,我会到达 VLAN200。

  • 就像这里描述的那样,我在 Windows 连接上启用了 802.1X 身份验证

  • 我尝试启用 GVRP - 它不会改变任何东西


诊断/显示命令输出:

端口 10 的静态 VLAN 分配。VLAN 150 未标记

 SW # show vlans ports 10 detail

 Status and Counters - VLAN Information - for ports 10

  VLAN ID Name                             | Status     Voice Jumbo Mode
  ------- -------------------------------- + ---------- ----- ----- --------
  150     VLAN150                          | Port-based No    No    Untagged

show logging 我看到这个:

I 08/28/14 08:29:24 00077 ports: port 10 is now off-line
I 08/28/14 08:29:29 00435 ports: port 10 is Blocked by AAA
I 08/28/14 08:29:29 00435 ports: port 10 is Blocked by STP
I 08/28/14 08:29:29 00076 ports: port 10 is now on-line
I 08/28/14 08:29:29 00001 vlan: VLAN200 virtual LAN enabled
I 08/28/14 08:29:29 00435 ports: port 10 is Blocked by AAA
I 08/28/14 08:29:29 00002 vlan: UNUSED virtual LAN disabled
I 08/28/14 08:29:29 00435 ports: port 10 is Blocked by STP
I 08/28/14 08:29:29 00076 ports: port 10 is now on-line
I 08/28/14 08:29:29 00001 vlan: UNUSED virtual LAN enabled
I 08/28/14 08:29:47 00002 vlan: UNUSED virtual LAN disabled

show port-access authenticator 输出:

SW # show port-access authenticator

 Port Access Authenticator Status

  Port-access authenticator activated [No] : Yes
  Allow RADIUS-assigned dynamic (GVRP) VLANs [No] : Yes

       Auths/  Unauth  Untagged Tagged           % In  RADIUS Cntrl
  Port Guests  Clients VLAN     VLANs  Port COS  Limit ACL    Dir
  ---- ------- ------- -------- ------ --------- ----- ------ -----
  10   1/0     0       150      No     No        No    No     both

RADIUS用户测试:

Linux-server # radtest dot1xtest secret localhost 0 secretkey
Sending Access-Request of id 158 to 127.0.0.1 port 1812
        User-Name = "dot1xtest"
        User-Password = "secret"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 0
        Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=158, length=37
        Tunnel-Type:0 = VLAN
        Tunnel-Medium-Type:0 = 802
        Tunnel-Private-Group-Id:0 = "100"

这是我在 RADIUS 服务器上的 TCPdump 中看到的。我正在使用源端口 1812 捕获传出的 UDP 流量。这就是我的交换机得到的(如果确实如此,不确定如何检查......)

      Tunnel Type Attribute (64), length: 6, Value: Tag[Unused]#13
        0x0000:  0000 000d
      Tunnel Medium Attribute (65), length: 6, Value: Tag[Unused]802
        0x0000:  0000 0006
      Tunnel Private Group Attribute (81), length: 5, Value: 100
        0x0000:  3130 30

调试:

debug security radius-server
debug security port-access authenticator
debug destination buffer

之后,我拔下并插入电缆并做了show debug buffer这是它的复制粘贴很奇怪,没有提到任何与 VLAN 相关的属性。


问题:

我究竟做错了什么?

我已经阅读了一堆资源,如果 RADIUS 分配了一个 VLAN ID 交换机,首先会使用它。如果身份验证成功,则它会回退到为端口访问身份验证器配置的授权 VLAN。如果不存在,则分配在端口上配置的 Untagged VLAN。为什么我没有得到这种行为?

我有点开始认为Tunnel-Private-Group-Id这些开关不支持该属性似乎每个资源都引用了Tunnel-Pvt-Group-Id(在 Microsoft 上配置)。太糟糕了,我没有要检查的 Windows Server。

可能跟固件有关?还没有尝试升级,我使用 RA_15_06_0009.swi 并且已经有 RA_15_14_0007.swi


更新

刚刚试了一个3500yl-24G-PWR模型,还是不行。所以..我猜,交换机只是没有从 RADIUS 服务器获取配置(或者我是否使用了不正确的属性或运算符?)。我该如何解决这个问题?

3个回答

亚历克斯,你好!

我已经为您构建了测试环境,所以我使用的是 freeradius 2.1.12+dfsg-1.2(在 debian 上),并切换 hp 2650。我刚刚重复了您的配置,并且没有问题。我的测试 procurve ip 10.0.10.29,测试 freeradius ip 192.168.2.60。

采购配置:

Running configuration:

; J4899A Configuration Editor; Created on release #H.10.83

hostname "ProCurve Switch 2650"
interface 1
   no lacp
exit
interface 2
   no lacp
exit
interface 3
   no lacp
exit
interface 4
   no lacp
exit
interface 5
   no lacp
exit
interface 6
   no lacp
exit
interface 7
   no lacp
exit
interface 8
   no lacp
exit
interface 9
   no lacp
exit
interface 10
   no lacp
exit
snmp-server community "public" Unrestricted
vlan 1
   name "DEFAULT_VLAN"
   untagged 11-50
   ip address dhcp-bootp
   no untagged 1-10
   exit
vlan 100
   name "success"
   untagged 1-10
   exit
vlan 200
   name "fail"
   exit
aaa authentication port-access eap-radius
radius-server host 192.168.2.60 key test
aaa port-access authenticator 1-10
aaa port-access authenticator 1 unauth-vid 200
aaa port-access authenticator 2 unauth-vid 200
aaa port-access authenticator 3 unauth-vid 200
aaa port-access authenticator 4 unauth-vid 200
aaa port-access authenticator 5 unauth-vid 200
aaa port-access authenticator 6 unauth-vid 200
aaa port-access authenticator 7 unauth-vid 200
aaa port-access authenticator 8 unauth-vid 200
aaa port-access authenticator 9 unauth-vid 200
aaa port-access authenticator 10 unauth-vid 200
aaa port-access authenticator active

/etc/freeradius/users:

<...>
testuser User-Password := test
        Tunnel-Type = VLAN,
        Tunnel-Medium-Type = IEEE-802,
        Tunnel-Private-Group-Id = "100"
<...>

/etc/freeradius/radiusd.conf:

<...>
client switch {
        ipaddr          = 10.0.10.29
        secret          = test
        require_message_authenticator = no
        nastype     = other
}
<...>

我已经使用本手册在 Windows 中启用 8021x:

http://windows.microsoft.com/en-us/windows/enable-802-1x-authentication#1TC=windows-7 

但是,我已经禁用了登录用户凭据的使用。

因此,如果用户凭据正确,我会在 /var/log/freeradius/radius.log 中显示此消息

tail -f /var/log/freeradius/radius.log
Fri Sep  5 12:54:14 2014 : Auth: Login OK: [testuser/<via Auth-Type = EAP>] (from client switch port 0 via TLS tunnel)
Fri Sep  5 12:54:14 2014 : Auth: Login OK: [testuser/<via Auth-Type = EAP>] (from client switch port 1 cli b4-99-ba-5a-bb-65)

在我的交换机上,我得到了:

ProCurve Switch 2650(eth-1)# sh vlans ports 1

 Status and Counters - VLAN Information - for ports 1

  802.1Q VLAN ID Name         Status       Voice
  -------------- ------------ ------------ -----
  100            success      Port-based   No

如果信用不正确:

Fri Sep  5 12:56:06 2014 : Auth: Login incorrect: [sasdasd/<via Auth-Type = EAP>] (from client switch port 0 via TLS tunnel)
Fri Sep  5 12:56:06 2014 : Auth: Login incorrect: [sasdasd/<via Auth-Type = EAP>] (from client switch port 1 cli b4-99-ba-5a-bb-65)


ProCurve Switch 2650(eth-1)# sh vlans ports 1

 Status and Counters - VLAN Information - for ports 1

  802.1Q VLAN ID Name         Status       Voice
  -------------- ------------ ------------ -----
  200            fail         Port-based   No

也许您还没有在 Windows 中启用 8021x?我希望这对你有所帮助。

哇,我永远不会想到这个。这只是一个随机的解决方案。

所以,问题出authorize在我的default站点配置中的部分/etc/raddb/sites-enabled/default,它是一种默认设置。我真的不知道这是怎么回事(如果你们知道,请对此发表评论),要对此进行一些研究;这里是:

eap {
    ok = return
}

我将其注释掉并替换为:

eap

我不希望再让它工作了,然后我重新连接……它发生了,只是随机的,我现在很兴奋!我动态分配了一个 VLAN:

调试:

0001:03:15:51.07 RAD  mRadiusCtr:ACCESS REQUEST id: 194 to 192.168.1.27,
   session: 56, access method: PORT-ACCESS, User-Name: dot1x,
   Calling-Station-Id: dead00-00beef, NAS-Port-Id: 10, NAS-IP-Address:
   192.168.100.17.
0001:03:15:51.10 RAD  tRadiusR:ACCESS ACCEPT id: 194 from 192.168.1.27 received.
0001:03:15:51.10 1X   m8021xCtrl:Port 10: received Success for client
   dead00-00beef, finished authentication session.
0001:03:15:51.10 1X   m8021xCtrl:Port: 10 MAC: dead00-00beef RADIUS Attributes,
   vid: 100.
0001:03:15:51.10 1X   m8021xCtrl:Port 10: starting session for client
   dead00-00beef.

SW # show port-access authenticator 10 vlan - 仍然显示 Unauthorized VLAN 200 和 Authorized VLAN 150

Port Access Authenticator VLAN Configuration

  Port-access authenticator activated [No] : Yes
  Allow RADIUS-assigned dynamic (GVRP) VLANs [No] : No

       Access  Unauth  Auth
  Port Control VLAN ID VLAN ID
  ---- ------- ------- -------
  10   Auto    200     150

SW # show vlans ports 10 detail - 端口 10 上的未标记 VLAN 设置为 VLAN 100

 Status and Counters - VLAN Information - for ports 10

  VLAN ID Name                 | Status     Voice Jumbo Mode
  ------- -------------------- + ---------- ----- ----- --------
  100     VLAN100              | Port-based No    No    Untagged

SW # show port-access authenticator

  Port Access Authenticator Status

  Port-access authenticator activated [No] : Yes
  Allow RADIUS-assigned dynamic (GVRP) VLANs [No] : No

       Auths/  Unauth  Untagged Tagged           % In  RADIUS Cntrl
  Port Guests  Clients VLAN     VLANs  Port COS  Limit ACL    Dir
  ---- ------- ------- -------- ------ --------- ----- ------ -----
  10   1/0     0       100      No     No        No    No     both

此外,如果你想让它工作,你必须在交换机上创建所有必需的 VLAN,否则你会得到这样的东西:

W 09/12/14 12:47:57 02400 dca: 8021X client, RADIUS-assigned VID validation
            error. MAC DEAD0000BEEF port 10 VLAN-Id 0 or unknown.

Windows 只会说:Authentication failed这也有点令人困惑。

尽管 GVRP 已启用、aaa port-access gvrp-vlans已设置并且我也在unknown-vlans learn接口 10 上明确设置,但并没有完全让它与未知 VLAN 一起工作,但是哦...nvm。

您需要添加以下命令:

aaa port-access authenticator 10 auth-vid 150

这将告诉交换机端口 10 将使用 auth-vid 分配的 VLAN 用于经过身份验证的设备,除非它从 RADIUS 获得不同的值。如果没有这个,它将只使用配置的端口值并忽略任何 RADIUS 提供的 VLAN 分配。

我做了一些挖掘,并在我保存的 HP 文档之一中发现了这个花絮:

如果 RADIUS 服务器为连接到 802.1X 身份验证器端口的经过身份验证的请求方指定 VLAN,则此 VLAN 分配将覆盖在身份验证器端口上配置的任何授权客户端 VLAN 分配。这是因为两个 VLAN 都未标记,并且交换机只允许每个端口有一个未标记的 VLAN 成员资格。例如,假设您将端口 4 配置为将经过身份验证的请求者置于 VLAN 20 中。如果 RADIUS 服务器对请求者“A”进行身份验证并将此请求者分配给 VLAN 50,则该端口可以在客户端会话期间访问 VLAN 50。当客户端与端口断开连接时,该端口会丢弃这些分配并仅使用静态配置的 VLAN 成员资格。