http://www.rjsystems.nl/en/2100-dns-discovery-openldap.php
介绍
正如Kerberos客户端的管理,当面对大量的LDAP客户端的时候,简化管理的一种可能的方法是维护预定的一组DNS主机别名(CNAME记录)来引用一个网络上的OpenLDAP的数据库服务器。但是,这种方法的灵活性受到限制,和Kerberos存在同样的问题,值得庆幸的是OpenLDAP还支持DNS发现。
1. DNS SRV RR
像Kerberos,OpenLDAP通过使用SRV资源记录来支持DNS发现。例如,如果在网络中有两个LDAP服务器可用,klas1和klas2,使用某些LDAP工具程序基于DNS来发现他们,添加一对条目到example.com的区域文件(zone file),例如以下面的BIND9格式:
_ldap._tcp.example.com. IN SRV 10 0 389 klas1.example.com.
_ldap._tcp.example.com. IN SRV 20 0 389 klas2.example.com.
这种类型的记录组成如下:
- 以下划线开头后跟服务名称。参见/etc/services中的协议名称的列表。
- 下划线后跟协议名称,在这个案例中只使用TCP。
- 其次是后跟点符的匹配LDAP域组件(没有前置的下划线)的DNS名称。
- IN(Internet)数据类指标。
- SRV(服务)资源记录类型指标。
- 范围0-65535内的优先级值,较低的值有更高的优先级。
- 范围0-65535内的权重值。使用相同的优先级值标识服务的简单负载均衡。采用概率算法优先考虑主机具有较高的权重值。值0禁用它。
- 服务在其上侦听的TCP端口号。
- 目标:提供该服务的主机的FQDN(没有别名!),后跟一个点符。
由于点符的遗漏会造成BIND9在每个带有区域域名的条目处结束,此格式能够获得下列如上所述相同的确切结果:
_ldap._tcp IN SRV 10 0 389 klas1
_ldap._tcp IN SRV 20 0 389 klas2
一旦配置了正确的SRV条目,检查它们是否可用:
~$ host -t SRV _ldap._tcp
_ldap._tcp.example.com has SRV record 10 0 389 klas1.example.com.
_ldap._tcp.example.com has SRV record 20 0 389 klas2.example.com.
~$ _
2. 客户端的解决方法
通常方式使用DNS发现,并不是所有工具程序都能非常好地支持。相比Kerberos或AFS来说OpenLDAP更明显,因为一旦URI的选项从/etc/ldap/ldap.conf,/etc/libnss-ldap.conf中和/etc/pam_ldap.conf中省略,用户仍可能需要能够登录?哪个是最重要的问题?但使用ldap-utils软件包提供的标准的LDAP工具程序,都抱怨没有可用的LDAP服务器可以连接。他们仍希望发现在/etc/ldap/ldap.conf中列出的一个或多个服务器。幸运的是,有一个解决方法,所有的LDAP工具程序接受一个-H选项后跟一个LDAP URI来指定要使用的LDAP服务器。可以用命令测试LDAP DNS发现,例如用ldapsearch命令,使用一种特殊的URI:
~$ ldapsearch -H ldap:///dc%3Dexample%2Cdc%3Dcom uid=ccolumbus
使用上面的带逗号和等号(根据RFC-2396进行转义)字符串"dc=example,dc=com"作为LDAP URI。当然,每次使用该LDAP工具都包括这个选项会非常麻烦,要避免这种情况只要把下面的行添加到/etc/profile文件:
alias ldapadd='ldapadd -H ldap:///dc%3Dexample%2Cdc%3Dcom'
alias ldapcompare='ldapcompare -H ldap:///dc%3Dexample%2Cdc%3Dcom'
alias ldapdelete='ldapdelete -H ldap:///dc%3Dexample%2Cdc%3Dcom'
alias ldapmodify='ldapmodify -H ldap:///dc%3Dexample%2Cdc%3Dcom'
alias ldapmodrdn='ldapmodrdn -H ldap:///dc%3Dexample%2Cdc%3Dcom'
alias ldappasswd='ldappasswd -H ldap:///dc%3Dexample%2Cdc%3Dcom'
alias ldapsearch='ldapsearch -H ldap:///dc%3Dexample%2Cdc%3Dcom'
alias ldapwhoami='ldapwhoami -H ldap:///dc%3Dexample%2Cdc%3Dcom'
3. 另请参阅
- OpenLDAP client on Debian squeeze
- OpenLDAP client on Debian lenny
- OpenLDAP client with MIT Kerberos V on Debian lenny
- Integrated Kerberos-OpenLDAP client on Debian lenny
- Integrated Kerberos-OpenLDAP-OpenAFS client
- DNS discovery for MIT Kerberos V
- DNS discovery for OpenAFS
4. 延伸阅读
- Berners-Lee T, Fielding R, Irvine UC, Masinter L. 1998. RFC2396 − Uniform Resource Identifiers (URI): Generic Syntax.HTML at theInternet FAQ Archives.
- Eastlake D, Panitz A. 1999. RFC2606 − Reserved Top Level DNS Names. The Internet Society.HTML at theInternet FAQ Archives.
- Gulbrandsen A, Vixie P, Esibov L. 2000. RFC2782 − A DNS RR for specifying the location of services (DNS SRV). The Internet Society.HTML at theInternet FAQ Archives.
5. 参考
- Aitchison R. 2005. Pro DNS and Bind. Apress. ISBN 1-59059-494-0. 571 pp. See pages 464-465.
- Liu C, Albitz P. 2006. DNS and BIND. Fifth Edition. O'Reilly & Associates, Inc. ISBN-13 978-0-596-10057-5. 616 pp.
- OpenLDAP Project. 2009. OpenLDAP Software 2.4 Administrator's Guide. HTML at OpenLDAP.