禁用 NSS LDAP IPv6 (AAAA) 查找
**問題:**在 CentOS (RHEL) 5 機器上(LDAP 支持的)NSS 查找期間,如何禁用我的 LDAP 伺服器的 inet6 AAAA 查詢?
**背景:*我已將伺服器配置為諮詢
ldap://ldap.internal
NSS密碼和組查找。每個相關的 NSS 查找,例如需要將 UID 轉換為網路使用者名的 getpwuid(3),在連接到 ldap 伺服器之前執行以下 DNS舞蹈:*ls -l
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
簡短的回答是:不,這種行為不能通過簡單的系統配置來改變。
在撰寫本文時, AAAA 查找是隨附的openldap庫openldap-2.3.43-3.el5的預期行為。使用–enable-ipv6建構的 LDAP 連接常式通過
getaddrinfo(3)
查找任何可用的地址族 (AF_UNSPEC
) 來解析主機,因此包括 inet4 和 inet6。現在,openldap程式碼知道該
AI_ADDRCONFIG
提示,當系統上沒有配置任何 inet6 地址時,這將阻止查找 inet6 地址,對於 inet4 地址也是如此。但是,由於兩個原因,程式碼無法提供此提示:首先,錯誤地,提示被拼寫為“AI_ATTRCONFIG”
$$ sic $$,在 2.4.14 左右更正了拼寫錯誤。其次,沒有對該標誌的可行性進行配置測試,因此提供標誌的程式碼,無論是否拼寫錯誤,都不會被編譯進去。 我想,只是多一點不需要的網路聊天。
我不確定
/etc/gai.conf
2009 年是否可以使用,但現在可以使用(並且似乎至少從 CentOS 5.5 開始)。它是 glibc 的一項功能,允許設置 IP 地址排序的首選項getaddrinfo(3)
。查看https://serverfault.com/a/511240/161782以獲取帶有範例的完整答案。
如果您還想讓源地址選擇具有匹配策略,請參閱此文章: http ://biplane.com.au/blog/?p=122