根据连接为不同的 IP 设置相同的 FQDN

根据连接为不同的 IP 设置相同的 FQDN

我在 Debian 上运行 Kerberos / LDAP 用户身份验证,几十年来一直运行良好。我现在想使用笔记本电脑,可以通过有线或 WiFi 连接。我一直在思考如何设置这个基础设施,我不相信没有解决方案。我脑子里的毛线球是这样的:

LAN 和 WiFi 的 NIC 具有不同的 MAC,因此 DHCP 将分配不同的 IP 地址。此外,LAN 和 WiFi 不应桥接,即理想情况下它们甚至位于不同的网段中。因此,不同的 IP 意味着不同的 DNS 名称,即不同的 keytab 条目。此外,对于远程管理ssh访问,我需要提前知道笔记本电脑当前是有线连接还是使用 WiFi。

嗯,绝对有可能在每台笔记本电脑都有两个名称、Kerberos 主体、ssh 身份等的情况下运行此功能……但是,难道没有更方便的解决方案,更面向机器而不是 NIC 吗?

我已经考虑过 DDNS 之类的概念,但对于简单的移动自由来说,这似乎有点复杂。或者这是 RADIUS 应该解决的问题?

我很感激有关这个问题的最佳实践的提示,或者我无法通过人格分裂系统获得的经验。

答案1

因此,不同的 IP 意味着不同的 DNS 名称

或者动态更新的 DNS 名称。Windows 计算机始终会这样做 - 所有 AD 域成员都会向权威 DNS 服务器发送 RFC2136“更新”消息(这就是该ipconfig /registerdns选项的作用),这样无论计算机在哪里,它都会有一个有效的 DNS 条目。Windows 甚至使用 Kerberos 来验证更新。

通过 ISC BIND 托管的动态可更新区域,您可以在 Linux 上获得相同的功能;您可以拥有一个网络脚本,该脚本可以nsupdate在网络连接建立后立即运行以添加/删除 IP 地址。

nsupdate -g <<!
zone dyn.example.com
del $(hostname).dyn.example.com 0 ANY
add $(hostname).dyn.example.com 300 A ${ipv4}
add $(hostname).dyn.example.com 300 AAAA ${ipv6}
add $(hostname).dyn.example.com 300 SSHFP ${fingerprint}
send
!

(其他 DNS 服务器也实现了 RFC2136 动态更新,尽管它们中的大多数仅支持基于 PSK 的 TSIG-HMAC 身份验证 - BIND 是唯一通过 GSS-TSIG 支持 Kerberos 的服务器。)

正如评论中提到的,DHCP 服务器在收到带有“主机名”选项的 DHCP 租约请求时也可能更新 DNS(大多数主机都会发送它,大多数消费者无线路由器也会这样做)。ISC BIND+dhcpd 设置使用相同的 TSIG RFC2136 更新;其他服务器可能有自己的机制。

您还可以使用多播 DNS (mDNS) – 添加host/foo.local为 Kerberos 主体,并让 avahi-daemon(或 systemd-resolved)向其他 LAN 主机公布自己的地址。非 Linux 系统也普遍支持 mDNS。

即不同的 keytab 条目。

可以让两个主体共享相同的密钥;例如,通过使用 LDAP 后端的 MIT Kerberos,您可以创建 LDAPalias对象并添加多个krbPrincipalName属性。

ldapmodify <<EOF
dn: krbPrincipalName=host/[email protected],cn=EXAMPLE.COM,cn=Kerberos,o=FooInc
add: krbCanonicalName
krbCanonicalName: host/[email protected]
-
add: krbPrincipalName
krbPrincipalName: host/[email protected]
krbPrincipalName: host/[email protected]
-
EOF

ldapadd <<EOF
dn: krbPrincipalName=host/[email protected],cn=EXAMPLE.COM,cn=Kerberos,o=FooInc
objectClass: alias
objectClass: extensibleObject
aliasedObjectName: krbPrincipalName=host/[email protected],cn=EXAMPLE.COM,cn=Kerberos,o=FooInc
EOF

(我思考Heimdal 也支持其默认 HDB 后端的别名,但 MIT Krb5 不支持。)

创建别名后,服务器只需要一个主体的密钥表条目 - 只要其他主体成功解密(如果密钥是共享的,它们就会成功解密),它就会接受为其他主体颁发的票证。不过您可能需要启用此 krb5.conf 选项才能使其工作:

[libdefaults]
    ignore_acceptor_hostname = yes

如果某些 Kerberos 客户端不进行主机名规范化(例如,从 Windows 进行 SSH 时,根本不会规范化主机名),则此功能非常有用,因为它允许您在同一台机器上同时拥有host/foo.example.com和。host/foo

LAN 和 WiFi 的 NIC 具有不同的 MAC,因此 DHCP 将分配不同的 IP 地址

只要以太网和 Wi-Fi 不在同一子网上同时使用,就可以配置相同的DHCP 客户端 ID对于两个接口,因此在两个接口上都接收相同的租约(客户端 ID 优先于物理 MAC 地址)。

但是,难道没有一种更方便、更面向机器而不是 NIC 的解决方案吗?

您可以借用企业路由中的“环回地址”理念 - 即将“管理”地址与分配给物理接口的地址分离。(在 IPX 中也称为“内部网络”,在 LISP 中也称为“EID/RLOC”等)

一种典型的方法是创建一个dummy0接口并为其分配一个 IP 地址/32;然后让笔记本电脑运行一个小型路由守护进程(如 babeld 或 Bird2),通过 OSPF 或 Babel 或 RIP 将其(作为存根接口)通告给其他计算机。

运行路由守护进程的设备(其他主机和/或您的 LAN 路由器)将自动知道它们可以通过任何“物理”以太网/Wi-Fi IP 地址到达“环回”IP 地址;主机将能够从 Wi-Fi 切换到以太网,甚至可以在子网之间移动,同时保留其地址和活动的 TCP 连接。

除了复杂性之外,这还有一个缺点,即大多数路由协议在 Wi-Fi 上都有点“繁琐”,这可能会影响电池寿命。(BGP 用于数据中心,让服务器以这种方式宣布其 IP 地址,虽然不太繁琐,但需要路由器来支持它,而 OSPF/Babel 可以直接在所有主机之间运行。)

相关内容