打造终极家庭实验室NUC集群:Ludus自动化部署与SCCM环境搭建

本文详细介绍了在Proxmox平台上部署Ludus实验室自动化工具的全过程,包括硬件要求、安装步骤、模板配置以及SCCM实验室环境的部署,为Windows企业环境测试提供快速部署方案。

(重新)构建终极家庭实验室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创建一个专用用户,然后运行一行命令:

1
curl -s https://ludus.cloud/install | bash

install.sh脚本将安装ludus客户端,可选shell补全,然后提示安装服务器。按照交互式安装程序操作。如果您不确定任何选项,只需接受默认值。安装程序将启动并重新启动机器。

一旦您选择是,安装程序将自动检测设置如下:

每个您按回车键的设置将构建服务器设置配置,您将在右侧看到它填充:

一旦您完成并构建了配置,Ludus最终会问您是否确定要安装它,准备好?

然后安装程序启动大量Ansible,自动将Ludus客户端和服务器安装到主机:

重新启动后,安装将自动继续。要监视其进度,ssh进入机器,提升到root,并运行ludus-install-status。

Ludus不允许您执行任何操作,除非创建标准Ludus用户。记下LUDUS_API_KEY:

当您运行安装状态命令时,上面的屏幕表示安装成功。下一步是创建一个Ludus用户以委托安装并防止您使用root帐户。网站建议在命令中设置API密钥,但我发现将其导出为环境变量效果更好:

1
export LUDUS_API_KEY='YOURKEYHERE'

创建管理员用户非常简单,如下命令所示:注意生成可能需要一分钟,但一旦生成,您将获得用户的新API密钥。

1
ludus user add --name "Zephr Fish" --userid zero --admin --url https://127.0.0.1:8081

用户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凭据。

链中的下一步是您希望为您想要设置的不同实验室环境构建和添加模板;这可以通过模板命令实现:

1
ludus templates list

默认列表如下所示,但如果您想要更多,可以从(https://gitlab.com/badsectorlabs/ludus)克隆它们。

1
2
3
4
5
6
7
8
9
+------------------------------------+-------+
|              TEMPLATE              | BUILT |
+------------------------------------+-------+
| debian-11-x64-server-template      | FALSE |
| debian-12-x64-server-template      | FALSE |
| kali-x64-desktop-template          | FALSE |
| win11-22h2-x64-enterprise-template | FALSE |
| win2022-server-x64-template        | FALSE |
+------------------------------------+-------+

如果您选择添加更多,很简单:

1
2
3
git clone https://gitlab.com/badsectorlabs/ludus
cd ludus/templates
ludus templates add -d <template name>

或者,如果您只想添加所有,您可以使用这个for循环:

1
for x in $(ls); do ludus templates add -d $x; done

在部署之前,有几个先决条件值得为您的模板考虑(在撰写本文时2024年12月需要修复以下内容)。在我的情况下,由于Ludus文档中引用的错误(https://docs.ludus.cloud/docs/troubleshooting/kali),我必须注释掉/opt/ludus/packer/kali/kali.pkr.hcl的provisioner部分:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
build {
  sources = ["source.proxmox-iso.kali"]

//  provisioner "ansible" {
//    user               = "${var.ssh_username}"
//    use_proxy          = false
//    extra_arguments    = ["--extra-vars", "{ansible_python_interpreter: /usr/bin/python3, ansible_password: ${var.ssh_password}, ansible_sudo_pass: ${var.ssh_password}}"]
//    playbook_file      = "./kali.yml"
//    ansible_env_vars   = ["ANSIBLE_HOME=${var.ansible_home}", "ANSIBLE_LOCAL_TEMP=${var.ansible_home}/tmp", "ANSIBLE_PERSISTENT_CONTROL_PATH_DIR=${var.ansible_home}/pc", "ANSIBLE_SSH_CONTROL_PATH_DIR=${var.ansible_home}/cp"]
//    skip_version_check = true
//  }

}

这做的是防止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,我遵循了这些步骤:

  1. 创建新实验室:从Proxmox CLI,确保您已导出用户API密钥,运行此命令"ludus ansible collection add synzack.ludus_sccm"
  2. 配置实验室:创建新的config.yml “nano config.yml”,从https://docs.ludus.cloud/docs/environment-guides/sccm粘贴示例配置。如果您有更多资源可分配在CPU和RAM方面,则提高这些设置。保存配置。
  3. 将该配置文件设置为范围的模板"ludus range config set -f config.yml"
  4. 部署实验室:使用"ludus range deploy"部署范围
  5. 检查日志:检查错误"ludus range logs"或"ludus range logs -f"
  6. 等待…..根据您的规格,这可能需要一段时间(所以最好让它做它的事情并信任它)。如果一台主机构建失败,我发现再次运行范围部署修复了问题,无需更改任何内容。您的体验可能有所不同。
  7. 如果失败:如果您的硬件稍旧,完成失败是常见的。如果是这样,修改文件夹"/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,第四个用于媒体消费和自动化。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计