Files
proxmox/scripts/fix-reserved-ip-conflicts.sh
defiQUG cb47cce074 Complete markdown files cleanup and organization
- Organized 252 files across project
- Root directory: 187 → 2 files (98.9% reduction)
- Moved configuration guides to docs/04-configuration/
- Moved troubleshooting guides to docs/09-troubleshooting/
- Moved quick start guides to docs/01-getting-started/
- Moved reports to reports/ directory
- Archived temporary files
- Generated comprehensive reports and documentation
- Created maintenance scripts and guides

All files organized according to established standards.
2026-01-06 01:46:25 -08:00

158 lines
5.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Fix VMIDs using reserved IP range (192.168.11.10-192.168.11.25)
# Changes IPs to available addresses outside the reserved range
# Usage: ./scripts/fix-reserved-ip-conflicts.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# Reserved IP range for physical servers
RESERVED_START=10
RESERVED_END=25
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
echo ""
log_info "═══════════════════════════════════════════════════════════"
log_info " FIXING RESERVED IP CONFLICTS"
log_info " Reserved Range: 192.168.11.10 - 192.168.11.25"
log_info "═══════════════════════════════════════════════════════════"
echo ""
# VMIDs that need IP changes
# Format: node:vmid:hostname:current_ip:new_ip
declare -a FIXES=(
"r630-02:105:nginxproxymanager:192.168.11.21:192.168.11.26"
"r630-02:130:monitoring-1:192.168.11.22:192.168.11.27"
)
# Node IPs
declare -A NODE_IPS=(
["ml110"]="192.168.11.10"
["r630-01"]="192.168.11.11"
["r630-02"]="192.168.11.12"
)
# Node passwords
declare -A NODE_PASSWORDS=(
["ml110"]="L@kers2010"
["r630-01"]="password"
["r630-02"]="password"
)
log_info "Found ${#FIXES[@]} VMID(s) to fix:"
echo ""
for fix in "${FIXES[@]}"; do
IFS=':' read -r node vmid hostname current_ip new_ip <<< "$fix"
log_info " VMID $vmid ($hostname) on $node: $current_ip$new_ip"
done
echo ""
read -p "Continue with IP changes? (y/N): " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log_info "Cancelled"
exit 0
fi
echo ""
# Apply fixes
for fix in "${FIXES[@]}"; do
IFS=':' read -r node vmid hostname current_ip new_ip <<< "$fix"
node_ip="${NODE_IPS[$node]}"
log_info "Fixing VMID $vmid ($hostname) on $node..."
# Get current network configuration
current_config=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${node_ip} \
"pct config $vmid 2>/dev/null | grep '^net0:'" || echo "")
if [[ -z "$current_config" ]]; then
log_error " Cannot read configuration for VMID $vmid"
continue
fi
# Extract MAC address and other settings
mac=$(echo "$current_config" | grep -oP 'hwaddr=\K[^,]+' || echo "")
bridge=$(echo "$current_config" | grep -oP 'bridge=\K[^,]+' || echo "vmbr0")
gw=$(echo "$current_config" | grep -oP 'gw=\K[^,]+' || echo "192.168.11.1")
type=$(echo "$current_config" | grep -oP 'type=\K[^,]+' || echo "veth")
if [[ -z "$mac" ]]; then
log_error " Cannot extract MAC address"
continue
fi
# Stop container
log_info " Stopping container..."
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${node_ip} \
"pct stop $vmid 2>/dev/null || true"
sleep 2
# Change IP address
log_info " Changing IP from $current_ip to $new_ip..."
new_net_config="name=eth0,bridge=${bridge},gw=${gw},ip=${new_ip}/24,hwaddr=${mac},type=${type}"
if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${node_ip} \
"pct set $vmid -net0 \"$new_net_config\"" 2>&1; then
log_success " IP address changed successfully"
else
log_error " Failed to change IP address"
continue
fi
# Start container
log_info " Starting container..."
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${node_ip} \
"pct start $vmid" || {
log_warn " Container may need manual start"
}
sleep 3
# Verify new IP
log_info " Verifying new IP..."
new_ip_check=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${node_ip} \
"pct config $vmid 2>/dev/null | grep -oP 'ip=\\K[^,]+' | head -1" || echo "")
if [[ "$new_ip_check" == "${new_ip}/24" ]]; then
log_success " ✅ Verified: IP is now $new_ip"
else
log_warn " ⚠️ IP verification: Expected ${new_ip}/24, got $new_ip_check"
fi
echo ""
done
log_success "═══════════════════════════════════════════════════════════"
log_success " IP CONFLICTS FIXED"
log_success "═══════════════════════════════════════════════════════════"
echo ""
log_info "Summary of changes:"
for fix in "${FIXES[@]}"; do
IFS=':' read -r node vmid hostname current_ip new_ip <<< "$fix"
log_info " ✅ VMID $vmid ($hostname): $current_ip$new_ip"
done
echo ""
log_info "Next steps:"
log_info " 1. Update any configuration files that reference the old IPs"
log_info " 2. Update DNS records if needed"
log_info " 3. Update firewall rules if needed"
log_info " 4. Test services to ensure they work with new IPs"
echo ""