使用 Kerberos 安装 NFSv4 时,身份验证失败,并且 krb5kdc.log 显示 NFS 服务器的错误主体名称。
LOOKING_UP_SERVER: ... host/[email protected] for nfs/[email protected]
... Server not found in Kerberos database
主要的nfs/containershost.internal.domain.tld应该nfs/nfs.internal.domain.tld。
我是否正确地假设正在执行反向 DNS 查询并返回容器主机.内部.域.tld? 如果是,那么在流程的哪一步(以及从哪台机器)进行此查找?
$ dig -x 192.111.111.111
111.111.111.192.in-addr.arpa. 6009 IN PTR containershost.internal.domain.tld.
有没有办法防止发生这种反向 DNS 查询?IP 为 192.111.111.111 (containershost.internal.domain.tld) 的主机正在运行多个容器,因此无法添加 PTR 记录。
Docker 容器主机
主机名:容器主机.内部.域.tld
IP地址:192.111.111.111
FreeIPA 服务器 (docker)
图像:freeipa/freeipa 服务器:centos-8-4.8.4
容器名称:自由派
容器主机:容器主机.内部.域.tld
主机名:freeipa.internal.domain.tld
IP地址:172.222.222.222
领域:ipa.域名.tld
领域:IPA.域名.TLD
密钥表:
$ klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
2 host/[email protected]
/etc/krb5.conf:
[libdefaults]
default_realm = IPA.DOMAIN.TLD
dns_lookup_realm = false
dns_lookup_kdc = true
rdns = false
ticket_lifetime = 24h
forwardable = true
udp_preference_limit = 0
[realms]
IPA.DOMAIN.TLD = {
kdc = freeipa.internal.domain.tld:88
master_kdc = freeipa.internal.domain.tld:88
admin_server = freeipa.internal.domain.tld:749
default_domain = ipa.domain.tld
pkinit_anchors = FILE:/var/lib/ipa-client/pki/kdc-ca-bundle.pem
pkinit_pool = FILE:/var/lib/ipa-client/pki/ca-bundle.pem
}
[domain_realm]
.ipa.domain.tld = IPA.DOMAIN.TLD
ipa.domain.tld = IPA.DOMAIN.TLD
freeipa.internal.domain.tld = IPA.DOMAIN.TLD
.internal.domain.tld = IPA.DOMAIN.TLD
internal.domain.tld = IPA.DOMAIN.TLD
NFS 服务器 (docker)
图像:Ubuntu:最新版
容器名称:网络文件系统
容器主机:容器主机.内部.域.tld
主机名:nfs.内部.域.tld
IP地址:172.333.333.333
正在运行的服务:
- /usr/sbin/rpc.mountd --port 32767 --no-nfs-version 2 --no-nfs-version 3 -F --debug all
- /usr/sbin/rpc.idmapd -S -vvv -f
- /usr/sbin/rpc.nfsd --debug --port 2049 --no-nfs-version 2 --no-nfs-version 3 -L 10 -G 10
- /usr/sbin/rpc.svcgssd -f -vvv -rrr -iii -p nfs/nfs.internal.domain.tld
密钥表:
$ klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
74 host/[email protected]
66 nfs/[email protected]
/etc/krb5.conf:
[libdefaults]
default_realm = IPA.DOMAIN.TLD
dns_lookup_realm = false
dns_lookup_kdc = false
rdns = false
[realms]
IPA.DOMAIN.TLD = {
kdc = freeipa
admin_server = freeipa
default_domain = domain.tld
}
[domain_realm]
.domain.tld = IPA.DOMAIN.TLD
domain.tld = IPA.DOMAIN.TLD
NFS 客户端
操作系统:Ubuntu 20.04
主机名:nfsclient.内部.域.tld
IP地址:192.444.444.444
密钥表:
$ klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
5 host/[email protected]
挂载命令:
$ sudo mount -vvv -t nfs4 -o sec=krb5p 192.111.111.111:/ /mountpoint
mount.nfs4: trying text-based options 'sec=krb5,vers=4.2,addr=192.111.111.111,clientaddr=192.444.444.444'
mount.nfs4: mount(2): Permission denied
mount.nfs4: access denied by server while mounting 192.111.111.111:/
结果
/var/log/krb5kdc.log:
freeipa krb5kdc[288](info): TGS_REQ (4 etypes {aes256-cts-hmac-sha1-96(18), aes128-cts-hmac-sha1-96(17),
DEPRECATED:des3-cbc-sha1(16), DEPRECATED:arcfour-hmac(23)}) 192.444.444.444: LOOKING_UP_SERVER: authtime 0,
etypes {rep=(0)} host/[email protected] for nfs/[email protected],
Server not found in Kerberos database
答案1
nfs 服务器将其自身名称解析为容器主机.内部.域.tld。因此,它会在 keytab 文件中查找该名称。您可能应该明确将容器名称设置为nfs.内部.域.tld(使用 docker-compose 中的 -name 选项或 host 指令)或者在 keytab 文件中添加另一个条目。