我在 Debian 上运行 Kerberos / LDAP 用户身份验证,几十年来一直运行良好。我现在想使用笔记本电脑,可以通过有线或WiFi连接。我一直在思考如何建立这个基础设施,我不相信没有解决方案。我脑子里的羊毛球沿着这些线:
LAN 和 WiFi 的 NIC 具有不同的 MAC,因此 DHCP 将分配不同的 IP 地址。此外,LAN 和 WiFi 不应桥接,即理想情况下它们甚至在不同的网段中。因此,不同的 IP 意味着不同的 DNS 名称,即不同的密钥表条目。此外,对于远程管理ssh
访问,我需要提前知道笔记本电脑当前是有线连接还是使用 WiFi。
好吧,绝对可以在每台笔记本电脑上运行它,每台笔记本电脑都有两个名称,Kerberos 主体,ssh 身份,...但是没有更方便的解决方案更面向机器而不是 NIC 吗?
我已经考虑过像 DDNS 这样的概念,但是简单地四处移动的自由似乎有些复杂。或者这是 RADIUS 应该解决的问题?
我很欣赏有关此问题的最佳实践的提示或我不会绕过人格分裂系统的经验。
或者动态更新的 DNS 名称。Windows 机器一直这样做——所有 AD 域成员向权威 DNS 服务器发送 RFC2136“UPDATE”消息(这就是该选项的作用
ipconfig /registerdns
),因此无论机器在哪里,它都会有一个有效的 DNS 条目。Windows 甚至使用 Kerberos 来验证更新。通过 ISC BIND 托管的动态可更新区域,您可以在 Linux 上拥有相同的区域;您可以拥有一个网络脚本,
nsupdate
一旦网络连接建立,该脚本就会运行以添加/删除 IP 地址。(其他 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 主机宣布其自己的地址。对 mDNS 的支持在非 Linux 系统上也很常见。可以让两个主体共享相同的密钥;例如,对于使用 LDAP 后端的 MIT Kerberos,您可以创建 LDAP
alias
对象并添加多个krbPrincipalName
属性。(我认为Heimdal 也支持其默认 HDB 后端的别名,但 MIT Krb5 不支持。)
创建别名后,服务器只需要一个主体的密钥表条目——只要其他主体成功解密(如果共享密钥,它们就会这样做),它就会接受为其他主体发出的票证。虽然您可能需要启用此 krb5.conf 选项才能工作:
如果某些 Kerberos 客户端不进行主机名规范化(例如,当从 Windows 进行 SSH 时,它根本不会规范化主机名),这将非常有用,因为它允许您同时拥有这两种客户端并用于同一台
host/foo.example.com
机器host/foo
。只要以太网和 Wi-Fi 不同时在同一个子网上使用,就可以为两个接口配置相同的DHCP 客户端 ID,因此在两个接口上接收相同的租约(客户端 ID 优先于物理 MAC地址)。
您可以从企业路由中借用“环回地址”的想法——也就是说,将“管理”地址与分配给物理接口的地址分离。(在 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 可以直接在所有主机之间运行。)