我有两台 Linux 机器。一台是典型的动态 IP 电缆调制解调器 + OpenWRT 路由器后面的机器。NAT 后面的机器通过与我的提供商的 API 调用定期更新正向 DNS 记录(即设置了动态 DNS 来识别这台机器)。路由器将端口 2049 和 22 转发到这台机器。当公共互联网上的机器尝试使用 Kerberos 身份验证 ssh 到这台机器时,由于选项
ignore_acceptor_hostname = true
在服务器和客户端上的 krb5.conf 中(如果没有这个,我会因为反向 DNS 不匹配而收到“票证不属于我们”的错误)。
但是,当公共互联网上的一台机器尝试使用安全 krb5p 来 nfs4 挂载这台机器时,它不起作用,并且给出
mount.nfs4:挂载 my-dynamic-dns.name.here:/home 时服务器拒绝访问
在客户端计算机上运行 rpc.gssd -v -v -v -f 显示它正在查找我的动态 DNS 名称,然后反向查找该 IP 地址,然后尝试获取 kerberos 主体。错误消息如下所示:
警告:无法为服务器 RNS-Record.from.my.isp.goes.here 的 uid 为 0 的用户创建 krb5 上下文
在现代互联网上,IP 地址由提供商“拥有”,并且每个人都在使用 VPS 等,因此完全没有理由认为 RDNS 记录有任何意义。
我希望 rpc.gssd 和其他相关的 nfs4 机器不要尝试 rnd IP 地址,而是只使用我在 mount 命令中提供的名称。
不起作用的事情包括修改 /etc/hosts,因为 IP 地址是动态的。
关于如何配置我的公共机器以通过具有 Kerberos 安全性的 NFS4 连接到动态 IP / NAT 后面的这台机器,有什么建议吗?
请注意,在 /etc/krb5.conf 中我确实有一行
rdns=false
这会阻止 kerberos 执行 RDNS,但似乎无法阻止 NFS4 执行相同的操作。
答案1
好吧,为了确认这是 RDNS 问题,我将主机的当前条目放入位于公共互联网上的客户端上的 /etc/hosts 文件中。它能够毫无问题地挂载目录。因此,虽然我不知道如何禁用反向 DNS,但我要使用的技巧是运行一个频繁的 cron 作业,该作业从我的动态主机名中正向查找当前 IP 并编辑客户端上的 /etc/host 文件。