I
Let’s get that Pi-hole DHCP reservation syncing set up! I’ll walk you through creating a sync script to keep the DHCP reservations (and any other Pi-hole configurations) identical between your Proxmox VM and Raspberry Pi 4. Here’s how we’ll do it!
✅ Step 1: Set up SSH key-based authentication
To allow the Raspberry Pi to pull the DHCP config from the Proxmox VM without a password:
👉 On the Raspberry Pi 4, generate an SSH key (if you haven’t already):
ssh-keygen -t rsa -b 4096 -C "pi-hole-sync"
- Press Enter to save it to the default location (
~/.ssh/id_rsa). - No passphrase is needed for this.
👉 Copy the key to your Proxmox Pi-hole VM:
ssh-copy-id <username>@<proxmox_vm_ip>
- This allows the Raspberry Pi to SSH into the Proxmox VM without a password.
✅ Step 2: Create the sync script
👉 On the Raspberry Pi, create a script (e.g., pi-hole-sync.sh):
#!/bin/bash
# Define variables
PRIMARY_PIHOLE="<proxmox_vm_ip>"
PIHOLE_CONFIG_DIR="/etc/dnsmasq.d"
LOCAL_BACKUP_DIR="/home/pi/pihole_backup"
# Create backup directory if it doesn't exist
mkdir -p $LOCAL_BACKUP_DIR
# Sync DHCP reservations and Pi-hole config files
rsync -avz --delete $PRIMARY_PIHOLE:$PIHOLE_CONFIG_DIR/ $LOCAL_BACKUP_DIR/
rsync -avz --delete $LOCAL_BACKUP_DIR/ $PIHOLE_CONFIG_DIR/
# Restart Pi-hole to apply changes
pihole restartdns
👉 Make the script executable:
chmod +x pi-hole-sync.sh
✅ Step 3: Schedule automatic syncing with cron
👉 Open the crontab on the Raspberry Pi:
crontab -e
👉 Add a cron job to sync every 5 minutes (or whatever interval you prefer):
*/5 * * * * /path/to/pi-hole-sync.sh
✅ Step 4: Test the setup
👉 Run the sync script manually to confirm it works:
./pi-hole-sync.sh
👉 Check the DHCP reservations on the Raspberry Pi Pi-hole to ensure they match the Proxmox VM.
✅ Step 5: DHCP failover
👉 Now that both Pi-hole instances have the same DHCP reservations:
- Set the Proxmox Pi-hole as the primary DHCP server.
- Keep the Raspberry Pi Pi-hole DHCP disabled by default.
- Use a failover script (as mentioned before) to detect when the primary goes down and enable DHCP on the Pi dynamically.
✨ Final result:
- DHCP reservations stay synced automatically.
- No more IP conflicts or lost reservations during a failover!
- Your network stays resilient even if the Proxmox node goes down.
👉 Let me know if you’d like to add monitoring or notifications to this — we can polish this home lab setup to perfection! 🚀
Failover Script
Let’s set that up! I’ll give you a failover script that’ll:
✅ Periodically check if the primary Pi-hole VM is online.
✅ Enable DHCP on the Raspberry Pi if the primary goes down.
✅ Disable DHCP on the Raspberry Pi when the primary comes back online.
✨ Step 1: Create the failover script
👉 On the Raspberry Pi, create a new file:
nano /home/pi/dhcp-failover.sh
👉 Add the following code:
#!/bin/bash
# Primary Pi-hole VM IP address
PRIMARY_PIHOLE_IP="<proxmox_vm_ip>"
# Check if the primary Pi-hole is online
if ping -c 3 $PRIMARY_PIHOLE_IP &> /dev/null; then
echo "$(date) - Primary Pi-hole is up."
# Check if DHCP is running on the Pi - if so, disable it
if pihole-FTL dhcp-discover | grep -q "Pi-hole DHCP server: active"; then
echo "$(date) - Disabling DHCP on the Raspberry Pi (primary is up)."
pihole disable-dhcp
fi
else
echo "$(date) - Primary Pi-hole is DOWN."
# Check if DHCP is running on the Pi - if not, enable it
if ! pihole-FTL dhcp-discover | grep -q "Pi-hole DHCP server: active"; then
echo "$(date) - Enabling DHCP on the Raspberry Pi (primary is down)."
pihole enable-dhcp
fi
fi
✅ This script:
- Pings the Proxmox Pi-hole VM.
- Enables DHCP on the Pi-hole (Raspberry Pi) if the VM is unreachable.
- Disables DHCP on the Pi-hole (Raspberry Pi) when the VM is back online.
👉 Save and exit the file (CTRL + X → Y → Enter).
✨ Step 2: Make the script executable
chmod +x /home/pi/dhcp-failover.sh
✨ Step 3: Set up a cron job for periodic checking
👉 Open the crontab:
crontab -e
👉 Add this line to check every 5 minutes:
*/5 * * * * /home/pi/dhcp-failover.sh >> /var/log/dhcp-failover.log 2>&1
✅ This logs the DHCP failover status to /var/log/dhcp-failover.log.
✨ Step 4: Test the failover
👉 Run the script manually to verify it works:
/home/pi/dhcp-failover.sh
👉 Then, simulate a failure by shutting down the Proxmox Pi-hole VM and checking if the Raspberry Pi takes over DHCP.
✅ Final result:
- Primary Pi-hole VM on Proxmox runs DHCP under normal conditions.
- Secondary Pi-hole (Raspberry Pi) automatically enables DHCP if the primary goes offline.
- DHCP is disabled again when the primary comes back online — no IP conflicts, just smooth failover!
👉 Let me know if you want to add email alerts or system monitoring to this! 🚀