Files
explorer-monorepo/scripts/fix-ip-conflict-10234.sh

167 lines
6.4 KiB
Bash
Executable File

#!/bin/bash
# Fix IP Conflict: Reassign VMID 10234 from 192.168.11.167 to 192.168.11.168
# This resolves the conflict with VMID 10233 (npmplus)
set -euo pipefail
CONFLICT_VMID="10234"
CONFLICT_NODE="r630-02"
OLD_IP="192.168.11.167"
NEW_IP="192.168.11.168"
GATEWAY="192.168.11.1"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
echo "=========================================="
echo "Fix IP Conflict: VMID 10234"
echo "=========================================="
echo ""
echo "Current conflict:"
echo " - VMID 10233 (npmplus) on r630-01: ${OLD_IP}"
echo " - VMID 10234 (npmplus-secondary) on r630-02: ${OLD_IP}"
echo ""
echo "Resolution:"
echo " - VMID 10233: Keep ${OLD_IP}"
echo " - VMID 10234: Reassign to ${NEW_IP}"
echo ""
# Step 1: Verify current configuration
echo -e "${BLUE}Step 1: Verifying current configuration...${NC}"
CURRENT_CONFIG=$(ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@192.168.11.10 \
"ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@${CONFLICT_NODE} \
'pct config ${CONFLICT_VMID} | grep net0'" 2>&1)
echo "Current config: ${CURRENT_CONFIG}"
if ! echo "$CURRENT_CONFIG" | grep -q "ip=${OLD_IP}"; then
echo -e "${YELLOW}⚠️ VMID ${CONFLICT_VMID} is not using ${OLD_IP}${NC}"
echo "Current IP: $(echo "$CURRENT_CONFIG" | grep -oE 'ip=[0-9.]+' | cut -d= -f2)"
read -p "Continue anyway? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Aborted."
exit 1
fi
fi
# Step 2: Check if new IP is available
echo ""
echo -e "${BLUE}Step 2: Checking if ${NEW_IP} is available...${NC}"
IP_IN_USE=$(ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@192.168.11.10 \
"for node in r630-01 r630-02; do ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@\$node 'for vm in \$(pct list 2>/dev/null | tail -n +2 | awk \"{print \\\$1}\"); do pct config \$vm 2>/dev/null | grep -q \"ip=${NEW_IP}\" && echo \"\$node:VMID \$vm\" || true; done' 2>&1; done" 2>&1)
if [ -n "$IP_IN_USE" ]; then
echo -e "${RED}${NEW_IP} is already in use:${NC}"
echo "$IP_IN_USE"
echo ""
read -p "Choose different IP (or press Enter to abort): " NEW_IP
if [ -z "$NEW_IP" ]; then
echo "Aborted."
exit 1
fi
echo "Using ${NEW_IP} instead"
fi
# Step 3: Stop container
echo ""
echo -e "${BLUE}Step 3: Stopping container...${NC}"
ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@192.168.11.10 \
"ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@${CONFLICT_NODE} \
'pct shutdown ${CONFLICT_VMID} && sleep 3'" 2>&1
# Step 4: Get current MAC address
echo ""
echo -e "${BLUE}Step 4: Getting current MAC address...${NC}"
CURRENT_MAC=$(echo "$CURRENT_CONFIG" | grep -oE 'hwaddr=[^,]+' | cut -d= -f2)
echo "Current MAC: ${CURRENT_MAC}"
# Step 5: Update IP address
echo ""
echo -e "${BLUE}Step 5: Updating IP address to ${NEW_IP}...${NC}"
ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@192.168.11.10 \
"ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@${CONFLICT_NODE} \
'pct set ${CONFLICT_VMID} --net0 name=eth0,bridge=vmbr0,gw=${GATEWAY},hwaddr=${CURRENT_MAC},ip=${NEW_IP}/24,type=veth 2>&1'" 2>&1
# Step 6: Verify configuration
echo ""
echo -e "${BLUE}Step 6: Verifying new configuration...${NC}"
NEW_CONFIG=$(ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@192.168.11.10 \
"ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@${CONFLICT_NODE} \
'pct config ${CONFLICT_VMID} | grep net0'" 2>&1)
echo "New config: ${NEW_CONFIG}"
if echo "$NEW_CONFIG" | grep -q "ip=${NEW_IP}"; then
echo -e "${GREEN}✅ IP address updated successfully${NC}"
else
echo -e "${RED}❌ IP address update failed${NC}"
exit 1
fi
# Step 7: Start container
echo ""
echo -e "${BLUE}Step 7: Starting container...${NC}"
ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@192.168.11.10 \
"ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@${CONFLICT_NODE} \
'pct start ${CONFLICT_VMID} 2>&1'" 2>&1
sleep 5
# Step 8: Verify IP is active
echo ""
echo -e "${BLUE}Step 8: Verifying IP is active in container...${NC}"
ACTIVE_IP=$(ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@192.168.11.10 \
"ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@${CONFLICT_NODE} \
'pct exec ${CONFLICT_VMID} -- ip addr show eth0 2>&1 | grep \"inet.*${NEW_IP}\"'" 2>&1)
if [ -n "$ACTIVE_IP" ]; then
echo -e "${GREEN}✅ IP ${NEW_IP} is active in container${NC}"
else
echo -e "${YELLOW}⚠️ IP may not be active yet, waiting 5 more seconds...${NC}"
sleep 5
ACTIVE_IP=$(ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@192.168.11.10 \
"ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@${CONFLICT_NODE} \
'pct exec ${CONFLICT_VMID} -- ip addr show eth0 2>&1 | grep \"inet.*${NEW_IP}\"'" 2>&1)
if [ -n "$ACTIVE_IP" ]; then
echo -e "${GREEN}✅ IP ${NEW_IP} is now active${NC}"
else
echo -e "${RED}❌ IP ${NEW_IP} is not active${NC}"
fi
fi
# Step 9: Verify no conflicts remain
echo ""
echo -e "${BLUE}Step 9: Verifying no IP conflicts remain...${NC}"
CONFLICTS=$(ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@192.168.11.10 \
"for node in r630-01 r630-02; do ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@\$node 'for vm in \$(pct list 2>/dev/null | tail -n +2 | awk \"{print \\\$1}\"); do ip=\$(pct config \$vm 2>/dev/null | grep -oE \"ip=192.168.11.167/\" | cut -d= -f2 | cut -d/ -f1); if [ -n \"\$ip\" ]; then echo \"\$node:VMID \$vm: \$ip\"; fi; done' 2>&1; done" 2>&1)
CONFLICT_COUNT=$(echo "$CONFLICTS" | wc -l)
if [ "$CONFLICT_COUNT" -eq 1 ]; then
echo -e "${GREEN}✅ No conflicts - only one container using 192.168.11.167${NC}"
echo "Remaining: $CONFLICTS"
else
echo -e "${RED}❌ Conflict still exists:${NC}"
echo "$CONFLICTS"
fi
echo ""
echo "=========================================="
echo "IP Conflict Resolution Complete"
echo "=========================================="
echo ""
echo "Summary:"
echo " ✅ VMID 10234 reassigned from ${OLD_IP} to ${NEW_IP}"
echo " ✅ VMID 10233 remains on ${OLD_IP}"
echo ""
echo "Next steps:"
echo " 1. Verify UDM Pro sees correct MAC for 192.168.11.167"
echo " 2. Update UDM Pro port forwarding if needed"
echo " 3. Test NPMplus connectivity"
echo ""