(重新)构建终极家庭实验室NUC集群 - 第二部分
欢迎来到NUC集群系列的第二部分。在第一部分中,我解释了如何使用Proxmox部署集群,并详细介绍了硬件设置和其他连接器。在这一部分中,我们将深入探讨如何构建自己的Active Directory实验室环境,并展示在Windows企业环境中快速部署测试范围的方法。
本博文与Chris P(Ghostie/BSky)合作撰写,他非常友好地更新了博文内容,添加了他最近设置Proxmox/Ludus实验室的一些步骤。
设置Ludus
对于那些可能没有听说过Ludus的人,Ludus是一个强大的实验室自动化工具,可以轻松部署复杂的环境,如Active Directory实验室、渗透测试环境等。按照默认说明在Proxmox上设置Ludus涉及创建虚拟机、安装Ludus并配置它以部署和管理实验室环境。
然而,直接在Proxmox主机上部署Ludus同样有效。有一个简单的一行命令可以在主机上安装Ludus,但请注意:以这种方式安装Ludus将有效地接管主机,因此请确保这是您想要做的。
根据Ludus网站的最低要求,您需要以下内容:
- x86_64(即amd64,即64位“Intel”)CPU,Passmark得分 > 6,000
- Debian 12或Proxmox 8(如果是Proxmox,请参阅此页面了解详情)
- 支持虚拟化 - /proc/cpuinfo中的vmx或svm(支持嵌套虚拟化,但会有性能损失)
- 至少32 GB RAM - 越多越好,在我的所有案例中,我有64GB RAM
- 至少200 GB磁盘空间(推荐快速NVMe) - 同样越多越好,我现在大多数设备都有1TB(由于在主机之间移动资源并重新调整NUC用途,与上一篇文章的默认设置不同)
- Root访问权限 - 如果您自己部署,您已经拥有此权限
- 互联网访问(不通过WiFi)。注意:不支持绑定NIC或其他高级网络。如果使用这些,您需要在安装后通过控制台修复网络(编辑/etc/network/interfaces),因为Ludus假定您有单个标准接口
在网络方面,如果您使用第一部分中描述的集群,则需要手动配置接口,我不会在本文中详细介绍,因为根据硬件不同而有所不同。
如果您决定继续,最好为Ludus创建专用用户,然后运行一行命令:
|
|
install.sh脚本将安装ludus客户端,可选shell补全,然后提示安装服务器。按照交互式安装程序操作。如果不确定任何选项,只需接受默认值。安装程序将启动并重新启动机器。
选择“是”后,安装程序将自动检测设置,如下所示:
每个设置您按回车键将构建服务器设置配置,您将在右侧看到它填充:
完成配置构建后,Ludus最终会询问您是否确定要安装它,准备好?
然后安装程序启动大量Ansible,自动将Ludus客户端和服务器安装到主机:
重新启动后,安装将自动继续。要监视其进度,请通过ssh登录机器,提升到root,并运行ludus-install-status。
Ludus不允许您执行任何操作,除非创建标准Ludus用户。记下LUDUS_API_KEY:
运行安装状态命令时,上述屏幕显示安装成功。下一步是创建Ludus用户以委托安装并防止您使用root帐户。网站建议在命令中设置API密钥,但我发现将其导出为环境变量效果更好:
|
|
创建管理员用户非常简单,只需以下命令:注意生成可能需要一分钟,但一旦完成,您将获得用户的新API密钥。
|
|
用户API密钥
将此API密钥保存在安全的地方,因为它将用于所有Ludus相关操作。我选择在我的.bashrc/.zshrc中设置它,以便持续设置:
.bashrc配置 - API密钥设置
另外,因为我懒,我也将root密钥保存在那里以便轻松访问,这样我可以注释掉一个并使用另一个进行各种命令。
许多Proxmox指南建议从PVE shell运行任何命令,而不是SSH。我使用SSH从未遇到过问题,但许多指南不可能错,对吧?我建议的另一件事是调整默认的packer模板。我不需要OS磁盘为250g,因此我修改了每个OS的.prk.hcl文件。它们可以在/opt/ludus/packer/“OS Name”/中找到。记下密钥后,您可以使用ludus user creds get获取新创建用户的proxmox凭据。
链中的下一步是构建和添加用于设置不同实验室环境的模板;这可以通过templates命令实现:
|
|
默认列表如下所示,但如果您想要更多,可以从(https://gitlab.com/badsectorlabs/ludus)克隆它们。
|
|
如果您选择添加更多,非常简单:
|
|
或者,如果您只想添加所有,可以使用这个for循环:
|
|
在部署之前,有几个先决条件值得为您的模板考虑(在撰写本文时,2024年12月,需要修复以下内容)。在我的情况下,由于Ludus文档中引用的错误(https://docs.ludus.cloud/docs/troubleshooting/kali),我必须注释掉/opt/ludus/packer/kali/kali.pkr.hcl的配置器部分:
|
|
这样做是防止ansible尝试配置kali主机,这为我们提供了基线kali镜像,意味着在基于模板配置新VM时,它将是最新开箱即用的。
选择构建模板后,Ludus将在后台为您完成此操作:
您可以通过使用ludus templates logs -f命令查看日志进度,或通过ProxMox UI查看:
它将首先创建VM,然后配置它,然后将其转换为模板。部署日志将类似于上述内容。注意红线是我必须手动进入控制台调整我的一个模板的一些东西的地方。如果失败,只需重新运行,我尝试了几次构建模板,因为kali由于多种原因一直失败。所有模板构建完成后,您将在日志中看到类似的消息:
在Ludus上部署SCCM实验室
在Proxmox主机上设置Ludus后,我想部署一些实验室环境,包括:
- SCCM(System Center Configuration Manager)
- 基本Active Directory环境
- Active Directory证书服务(AD CS)
例如,以下是使用Ludus部署SCCM的分步指南以及我接下来为优化设置所做的操作。
步骤1:使用Ludus部署SCCM
要部署SCCM,我遵循了以下步骤:
- 创建新实验室:从Proxmox CLI,确保已导出用户API密钥,运行此命令"ludus ansible collection add synzack.ludus_sccm"
- 配置实验室:创建新的config.yml “nano config.yml”,从https://docs.ludus.cloud/docs/environment-guides/sccm粘贴示例配置。如果您有更多可分配的CPU和RAM资源,则提高这些设置。保存配置。
- 将该配置文件设置为范围的模板:“ludus range config set -f config.yml”
- 部署实验室:使用"ludus range deploy"部署范围
- 检查日志:检查错误日志"ludus range logs"或"ludus range logs -f"
- 等待…..根据您的规格,这可能需要一段时间(所以最好让它做它的事情并信任它)。如果一台主机构建失败,我发现再次运行范围部署可以解决问题,无需更改任何内容。您的体验可能有所不同。
- 如果失败:如果您的硬件稍旧,完成失败很常见。如果是这样,请修改文件夹"/opt/ludus/ansible/range-management/tasks/windows"中的超时。我发现sysprep.yml花了很长时间,在某些情况下,60秒可能不够。提高值并重新构建。
完成后,如果运行ludus range status,您将看到输出中部署状态为SUCCESS!如果出现错误,可以运行ludus range errors,它将打印出失败的内容。我的建议是Google错误,因为有时是简单的事情,如图像不兼容,或其他时候ansible超时失败,它跳过了一个步骤。
此外,对于SCCM实验室 specifically,您可以登录"sccm-sitesrv"服务器,并启动Configuration Manager以双重检查一切是否按预期工作。如果一切顺利,您的ProxMox应该类似于下面的列表:
安装后,我进入并标记了与特定实验室绑定的所有资源,这在上面的屏幕截图中给出了绿点,单击铅笔并给标签命名,这更多是为了生活质量而不是其他。
设置Ludus的最佳后续步骤
随着SCCM运行,以下是我接下来为充分利用Ludus所做的操作:
- 探索更多实验室:Ludus提供的不只是SCCM;我探索了其他实验室,如GOAD用于Active Directory模拟,以扩展我的学习。
- 自动化任务:我研究了在Ludus中使用脚本自动化重复任务,如重置实验室或跨多个VM进行快速更改。我还一直在探索为ludus编写自定义配置文件以进行部署。
- 监控资源:密切关注Proxmox中的CPU、内存和磁盘使用情况帮助我平衡负载并保持一切运行顺畅。
- 备份配置:我设置了定期备份Ludus配置和实验室状态,以确保如果出现问题可以快速恢复。
- 保持一切更新:我定期检查Ludus和Proxmox的更新,以确保我有最新的功能和安全补丁。
通过遵循这些步骤,我能够设置功能正常的SCCM实验室并优化Ludus以满足我的需求。这是一个用于构建和管理实验室环境的伟大工具,如果您正在设置类似的实验室,我建议尝试一下。
最后,第三部分即将到来
对于本系列的第三部分,我将深入探讨使用Docker构建自动化媒体堆栈以及如何最初连接所有内容,我原本打算为此使用proxmox,但后来重新架构了我的集群;我现在只有3个NUC以实验室配置连接,所有三个都运行Ludus,第四个用于媒体消费和自动化。