我有几个 *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.conf
ignore_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
建立到与域名实际指向不同的地址的套接字。