<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Homelab on My Blogs</title>
    <link>/tags/homelab/</link>
    <description>Recent content in Homelab on My Blogs</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 10 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/tags/homelab/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Building a Hybrid Cloud Monitoring Stack with Zabbix, ZeroTier, and Azure</title>
      <link>/posts/zabbix-homelab-monitoring/</link>
      <pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/zabbix-homelab-monitoring/</guid>
      <description>&lt;h2 id=&#34;-problem&#34;&gt;🧩 Problem&lt;/h2&gt;
&lt;p&gt;I wanted a centralized monitoring platform for my homelab that could monitor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On-premises VMware ESXi hosts&lt;/li&gt;
&lt;li&gt;Linux virtual machines&lt;/li&gt;
&lt;li&gt;Windows systems&lt;/li&gt;
&lt;li&gt;HPE iLO hardware management&lt;/li&gt;
&lt;li&gt;Cloud-hosted workloads&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The challenge was that most of my infrastructure lives behind NAT at home, and I did not want to expose services publicly or configure complex port forwarding.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-solution-overview&#34;&gt;🛠️ Solution Overview&lt;/h2&gt;
&lt;p&gt;I built a &lt;strong&gt;hybrid monitoring architecture&lt;/strong&gt; using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zabbix 7.0 LTS&lt;/strong&gt; hosted in Azure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ZeroTier&lt;/strong&gt; for secure private connectivity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zabbix Proxy&lt;/strong&gt; running locally in my homelab&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VMware API monitoring&lt;/strong&gt; for ESXi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SNMP monitoring&lt;/strong&gt; for HPE iLO&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This design allows cloud-hosted monitoring while keeping home infrastructure private.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AdGuard setup for blocking ads</title>
      <link>/posts/adguard-setup-for-blocking-ads/</link>
      <pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate>
      <guid>/posts/adguard-setup-for-blocking-ads/</guid>
      <description>&lt;p&gt;Network-wide ad blocking using AdGuard Home deployed as a VM on ESXi. Blocks ads, trackers, and malicious domains at the DNS level — before they reach any device on the network.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-environment&#34;&gt;🖥️ Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hypervisor:&lt;/strong&gt; VMware ESXi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VM OS:&lt;/strong&gt; Ubuntu Server 24.04 LTS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VM Specs:&lt;/strong&gt; 3 vCPU, 4 GB RAM, 60GB disk&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AdGuard Home Version:&lt;/strong&gt; Latest stable&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-step-1-create-the-vm-on-esxi&#34;&gt;🚀 Step 1: Create the VM on ESXi&lt;/h2&gt;
&lt;p&gt;Created a new VM in the ESXi web UI with the following settings:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing ESXi 8 on Dell OptiPlex (Fixing Pink Screen of Death - CPU Mismatch)</title>
      <link>/posts/setup-esxi-8-in-an-optiplex/</link>
      <pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate>
      <guid>/posts/setup-esxi-8-in-an-optiplex/</guid>
      <description>&lt;h2 id=&#34;-problem&#34;&gt;🧩 Problem&lt;/h2&gt;
&lt;p&gt;I attempted to install ESXi 8 on my Dell OptiPlex homelab machine, but during boot, I encountered a &lt;strong&gt;Pink Screen of Death (PSOD)&lt;/strong&gt; with errors like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fatal CPU mismatch on feature&lt;/li&gt;
&lt;li&gt;HW feature incompatibility detected&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;image-description&#34;&gt;This prevented ESXi from installing or booting successfully.
!&lt;img alt=&#34;Image Description&#34; loading=&#34;lazy&#34; src=&#34;/images/Pasted%20image%2020260320194350.png&#34;&gt;&lt;/h2&gt;
&lt;h2 id=&#34;-root-cause&#34;&gt;🛠️ Root Cause&lt;/h2&gt;
&lt;p&gt;The issue is caused by modern Intel CPUs (12th Gen and newer) using a &lt;strong&gt;hybrid architecture&lt;/strong&gt; with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Performance cores (P-cores)&lt;/li&gt;
&lt;li&gt;Efficiency cores (E-cores)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ESXi expects uniform CPU cores, so it crashes when it detects different core types.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up Cloudflare DDNS on Ubuntu for Dynamic Home IP</title>
      <link>/posts/setting-up-cloudflare-ddns-on-ubuntu-for-dynamic-home-ip/</link>
      <pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate>
      <guid>/posts/setting-up-cloudflare-ddns-on-ubuntu-for-dynamic-home-ip/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;title: Setting up Cloudflare DDNS on Ubuntu using cloudflare-ddns-updater
date: 2026-03-20
draft: false
tags:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cloudflare&lt;/li&gt;
&lt;li&gt;ddns&lt;/li&gt;
&lt;li&gt;homelab&lt;/li&gt;
&lt;li&gt;ubuntu&lt;/li&gt;
&lt;li&gt;automation&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-problem&#34;&gt;🧩 Problem&lt;/h2&gt;
&lt;p&gt;My home network uses a dynamic public IP address, which changes periodically. This breaks remote access to my self-hosted services.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-solution-overview&#34;&gt;🛠️ Solution Overview&lt;/h2&gt;
&lt;p&gt;I used an open-source tool (cloudflare-ddns-updater) to automatically update my Cloudflare DNS records whenever my public IP changes.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-environment&#34;&gt;🔧 Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu Server (DDNS host)&lt;/li&gt;
&lt;li&gt;Cloudflare domain&lt;/li&gt;
&lt;li&gt;API Token with DNS edit permissions&lt;/li&gt;
&lt;li&gt;Git installed&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-step-1-create-cloudflare-api-token&#34;&gt;🚀 Step 1: Create Cloudflare API Token&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Log in to Cloudflare&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;My Profile → API Tokens&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Create a token with:
&lt;ul&gt;
&lt;li&gt;Zone → DNS → Edit&lt;/li&gt;
&lt;li&gt;Zone Resources → Specific Zone (your domain)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Save the token securely.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up Wazuh SIEM with SSH Brute Force Attack Detection and Mitigation</title>
      <link>/posts/wazuh-siem-&#43;-ssh-attack-mitigation/</link>
      <pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate>
      <guid>/posts/wazuh-siem-&#43;-ssh-attack-mitigation/</guid>
      <description>&lt;h2 id=&#34;-problem&#34;&gt;🧩 Problem&lt;/h2&gt;
&lt;p&gt;I wanted to simulate a real-world security environment in my homelab where I could detect and respond to SSH brute-force attacks and at the same time monitor my devices&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-solution-overview&#34;&gt;🛠️ Solution Overview&lt;/h2&gt;
&lt;p&gt;I deployed Wazuh as a SIEM solution and configured it to detect SSH login attempts and automatically block malicious IPs.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-environment&#34;&gt;🔧 Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu Server (Wazuh Manager)&lt;/li&gt;
&lt;li&gt;Linux target machine (with SSH enabled)&lt;/li&gt;
&lt;li&gt;Public exposure via port forwarding&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-step-1-install-wazuh&#34;&gt;🚀 Step 1: Install Wazuh&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -sO https://packages.wazuh.com/4.14/wazuh-install.sh &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo bash ./wazuh-install.sh -a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After installation, accessed dashboard:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
