具有多个域名的计算机的 Kerberos

具有多个域名的计算机的 Kerberos

我有几个 *nix 路由器,它们有多个 IP 地址。它们运行 WireGuard 和 BGP,以在两个不同的 ASN 下宣布两个地址范围。例如:一台名为 的机器pis1.us.nodes.<domain>111.111.111.111(用于 WireGuard 端点的公共 IP,不在我的 ASN 下)、fd3f:a1f1::1(在我的 ASN 1 下宣布的 IP) 和2404:f4c0::1(在我的 ASN 2 下宣布的 IP)。为了简化管理,我决定按照某种模式向它们添加 DNS 记录:ge-<network name>.<hostname>

因此,名为的机器pis1.us.nodes.<domain>将有四个 DNS 记录:

  • ge-tunnel.pis1.us.nodes.<domain> IN A 111.111.111.111
  • ge-net1.pis1.us.nodes.<domain> IN AAAA fd3f:a1f1::1
  • ge-net2.pis1.us.nodes.<domain> IN AAAA 2404:f4c0::1
  • pis1.us.nodes.<domain> CNAME ge-net2.pis1.us.nodes

我需要使用所有这些地址访问服务器,因此万一一个网络出现故障,我仍然可以使用 SSH 连接它并修复它。

问题是,我使用 Kerberos 进行 SSO。该机器的主机名是pis1.us.nodes.<domain>,其主体在 Kerberos 数据库中也是host/。我将 SSH 与 GSSAPI 结合使用,因此无论何时输入,ssh pis1.us.nodes.<domain>它都会正常工作。

但是,如果我需要使用任何域连接到主机ge-xxx,SSH 将无法ge-xxx在 Kerberos 数据库中找到该()主体,从而导致身份验证失败。

我是否需要为所有这些域名创建主体? 有没有更好的解决方案? 非常感谢。

答案1

  • 您可以为所有主机的 IP 地址配置反向 DNS,指向规范名称。大多数非 AD Kerberos 实现始终使用 rDNS 作为名称规范化的一部分。

    (rDNS 条目不必是全局的;它们只需要对客户端可见。只要客户端可以查找它们,它们甚至不需要在 DNS 中 - 以防您想将它们放在 /etc/hosts 或 LDAP ipHost 条目中。)

  • 您确实可以创建多个主体,将它们全部添加到系统密钥表,并启用 krb5.confignore_acceptor_hostname选项 - 现在该服务将接受使用以下加密的票证任何在密钥表中找到的密钥。(您可以GSSAPIStrictAcceptorCheck在 sshd_config 中使用,但它们的作用相同。)

  • 如果您使用 MIT Kerberos 作为 KDC,其 LDAP 后端支持主体别名(通过 LDAP 别名对象)——单个条目可以有多个主体名称,共享相同的密钥。这样,只需一个 keytab 条目就足够了,尽管您仍然需要上面的“忽略接受者”选项。

    (MIT Krb5 中的文件数据库后端不支持别名,只有 kldap 后端支持。Heimdal Kerberos 似乎modify --alias在 kadmin 中支持。)

    当使用 Active Directory 作为 KDC 时,可以将多个 servicePrincipalName 属性分配给同一个帐户;AD 已经严重依赖这一点。

  • 您可以通过始终指定服务器的规范名称来欺骗 SSH 客户端,但使用ProxyCommand建立到与域名实际指向不同的地址的套接字。

相关内容