Script to Check Used IP Addresses in Proxmox

Script to Check Used IP Addresses in Proxmox

Managing a virtualized environment efficiently is crucial for any IT infrastructure. Proxmox, an open-source server virtualization environment, is widely used for managing virtual machines (VMs) and containers. One of the common tasks in a Proxmox environment is to monitor and manage the IP addresses assigned to various VMs and containers. Ensuring that IP addresses are efficiently used and avoiding conflicts is essential. This article provides a step-by-step guide on creating and utilizing a script to check used IP addresses in Proxmox.

Understanding the Proxmox Environment

Before diving into the script, it is important to understand the architecture of Proxmox. Proxmox uses KVM for full virtualization and LXC for container-based virtualization. Each VM or container can be assigned one or more IP addresses, which can either be static or dynamically assigned through DHCP.

In a typical Proxmox setup, VMs and containers are connected to a virtual network through virtual bridges. Monitoring the IP addresses within this network is crucial for maintaining order and preventing IP conflicts, especially in larger environments where manual tracking becomes impractical.

Prerequisites

Before you start writing the script, ensure that the following prerequisites are met:

  1. Proxmox Environment: A functioning Proxmox environment with access to the command line.
  2. Basic Linux Knowledge: Understanding basic Linux commands and scripting.
  3. Network Configuration Knowledge: Familiarity with network configuration in a virtualized environment.
  4. Tools: Ensure you have ssh and awk installed, as they will be used in the script.

Script Outline

The script to check used IP addresses in Proxmox will perform the following tasks:

Check for IP Conflicts: Optionally, the script can check for duplicate IPs, indicating potential conflicts.

Gather Information: Collect details about all running VMs and containers.

Extract IP Addresses: Extract IP addresses assigned to each VM and container.

Display Used IP Addresses: Display the IP addresses in a user-friendly format.

Here is the script:

#!/bin/bash
# Networks to check
network1="10.110.110."
network2="10.20.20."
# Initialize arrays to store used IP addresses and names
declare -A used_ips_network1
declare -A used_ips_network2
# Get all containers (LXC)
containers=$(pct list | awk 'NR>1 {print $1}')
# Get all virtual machines (VMs)
vms=$(qm list | awk 'NR>1 {print $1}')
# Function to collect IP addresses
collect_ip() {
    local id=$1
    local name=$2
    local ips=("$@")
    for ip in "${ips[@]:2}"; do
        if [[ "$ip" == $network1* ]]; then
            used_ips_network1["$ip"]="$name"
        elif [[ "$ip" == $network2* ]]; then
            used_ips_network2["$ip"]="$name"
        fi
    done
}
# Check IP addresses for all containers
for ct in $containers; do
    if pct status $ct | grep -q 'status: running'; then
        name=$(pct config $ct | grep -i '^hostname:' | awk '{print $2}')
        ips=$(pct exec $ct -- ip -4 -o addr show scope global | awk '{print $4}' | cut -d/ -f1)
        collect_ip "$ct" "$name" $ips
    fi
done
# Check IP addresses for all virtual machines
for vm in $vms; do
    if qm agent $vm ping &>/dev/null; then
        name=$(qm config $vm | grep -i '^name:' | awk '{print $2}')
        ips=$(qm agent $vm network-get-interfaces | grep -oP '(?<="ip-address":"\K[^"]+')
        collect_ip "$vm" "$name" $ips
    fi
done
# Output the results
echo "Used IP addresses in network ${network1}0/24:"
for ip in "${!used_ips_network1[@]}"; do
    echo "$ip - ${used_ips_network1[$ip]}"
done
echo ""
echo "Used IP addresses in network ${network2}0/24:"
for ip in "${!used_ips_network2[@]}"; do
    echo "$ip - ${used_ips_network2[$ip]}"
done
echo ""
echo "IP address check is complete."

How to Use the Script

To use the script, follow these steps:

  1. Save the Script: Save the script as check_proxmox_ips.sh on your Proxmox server.
  2. Make it Executable: Run chmod +x check_proxmox_ips.sh to make the script executable.
  3. Run the Script: Execute the script using ./check_proxmox_ips.sh.

The script will display the IP addresses currently used by all running VMs and containers. It will also check for any duplicate IPs, helping you prevent or resolve IP conflicts.

Conclusion

Managing IP addresses in a Proxmox environment is a critical task to ensure efficient network utilization and prevent conflicts. The script provided in this article offers a simple yet effective way to check the IP addresses used by VMs and containers in Proxmox. By automating this process, you can save time and reduce the risk of human error, especially in environments with a large number of virtual instances.

Understanding and utilizing this script can greatly enhance your ability to manage and monitor your virtualized network. As your Proxmox environment grows, tools like this script become indispensable in maintaining an organized and conflict-free network infrastructure.

Fedya Serafiev

Fedya Serafiev

Fedya Serafiev owns the website linuxcodelab.eu. He finds satisfaction in helping people solve even the most complex technical problems. His current goal is to write easy-to-follow articles so that such problems do not arise at all.

Thank you for reading the article! If you found the information useful, you can donate using the buttons below: