禁用 NSS LDAP IPv6 (AAAA) 查找

禁用 NSS LDAP IPv6 (AAAA) 查找

问题:如何在 CentOS(RHEL)5 机器上进行(LDAP 支持的)NSS 查找期间禁用 LDAP 服务器的 inet6 AAAA 查询?

背景:我已经将服务器配置为咨询ldap://ldap.internalNSS密码团体查找。每个相关的 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.conf2009 年是否可以使用,但现在可以使用了(至少从 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 左右得到了纠正。其次,没有配置测试此标志的可行性,因此提供该标志的代码(无论拼写是否错误)都不会被编译。

我想,这只是一些不必要的网络闲聊而已。

相关内容