33 lines
992 B
Bash
33 lines
992 B
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Audit IP conflicts across all Proxmox hosts
|
||
|
|
# Outputs: vmid|ip|host
|
||
|
|
|
||
|
|
HOSTS="192.168.11.10 192.168.11.11 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"
|