Ldap

openldap / slapd 返回錯誤:“守護程序:listen(ldap://my.server1.org, 5) failed errno=98 (Address already in use)”

  • January 3, 2022

我正在嘗試在兩個 openldap 伺服器之間設置主複製。為此,第一步讓我配置這兩個文件:

  • /etc/hosts,需要包含伺服器(本身和第二台伺服器)的baseDN的DNS:
192.168.150.1 my.server1.org
192.168.150.2 my.server2.org
  • /etc/default/slapd,需要包含伺服器自己的 FQDN 以將未來的 serverID 與 URI 匹配:
SLAPD_SERVICES="ldap:/// ldapi:/// ldap://my.server1.org"

配置 SLAPD_SERVICES 變數並重新啟動 slapd 服務後,我收到以下錯誤:daemon: listen(ldap://my.server1.org, 5) failed errno=98 (address already un use)。注意:服務處於活動狀態(未處於失敗狀態)

所有 LDAP 命令(例如“ldapsearch -x”)都返回相同的錯誤:ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

我嘗試通過列出正在使用該地址的伺服器上執行的所有程序來查找原因my.server1.org

lsof -i |grep my.server1.org
nmdb  377 root  25u IPv4 17535    0t0 UDP my.server1.org:netbios-ns
nmdb  377 root  27u IPv4 17537    0t0 UDP my.server1.org:netbios-dgm

注意:殺死netbios的PID並沒有解決問題

如您所見,沒有第二個 slapd/openldap 服務已經在執行。

我自己或在網際網路上找不到解決方案,所以我在這裡發布我的問題。

編輯1:在@naxto asenjo 的請求之後,這裡是命令的結果ss --listening --processes --numeric |egrep "389|636"

Netid  State  Recv-Q  Send-Q    Local Address:Port                            Peer Address:Port
u_str  LISTEN 0       128       /run/containerd/containerd.sock.ttrpc 14758   users:(("containerd",pid=389, fd=6)) *O
u_str  LISTEN 0       128       /run/containerd/containerd.sock.ttrpc 14758   users:(("containerd",pid=389, fd=7)) *O

編輯 2:我嘗試將 SLAPD_SERVICES 和 /etc/hosts 中的值更改為我從未使用過的新 FQDN(ldap 數據庫仍然是 my.server1.org)。重新啟動 slapd 後,我收到相同的錯誤,“地址已在使用中”(對於新的 FQDN)。/etc/hosts 和 SLAPD_SERVICES 似乎遇到了衝突?如果我不編輯 /etc/hosts 文件,我會收到錯誤“名稱解析暫時失敗”。

離開項目一段時間後,我找到了解決方案。

在我的 SLAPD_SERVICES 變數中,使用了兩個 FQDN 地址:ldap:///並且ldap://my.server1.org/都使用了:389埠。

SLAPD_SERVICES="ldap:/// ldapi:/// ldap://my.server1.org"

如果要解決衝突,可以刪除其中一個地址或更改其中一個的埠。

SLAPD_SERVICES="ldap://:3389/ ldapi:/// ldap://my.server1.org"
or 
SLAPD_SERVICES="ldapi:/// ldap://my.server1.org"

引用自:https://serverfault.com/questions/1086268