For a long time I had experience with Type-2 Virtualization, also known as Hosted VMs. Using VirtualBox, I would run virtual machines on either my machines running Windows 11 or Linux. However, I would notice a decrease in performance when I ran VMs on either. I learned from a friend about Type-1 Virtualization, and an OS that accomplishes this called Proxmox. With Proxmox, I can run several virtual machines without the system overhead that I get with hosted VMs. I also have the ability to access my Proxmox VMs remotely even outside of my LAN.
Hosting a Proxmox server also allowed me to play around with Windows Server 2025, as I wanted to learn how to use Active Directory and use its DHCP services to lease IP addresses to other machines on my hypervisor. In addition, I used Ansible playbooks to manage my server and practice IaC principles.
Once I got my hands on a spare laptop, I downloaded an instance of Proxmox and installed it using a flash drive. I also got an ISO of two Operating Systems being Windows Server 2022 and Kali Linux. Once I started running the VMs, I wanted to apply some of the concepts that I learned from studying for the CCNA.
After starting up my instance of Windows Server, I installed DHCP services and created a second network bridge and put my Kali Linux instance on that bridge. A Proxmox bridge essentially acts as a Layer 2 Switch in my setup, so having two of them separates my devices by Data Link Layer. I put both network bridges in my Windows server and I set up DHCP services on it. I was able to get it to run, and after setting the scope and authorizing it, my Kali Linux device was able to get an IP address from my Windows Server and it could ping the internet. I downloaded and installed an instance of Ubuntu and tested it there as well, and it received the IP address next in the lease lineup.
By this point I wanted a way to monitor my server remotely without having to log into the Web UI itself. In my volunteer work for setting up networks, one of my tasks was to have our nodes set up with a cloud-init, and in that cloud-init I added a Prometheus-node-exporter package to allow for our servers to extract information. That gave me the idea to install Prometheus and Grafana for monitoring my server.
On one of my host machines, I set up several Docker containers in a docker-compose file. These included images of Prometheus PVE Exporter to pull data from my server via API, Prometheus itself to store data, and Grafana to visualize the data in a readable format. Below is a screenshot of one of my Grafana dashboard that shows my server's metrics. In addition, at the bottom of this page, I have some of my server's metrics in real time queried via PromQL (Prometheus Query Language).
Although my server is running on a laptop, that doesn't mean that I wouldn't run my Proxmox VE on a stronger machine later on. I wanted to practice automate creating and deleting my VMs with Ansible so I can apply it in the future. I started creating a user on Proxmox that I can use whenever I run a playbook. Then I started by making a playbook to make a VM with nothing in it to test if my ansible playbooks could interact with my system. I created 3 more playbooks, a cloud-init template builder, another to clone from the cloud-init template, and finally a teardown playbook to delete VMs that I no longer need.
Rest to be added later...
When I first tested whether my Kali Linux machine could get an IP address after setting up DHCP on my Windows server, it could not get an IP address. I looked on my Windows instance to find out why it wasn't leasing addresses until I learned that I needed to authorize my server. By default the DHCP server is not authorized until I manually do so in Active Directory. I simply turned it on and it started leasing IPs to my Proxmox VMs.
To be added later...
Pulled live from my server using Prometheus.