Скрипт за проверка на използвани IP адреси в Proxmox

Скрипт за проверка на използвани IP адреси в Proxmox

Скрипт за проверка на използвани IP адреси с имената на контейнери и виртуални машини в Proxmox

Този скрипт е предназначен за администратори на Proxmox, които искат да следят използваните IP адреси в техните мрежи. Той помага да се избегнат конфликти с IP адресите, като показва всички използвани IP адреси в зададени мрежи, заедно с имената на съответните контейнери и виртуални машини.

За какво се използва скриптът

Скриптът събира IP адреси от контейнери и виртуални машини, работещи в Proxmox среда. След това, той групира тези IP адреси според мрежите, към които принадлежат. Администраторите могат лесно да видят кои IP адреси са вече заети и кои са свободни. Това е полезно за планиране на мрежови настройки и за избягване на конфликти при ръчно задаване на IP адреси.

Как работи скриптът

Скриптът работи, като извлича IP адресите от всички стартирани контейнери и виртуални машини в Proxmox. Той проверява IP адресите, принадлежащи към две дефинирани мрежи. След като събере всички IP адреси, скриптът ги изписва заедно с имената на съответните контейнери или виртуални машини.

Необходими Стъпки за Използване на Скрипта

  1. Подготовка на Скрипта:
    • Запазете скрипта в текстов файл с име, например check_used_ips_with_names.sh.
    • Направете файла изпълним чрез командата: chmod +x check_used_ips_with_names.sh.
  2. Изпълнение на Скрипта:
    • Стартирайте скрипта с администраторски права, като използвате командата: sudo ./check_used_ips_with_names.sh.
    • Скриптът ще извърши проверка на всички стартирани контейнери и виртуални машини.
  3. Резултати от Скрипта:
    • Скриптът ще изведе списък на всички използвани IP адреси в дефинираните мрежи.
    • Всеки IP адрес ще бъде показан заедно с името на контейнера или виртуалната машина, към която принадлежи.

Използвани IP адреси в мрежа 10.110.110.0/24:

10.110.110.167 - opengist
10.110.110.39 - nextcloud
10.110.110.22 - saitove
10.110.110.20 - pihole
10.110.110.74 - testovi
10.110.110.79 - dockeri
10.110.110.118 - vpn

Използвани IP адреси в мрежа 10.20.20.0/24:

10.20.20.50 - bai-hui
10.20.20.124 - razhod
10.20.20.32 - Paroli
10.20.20.20 - files
10.20.20.100 - html-testove

Проверката на IP адресите е завършена.

Примерен Скрипт

Ето пълният текст на скрипта:

#!/bin/bash

# Мрежи за проверка
network1="10.110.110."
network2="10.20.20."

# Инициализация на масиви за съхранение на използваните IP адреси и имена
declare -A used_ips_network1
declare -A used_ips_network2

# Получаване на всички контейнери (LXC)
containers=$(pct list | awk 'NR>1 {print $1}')

# Получаване на всички виртуални машини (VMs)
vms=$(qm list | awk 'NR>1 {print $1}')

# Функция за събиране на IP адресите
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
}

# Проверка на IP адресите за всички контейнери
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

# Проверка на IP адресите за всички виртуални машини
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

# Извеждане на резултатите
echo "Използвани IP адреси в мрежа ${network1}0/24:"
for ip in "${!used_ips_network1[@]}"; do
    echo "$ip - ${used_ips_network1[$ip]}"
done

echo ""
echo "Използвани IP адреси в мрежа ${network2}0/24:"
for ip in "${!used_ips_network2[@]}"; do
    echo "$ip - ${used_ips_network2[$ip]}"
done

echo ""
echo "Проверката на IP адресите е завършена."

Заключение

Този скрипт е полезен инструмент за администратори на Proxmox. Той позволява лесно управление на IP адреси и предотвратяване на потенциални конфликти в мрежата. Използването му е лесно и не изисква специфични познания по програмиране. Просто го стартирайте и вижте резултатите. Това ще ви помогне да поддържате добре организирана мрежова инфраструктура.

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: