如何配置FreeRADIUS依次查询多个Base DN适配多域名Google Workspace?
配置FreeRADIUS多Base DN顺序查询Google Workspace用户
核心思路
Google Workspace LDAP不支持跨域根目录查询(你之前尝试DC=com失败正是这个原因),要实现“首个Base DN无结果时依次查询其他目录”,可以通过FreeRADIUS的多LDAP模块实例链式调用,或者动态切换Base DN的方式实现。
具体配置方案
方案1:多LDAP模块实例顺序执行
复制多份LDAP模块配置对应不同Base DN,在认证流程中按顺序调用,失败后继续尝试下一个实例。
- 编辑
mods-available/ldap,添加多个模块实例:
# 实例1:对应example1.com ldap ldap_example1 { server = "ldap.google.com" port = 636 ssl = yes base_dn = "DC=example1,DC=com" userfilter = "(mail=%{%{Stripped-User-Name}:-%{User-Name}})" # 通用配置与现有实例保持一致 bind_dn = "admin@example.com" bind_password = "your_bind_password" } # 实例2:对应example2.com ldap ldap_example2 { server = "ldap.google.com" port = 636 ssl = yes base_dn = "DC=example2,DC=com" userfilter = "(mail=%{%{Stripped-User-Name}:-%{User-Name}})" bind_dn = "admin@example.com" bind_password = "your_bind_password" } # 按需添加example3、example4的模块实例
- 编辑认证站点配置(如
sites-available/default),在authorize段按顺序调用模块,设置fail=no允许失败后继续执行:
authorize { ldap_example1 ldap_example2 fail=no ldap_example3 fail=no ldap_example4 fail=no }
方案2:动态切换Base DN重试
保留单个LDAP模块,通过逻辑判断在查询失败时动态修改Base DN并重试。
- 保留基础LDAP模块配置(
mods-available/ldap):
ldap { server = "ldap.google.com" port = 636 ssl = yes base_dn = "DC=example1,DC=com" userfilter = "(mail=%{%{Stripped-User-Name}:-%{User-Name}})" bind_dn = "admin@example.com" bind_password = "your_bind_password" }
- 在
sites-available/default的authorize段添加重试逻辑:
authorize { # 首次查询默认Base DN ldap # 若返回用户未找到(LDAP错误码32),切换Base DN重试 if (&control:LDAP-Result-Code == 32) { update control { LDAP-Base-DN := "DC=example2,DC=com" } ldap # 继续判断是否重试第三个Base DN if (&control:LDAP-Result-Code == 32) { update control { LDAP-Base-DN := "DC=example3,DC=com" } ldap # 第四个Base DN重试逻辑 if (&control:LDAP-Result-Code == 32) { update control { LDAP-Base-DN := "DC=example4,DC=com" } ldap } } } }
注意事项
- 确保绑定账号拥有所有目标Base DN的查询权限。
- 优先以
example1.com(用户别名所在域)作为第一查询目标,减少重试次数,避免触发Google Workspace LDAP的速率限制。 - 调试时可启动FreeRADIUS调试模式(
radiusd -X),查看各Base DN的查询过程与结果。
内容的提问来源于stack exchange,提问作者Evo Fearnley
相关产品推荐
相关产品推荐

