我们正在使用FreeRadius对网络上的用户进行身份验证,其中一项要求是在两台DNS服务器之间实现DNS负载平衡,因此当用户在连接后获得IP时,他们会随机接收其DNS服务器,例如某些用户分别获得10.10.10.1和10.10.10.2,而其他用户获得相反的结果。
为此,一旦用户通过半径进行身份验证,我们便向他们分配随机DNS服务器属性。我们曾考虑将FreeRadius rand方法与unlang if语句一起使用,但是,我们认为也许有一种更好或更优雅的方式来实现类似的要求。
当前的设置运行良好(请注意,它不是循环样式的,但是它成功地使用了unlang以及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
}
}
您还可以将“组”部分换成策略调用或模块调用。
IIRC在v3.0.x的负载平衡部分中使用裸露的更新部分存在一些问题,因此,即使您只有更新部分,您仍可能希望将其包装在一个组中。