#!/bin/bash # ============================================================================= # migrate-ip.sh # Detecta o IP atual na faixa 192.168.1.0/24 e fixa o equivalente em # 192.168.2.0/24 via netplan (Ubuntu 18.04+) # # Uso: curl -fsSL https://script.sittax.com.br/network/migrate-ip.sh | sudo bash # ============================================================================= set -euo pipefail OLD_PREFIX="192.168.1" NEW_PREFIX="192.168.2" NETPLAN_DIR="/etc/netplan" # Deve ser executado como root if [[ $EUID -ne 0 ]]; then echo "❌ Este script deve ser executado como root (use sudo)." exit 1 fi echo "" echo "==============================================" echo " Sittax — Migração de IP " echo " ${OLD_PREFIX}.0/24 → ${NEW_PREFIX}.0/24 " echo "==============================================" echo "" # --------------------------------------------------------------------------- # 0. Verificar se a migração já foi realizada (IP já na faixa 192.168.2.x) # --------------------------------------------------------------------------- if ip addr show | grep -qE "inet ${NEW_PREFIX//./\\.}\.[0-9]+/"; then EXISTING_NEW_IP=$(ip addr show | grep -oE "inet ${NEW_PREFIX//./\\.}\.[0-9]+/[0-9]+" | head -1 | awk '{print $2}') echo "✅ Este host já está na faixa ${NEW_PREFIX}.0/24 (${EXISTING_NEW_IP})." echo " Nenhuma migração necessária." exit 0 fi # --------------------------------------------------------------------------- # 1. Descobrir interface e IP atual na faixa 192.168.1.x # --------------------------------------------------------------------------- IFACE="" OLD_IP="" CIDR_SUFFIX="" CURRENT_IFACE="" while IFS= read -r line; do if [[ "$line" =~ ^[0-9]+:\ ([^:]+): ]]; then CURRENT_IFACE="${BASH_REMATCH[1]}" fi if [[ "$line" =~ inet\ (${OLD_PREFIX//./\\.}\.[0-9]+)/([0-9]+) ]]; then OLD_IP="${BASH_REMATCH[1]}" CIDR_SUFFIX="${BASH_REMATCH[2]}" IFACE="$CURRENT_IFACE" break fi done < <(ip addr show) if [[ -z "$OLD_IP" ]]; then echo "❌ Nenhum IP na faixa ${OLD_PREFIX}.0/24 encontrado. Nada a fazer." exit 0 fi # Extrai o último octeto para montar o novo IP LAST_OCTET="${OLD_IP##*.}" NEW_IP="${NEW_PREFIX}.${LAST_OCTET}" echo " Interface : $IFACE" echo " IP atual : ${OLD_IP}/${CIDR_SUFFIX}" echo " Novo IP : ${NEW_IP}/${CIDR_SUFFIX}" echo "" read -rp "Confirmar migração? [s/N] " CONFIRM /dev/null | head -1 || true) if [[ -z "$NETPLAN_FILE" ]]; then # Usa o primeiro arquivo .yaml disponível ou cria um novo NETPLAN_FILE=$(ls "$NETPLAN_DIR"/*.yaml 2>/dev/null | head -1 || echo "${NETPLAN_DIR}/99-migrate.yaml") fi echo " Netplan : $NETPLAN_FILE" # --------------------------------------------------------------------------- # 3. Backup do arquivo atual # --------------------------------------------------------------------------- BACKUP="${NETPLAN_FILE}.bak.$(date +%Y%m%d%H%M%S)" if [[ -f "$NETPLAN_FILE" ]]; then cp "$NETPLAN_FILE" "$BACKUP" echo " Backup : $BACKUP" fi # --------------------------------------------------------------------------- # 4. Gravar nova configuração netplan # --------------------------------------------------------------------------- cat > "$NETPLAN_FILE" < ${NEW_IP}/${CIDR_SUFFIX} network: version: 2 ethernets: ${IFACE}: addresses: - "${NEW_IP}/${CIDR_SUFFIX}" nameservers: addresses: - 1.1.1.1 - 8.8.8.8 search: [] routes: - to: "default" via: "${NEW_PREFIX}.1" EOF chmod 600 "$NETPLAN_FILE" echo "" echo "⚙️ Aplicando nova configuração (netplan apply)..." # Testa a configuração antes de aplicar if ! netplan generate 2>&1; then echo "" echo "❌ Erro na configuração netplan. Restaurando backup..." [[ -f "$BACKUP" ]] && cp "$BACKUP" "$NETPLAN_FILE" echo " Backup restaurado: $BACKUP" exit 1 fi netplan apply echo "" echo "✅ Migração concluída com sucesso!" echo "" echo " ${OLD_IP} → ${NEW_IP}" echo "" echo "⚠️ Se você perdeu a conexão SSH, reconecte via: ssh @${NEW_IP}" echo ""