# Setting up the Proxmox Nodes

On the first page of this chapter, we defined our requirements and made some key decisions. Now, let’s set up the Proxmox nodes in VirtualBox and install Proxmox VE on them.

[![proxmox-logo](https://wiki.zn80.net/uploads/images/gallery/2026-03/scaled-1680-/grafik.png)](https://wiki.zn80.net/uploads/images/gallery/2026-03/scaled-1680-/grafik.png)

To ensure cluster stability and prevent traffic saturation, your test environment requires a minimum of three separate network interfaces:

- **Management Interface:**<span style="white-space: pre-wrap;"> For host access and configuration.</span>
- **Cluster Communication (Heartbeat):**<span style="white-space: pre-wrap;"> Isolated traffic for node health and HA voting.</span>
- **VM Migration &amp; Storage Replication:**<span style="white-space: pre-wrap;"> High-bandwidth link for data synchronization.</span>

> **Note:**<span style="white-space: pre-wrap;"> While dedicating a network segment for NAS storage is a best practice in production, it is excluded from the scope of this virtualized test exercise.</span>

## Creating the Master Virtual Machine (Hardware Mode)

<span style="white-space: pre-wrap;">To avoid missing critical settings or having to restart the process, it is recommended to build a single VirtualBox Virtual Machine (VBVM) to act as a template. You can name this master image </span>`<span class="editor-theme-code">proxtpl</span>`<span style="white-space: pre-wrap;"> so that it remains at the bottom of your VM list. </span>**Ensure that you never actually start the master image; it must remain powered off.**

- **Name:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">proxtpl</span>`
- **Type:**<span style="white-space: pre-wrap;"> Linux, Debian (64-bit)</span>
- **RAM:**<span style="white-space: pre-wrap;"> 2 GB minimum (4 GB or 6 GB is recommended if your host hardware allows).</span>
- **Storage (SATA0):**<span style="white-space: pre-wrap;"> Create a 32 GB boot drive for the Proxmox installation.</span>
- **Storage (SATA1 &amp; SATA2):**<span style="white-space: pre-wrap;"> Create two 32 GB dynamically allocated disks; these will be used for the ZFS storage pool. You may use 64 GB if you have sufficient space.</span>
- **Boot Order:**<span style="white-space: pre-wrap;"> Adjust the order to set </span>**Hard Disk**<span style="white-space: pre-wrap;"> first and </span>**Optical**<span style="white-space: pre-wrap;"> second.</span>
- **Optical Drive:**<span style="white-space: pre-wrap;"> Mount the Proxmox ISO.</span>
- **Network Adapters:**<span style="white-space: pre-wrap;"> Attach 3 adapters:</span>
    - **nic0:**<span style="white-space: pre-wrap;"> BRIDGED (Management interface)</span>
    - **nic1:**<span style="white-space: pre-wrap;"> HOST-ONLY (Cluster interface / Core sync) — </span>**Disable DHCP**
    - **nic2:**<span style="white-space: pre-wrap;"> HOST-ONLY (Replication / Migration interface) — </span>**Disable DHCP**

Once configured, your setup should look like this:

[![{5D424EF4-3EE5-4FC9-81CC-4CE2B4252D91}.png](https://wiki.zn80.net/uploads/images/gallery/2026-03/scaled-1680-/5d424ef4-3ee5-4fc9-81cc-4ce2b4252d91.png)](https://wiki.zn80.net/uploads/images/gallery/2026-03/5d424ef4-3ee5-4fc9-81cc-4ce2b4252d91.png)

<span style="white-space: pre-wrap;">Once the master is configured, create three clones and name them </span>`<span class="editor-theme-code">prox01</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">prox02</span>`<span style="white-space: pre-wrap;">, and </span>`<span class="editor-theme-code">prox03</span>`.

## Installing Proxmox VE (Software Mode)

With your three clones created, start them up to begin the installation.

- **Ignore KVM Virtualization errors:**<span style="white-space: pre-wrap;"> You will likely see an error stating that KVM Virtualization is not detected. This is expected, as VirtualBox may not pass VT-x/AMD-V instructions through to the guest. This is not an issue for this lab, as </span>**the test cluster will run Linux Containers (LXC)**<span style="white-space: pre-wrap;"> instead of full VMs.</span>
- **Verify hostnames:**<span style="white-space: pre-wrap;"> Ensure you correctly name each node (e.g., </span>`<span class="editor-theme-code">prox01.local</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">prox02.local</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">prox03.local</span>`) during setup. Renaming a node after a cluster is established is a complex and difficult procedure.
- **Select the 32GB boot drive**<span style="white-space: pre-wrap;"> for the installation target.</span>
- **Configure sequential IP addresses:**<span style="white-space: pre-wrap;"> Base these on the hostnames to simplify management (e.g., </span>`<span class="editor-theme-code">prox01</span>`<span style="white-space: pre-wrap;"> – 192.168.10.201, </span>`<span class="editor-theme-code">prox02</span>`<span style="white-space: pre-wrap;"> – 192.168.10.202, </span>`<span class="editor-theme-code">prox03</span>`<span style="white-space: pre-wrap;"> – 192.168.10.203).</span>
- **Network Settings:**<span style="white-space: pre-wrap;"> Set the Netmask to </span>`<span class="editor-theme-code">255.255.255.0</span>`<span style="white-space: pre-wrap;"> or use CIDR notation (e.g., </span>`<span class="editor-theme-code">192.168.10.201/24</span>`).
- **Gateway:**<span style="white-space: pre-wrap;"> Set this to your network's gateway, most likely </span>`<span class="editor-theme-code">192.168.10.1</span>`.
- **DNS Server:**<span style="white-space: pre-wrap;"> Set this to your local DNS configuration, also likely </span>`<span class="editor-theme-code">192.168.10.1</span>`.
- **Finalize:**<span style="white-space: pre-wrap;"> After installation, shut down the hosts and </span>**reboot them in headless mode**. This is where the boot order change from earlier comes in handy.

[![proxmox installation network settings](https://wiki.zn80.net/uploads/images/gallery/2026-03/scaled-1680-/dc80617e-4ef6-4a60-a2ef-294b42277024.png)](https://wiki.zn80.net/uploads/images/gallery/2026-03/scaled-1680-/dc80617e-4ef6-4a60-a2ef-294b42277024.png)

<details id="bkmrk-unfold-to-see-predef"><summary>Unfold to see predefined IP Configuration</summary>

<span style="white-space: pre-wrap;">Remember the IP Configuration from the </span>[Overview-Page](https://wiki.zn80.net/books/proxmox-ve/page/overview#bkmrk-network-configuratio):

{{@387#bkmrk-node-1%3A-nic0-192.168}}

</details><span style="white-space: pre-wrap;">After the reboot, access the web interface on </span>**port 8006**<span style="white-space: pre-wrap;"> (HTTPS). You will likely be prompted to accept a self-signed certificate. Once you accept the security risk, you should see the Proxmox dashboard.</span>

[![proxmox web interface after fresh installation](https://wiki.zn80.net/uploads/images/gallery/2026-03/scaled-1680-/82bed3a1-957c-4291-bde7-2df1a56000ae.png)](https://wiki.zn80.net/uploads/images/gallery/2026-03/82bed3a1-957c-4291-bde7-2df1a56000ae.png)

## Post-Installation

<span style="white-space: pre-wrap;">Once your Proxmox nodes have successfully booted, there are several essential post-installation tasks to complete, such as managing repositories and removing subscription warnings. The most efficient way to handle this is by using the </span>[Proxmox VE Community Post-Install Script](https://community-scripts.org/scripts/post-pve-install). This interactive script automates the removal of the "No Valid Subscription" nag-screen, configures the correct non-subscription repositories, and optimizes system settings.

```
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/post-pve-install.sh)"
```

These are my recommended choices:

- disable pve-enterprise repository
- disable ceph enterprise repository
- enable/keep pve-no-subscription repository
- select NO to the pve-test repository
- select YES to disable the subscription nag
- select NO when asked to disable high availability
- select NO when asked to update (we will set up the ZFS Storage first)
- select NO when asked to reboot (we will set up the ZFS Storage first)

### Install on an Air-Gapped environment

<span style="white-space: pre-wrap;">For an </span>**air-gapped (offline) environment**, the standard script cannot reach external Proxmox servers. To resolve this, you can host a local version of the script within your network.

### 1. Host the Script Locally

Download the script to a machine that has network access to your Proxmox nodes. Navigate to the folder containing the script and start a temporary web server using Python:

```
# Start a local web server on port 8000
python3 -m http.server 8000
```

### 2. Execute on the Proxmox Node

Log into your Proxmox node's console and run the following command to pull and execute the script from your local server.

> **Note:**<span style="white-space: pre-wrap;"> Replace </span>`<span class="editor-theme-code">192.168.0.20</span>`<span style="white-space: pre-wrap;"> with the actual IP address of the machine running the Python server.</span>

```
bash -c "$(curl -L http://192.168.0.10:8000/post-pve-install.sh)"
```

This method allows you to maintain a consistent configuration across all nodes in your cluster without requiring direct internet access for each individual machine.

## Setting up ZFS Storage

## Updating and final reboot

## About the Network Interface Design

<span style="white-space: pre-wrap;">A successful Proxmox cluster requires careful network segregation to prevent traffic saturation. At a minimum, you will need </span>**three separate network interfaces**<span style="white-space: pre-wrap;"> for your VirtualBox test cluster:</span>

1. **Management Interface:**<span style="white-space: pre-wrap;"> This connects to your internal network and serves as the primary way to access and manage the Proxmox hosts.</span>
2. **Cluster Communication Heartbeat:**<span style="white-space: pre-wrap;"> This interface acts as the lifeline for the Proxmox hosts to communicate. It </span>**must be placed on its own isolated network segment**<span style="white-space: pre-wrap;"> (or physically isolated switch) because constant cluster "chatter" and High Availability (HA) voting can easily overwhelm a shared network link.</span>
3. **VM Migration &amp; Storage Replication:**<span style="white-space: pre-wrap;"> A dedicated interface is needed for migrating machines and handling Storage Replication, which copies data across nodes every 15 minutes. Combining this heavy file synchronization traffic with standard cluster communication can quickly saturate a single network connection, potentially leading to false-positive node failures.</span>