FreeRadius为了负载均衡随机分配属性

FreeRadius Assign Attributes Randomly For The Sake of Load Balance

我们正在使用 FreeRadius 对网络用户进行身份验证,其中一项要求是在两个 DNS 服务器之间平衡 DNS 负载,以便当用户在连接后获得 IP 时,他们会收到他们的 DNS 服务器例如,以随机顺序,一些用户分别获得 10.10.10.1 和 10.10.10.2,而其他用户则相反。

为此,我们将在用户通过 radius 进行身份验证后为其分配随机 DNS 服务器属性。我们正在考虑将 FreeRadius rand 方法与 un lang if 语句一起使用,但是,我们认为也许有更好或更优雅的方法来实现类似的要求。

当前设置完美运行(请注意,它不是循环方式)但使用 un lang 以及 rand 和 expr 方法成功,如下所示:

if (&User-Name == "bob") {    
        if ("%{expr:%{rand:2}+1}" == "1") { ## A workaround to switch DNS orders 
                update reply {
                        Reply-Message := "Primary DNS comes first"
                        MS-Primary-DNS-Server := "192.168.41.1"
                        MS-Secondary-DNS-Server := "192.168.41.2"
                        }
                accept
                }
        else {
                update reply {
                        Reply-Message := "Secondary DNS comes first"
                        MS-Primary-DNS-Server := "192.168.41.2"
                        MS-Secondary-DNS-Server := "192.168.41.1"
                        }
                accept
                }
}

你能建议或提出更好的方法来实现类似的结果吗?

使用:FreeRADIUS 版本 3.0.11

使用负载平衡关键字

load-balance {
    group {
        update reply {
            Reply-Message := "Primary DNS comes first"
            MS-Primary-DNS-Server := "192.168.41.1"
            MS-Secondary-DNS-Server := "192.168.41.2"
        }
        accept      
    }
    group {
        update reply {
            Reply-Message := "Secondary DNS comes first"
            MS-Primary-DNS-Server := "192.168.41.2"
            MS-Secondary-DNS-Server := "192.168.41.1"
        }
        accept      
    }
}

您还可以将 'group' 部分替换为策略调用或模块调用。

IIRC 在 v3 的负载平衡部分中使用裸更新部分存在一些问题。0.x,所以即使你只有更新部分,你可能仍然希望将它包装在一个组中。