Files
proxmox/scripts/audit-ip-conflicts-all-hosts.sh

33 lines
1.0 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Audit IP conflicts across all Proxmox hosts
# Outputs: vmid|ip|host
HOSTS="${PROXMOX_HOST_ML110:-192.168.11.10} ${PROXMOX_HOST_R630_01:-192.168.11.11} ${PROXMOX_HOST_R630_02:-192.168.11.12}"
TMPF=$(mktemp)
trap "rm -f $TMPF" EXIT
for host in $HOSTS; do
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@$host "
for vmid in \$(pct list 2>/dev/null | awk 'NR>1{print \$1}'); do
pct config \$vmid 2>/dev/null | grep -oE 'ip=[0-9.]+/[0-9]+' | sed 's|ip=||;s|/.*||' | while read ip; do
echo \"\$vmid|\$ip|$host\"
done
done
" 2>/dev/null >> "$TMPF"
done
echo "=== All VMID|IP|Host ==="
sort -t'|' -k2,2 "$TMPF"
echo ""
echo "=== Duplicate IPs (conflicts) ==="
awk -F'|' '{ips[$2]=ips[$2] ? ips[$2] " + " $1"@"$3 : $1"@"$3; count[$2]++}
END {for (ip in count) if (count[ip]>1) print ip " -> " ips[ip]}' "$TMPF" | sort -V || echo "None found"
echo ""
echo "=== Invalid IPs (.0 or .255) ==="
awk -F'|' '{
split($2,a,".");
if (a[4]=="0" || a[4]=="255") print $1, $2, $3
}' "$TMPF" || echo "None found"