问题:如何在 CentOS(RHEL)5 机器上进行(LDAP 支持的)NSS 查找期间禁用 LDAP 服务器的 inet6 AAAA 查询?
背景:我已经将服务器配置为咨询ldap://ldap.internal
NSS密码和团体查找。每个相关的 NSS 查找,例如获取 pwuid(3)需要ls -l
将 UID 转换为网络用户名,在连接到 ldap 服务器之前执行以下 DNS 操作:
AAAA? ldap.internal -> (no records)
AAAA? ldap.internal.internal -> NXDomain
A? ldap.internal -> 192.168.3.89
我想完全跳过前两个查询。配置:
[server]$ cat /etc/redhat-release
CentOS release 5.4 (Final)
[server]$ grep ^passwd /etc/nsswitch.conf
passwd: files ldap
[server]$ grep ^uri /etc/ldap.conf
uri ldap://ldap.internal/
值得注意的是,这些系统上 IPv6 支持已被禁用:
[server]$ grep off /etc/modprobe.conf
alias ipv6 off
alias net-pf-10 off
[server]$ echo "$(ip a | grep -c inet6) IPv6-enabled interfaces"
0 IPv6-enabled interfaces
答案1
我不确定/etc/gai.conf
2009 年是否可以使用,但现在可以使用了(至少从 CentOS 5.5 开始似乎就可以使用)。它是 glibc 的一项功能,允许设置按 IP 地址排序的首选项getaddrinfo(3)
。
看着https://serverfault.com/a/511240/161782获得带有示例的完整答案。
如果你也想让源地址选择有匹配策略,请参阅此帖子: http://biplane.com.au/blog/?p=122
答案2
简短的回答是:不,这种行为无法通过简单的系统配置来改变。
AAAA 查找是发货的预期行为开放LDAP图书馆,openldap-2.3.43-3.el5在撰写本文时。启用 IPv6,LDAP 连接例程解析主机以getaddrinfo(3)
查找任何可用的地址系列 ( AF_UNSPEC
),因此包括 inet4 和 inet6。
现在开放LDAP代码知道这个AI_ADDRCONFIG
提示,当系统上没有配置 inet6 地址时,它将阻止查找 inet6 地址,对于 inet4 地址也是如此。但是,由于两个原因,代码无法提供此提示:
首先,这个提示有缺陷,拼写错误为“AI_ATTRCONFIG”,这个拼写错误在 2.4.14 左右得到了纠正。其次,没有配置测试此标志的可行性,因此提供该标志的代码(无论拼写是否错误)都不会被编译。
我想,这只是一些不必要的网络闲聊而已。