freeradius:从用户过滤的特定池中分配 IP

freeradius:从用户过滤的特定池中分配 IP

我是新来的。

我有一个带有 sqlippool 和 LDAP 身份验证的 freeradius 3(使用“guest”文件配置的用户),一切运行正常。我有 2 个 sqlippool:

-主池

-guest_pool

我想要执行以下操作:

如果用户是“来宾”,则提供来自 guest_pool 的 IP,否则提供来自 main_pool 的 IP。我的想法是让来宾和其他用户位于不同的 VLAN 中。

我如何告诉 radius dhcp“用​​户是否是来自 guest_pool 的客人?”

抱歉我的英语不好。

谢谢。

答案1

我解决了!

感谢 Arran Cudbard-Bell 提供的线索!

首先,创建一个名为“userhardaddr”的表,其中用户名和mac(PK)都是varchar。

在 (radius conf dir)/sites-enabled/defaul (post-auth 部分) 中我进行了“REPLACE”查询:

post-auth {
    ...
    update reply {
        Tmp-String-0 := "%{sql:REPALCE INTO userhardaddr(username,mac) VALUES(%{User-Name},%{Calling-Station-Id})}"
    ... 
    }
}

如果存在,则用表中已连接的 MAC 地址替换用户。如果不存在,则 REPLACE 将像 INSERT 一样创建行。

然后,在 sites-enabled/dhcp (发现和请求部分) 中:

dhcp DHPC-Discover {
    update request {
        ...
        User-Name = "%{sql:SELECT username FROM userhardaddr where mac = REPLACE ('%{DHCP-Client-Hardware-Address}',':','-')}"
        ...
    }
    ...
    if(&User-Name=='guest') {
        &Pool-Name = "guest_pool"
    }
    else {
        &Pool-Name = "main_pool"
    }
...
}
...
dhcp DHPC-Request {
    (same in discover)
}

这样我就可以根据 mac 地址从数据库中获取用户名。

在 IF 语句中,我将查询返回的值与“guest”进行比较并分配相应的 IP 池。

再次感谢。

问候。

相关内容