Aplicaciones GNU/Linux Servidores web

Cómo cambiar la dirección IP en VestaCP

En caso de que tengas un servidor dedicado o un VPS, puede resultar complicado cambiar la dirección IP si no tenéis demasiada experiencia configurando servidores, ya que existen una gran cantidad de servicios que la utilizan y son susceptibles de fallar.

Modos de cambiar la IP con VestaCP

Vamos a ver cuales son los mejores modos de hacerlo. El mejor de todos es obviamente el método más rapido, que es descargaros un script, pero veremos los dos y, luego, veremos cómo solucionar algunos posibles problemas.

1. Utilizar un script que cambie la IP automáticamente

Tenemos que descargar y ejecutar un pequeño script que cambie la IP automáticamente. Para ello, podemos ejecutar el siguiente código desde la terminal, conectándonos mediante SSH al servidor. Es necesario que seamos usuario con permisos root.

# wget http://www.nobill.tv/dl/changeip.tar.gz
# tar -zxvf changeip.tar.gz
# mv v-change-server-ip /usr/local/vesta/bin/
# v-change-server-ip VIEJAIP NUEVAIP

Después, entramos en el panel de VestaCP y cambiamos la IP pública. Finalmente reiniciamos el servidor.

2. Crear un script que cambie la IP

Lo primero que tenemos que crear un archivo, que será el que contendrá nuestro script:

# touch /usr/local/vesta/bin/v-cambiar-ip-servidor

Seguidamente, damos los permisos de ejecución adecuados al script y lo editamos con nano, vi o con nuestro editor de texto preferido:

# chmod 0755 /usr/local/vesta/bin/v-cambiar-ip-servidor
# nano /usr/local/vesta/bin/v-cambiar-ip-servidor

Y finalmente escribimos nuestro script:

#!/bin/sh

#codigo para cambiar la IP en un servidor con VestaCP
#uso del script:
# $0 <viejatp> <nuevaip>

LOG=/var/log/vesta/system.log

MYUID=`/usr/bin/id -u`
if [ "$MYUID" != 0 ]; then
  echo "You require Root Access to run this script";
  exit 0;
fi

if [ $# != 2 ] && [ $# != 3 ]; then
  echo "Usage:";
  echo "$0 <oldip> <newip> [<file>]";
  echo "you gave #$#: $0 $1 $2 $3";
  exit 0;
fi

VIEJA_IP=$1
NUEVA_IP=$2

TIENE_HTTPD=1
TIENE_NGINX=1

DATE=`date '+%F %X'`
BIN=`echo $0 | awk -F/ '{print $NF}'`

log()
{
  echo -e "$1";
  echo -e "$1" >> $LOG;
}

swapfile()
{
  if [ ! -e $1 ]; then
    log "No es posible encontrar $1 para cambiar las IPs. Nos vemos...";
    return;
  fi

  TEMP="perl -pi -e 's/${VIEJA_IP}/${NUEVA_IP}/g' $1"
  eval $TEMP;

  log "$DATE $BIN $1t: $VIEJA_IP -> $NUEVA_IP";
}

if [ $# = 3 ]; then
  swapfile $3;
  exit 0;
fi


IPFILE_OLD=/usr/local/vesta/data/ips/$VIEJA_IP
IPFILE_NEW=/usr/local/vesta/data/ips/$NUEVA_IP
if [ ! -e $IPFILE_OLD ]; then
  echo -n "$IPFILE_OLD no existe. Quieres continuar de todos modos? (y/n) : ";
  read YESNO;
  if [ "$YESNO" != "y" ]; then
    exit 0;
  fi
else
  mv -f $IPFILE_OLD $IPFILE_NEW
  log "$DATE $0 $IPFILE_OLDt: $VIEJA_IP -> $NUEVA_IP";
fi

if [ "${TIENE_HTTPD}" -eq 1 ]; then
  if [ -e /etc/httpd/conf.d/${VIEJA_IP}.conf ]; then
    swapfile /etc/httpd/conf.d/${VIEJA_IP}.conf
    mv -f /etc/httpd/conf.d/$VIEJA_IP.conf /etc/httpd/conf.d/${NUEVA_IP}.conf
  fi
  swapfile /etc/httpd/conf.d/mod_extract_forwarded.conf
fi

if [ "${TIENE_NGINX}" -eq 1 ]; then
  if [ -e /etc/nginx/conf.d/${VIEJA_IP}.conf ]; then
    swapfile /etc/nginx/conf.d/${VIEJA_IP}.conf
    mv -f /etc/nginx/conf.d/$VIEJA_IP.conf /etc/nginx/conf.d/${NUEVA_IP}.conf
  fi
fi

swapfile /etc/hosts

ULDDU=/usr/local/vesta/data/users

for i in `ls $ULDDU`; do
{

  if [ ! -d $ULDDU/$i ]; then
    continue;
  fi

  swapfile $ULDDU/$i/web.conf
  swapfile $ULDDU/$i/dns.conf
  for j in `ls $ULDDU/$i/dns/*.conf`; do
  {
    swapfile $j
  };
  done;

  if [ "${TIENE_HTTPD}" -eq 1 ]; then
    swapfile /home/$i/conf/web/httpd.conf
  fi
  if [ "${TIENE_NGINX}" -eq 1 ]; then
    swapfile /home/$i/conf/web/nginx.conf
  fi

  for j in `ls /home/$i/conf/dns/*.db`; do
  {
    swapfile $j
  };
  done;

};
done;

#esto se necesita para actualizar los datos en los archivos de la base de datos
if [ "${TIENE_HTTPD}" -eq 1 ]; then
  service httpd restart
fi
if [ "${TIENE_NGINX}" -eq 1 ]; then
  service nginx restart
fi

echo "*** Se ha cambiado la ip $VIEJA_IP por la ip $NUEVA_IP ***";

Y ya tenemos listo el script. Lo ejecutamos y, posteriormente, cambiamos la IP pública en el panel de VestaCP. Por último, reiniciamos el servidor.

Solución de problemas

Vamos a ver varios problemas que se os pueden dar.

Apache no se inicia: Cambiemos la IP del archivo de configuración

Es posible que Apache no se inicie. El problema es que el script crea un nuevo archivo de configuración de Apache en lugar de editar el anterior, por lo que debemos borrar el archivo anterior.

Es posible que el archivo se encuentre en esta directorio:

/etc/apache2/conf.d/TUVIEJAIP.conf

Aunque en los servidores con CentOS, el archivo estará dentro del siguiente directorio:

/etc/httpd/conf.d/TUVIEJAIP.conf

El el lugar de “TUVIEJAIP”, aparecerá vuestra antigua dirección IP. Después de ejecutar el script, debemos borrar ese archivo cuyo nombre se corresponderá con el de vuestra vieja IP. Es importante que no borréis el nuevo archivo que ha creado el script .

En caso de que Apache os de más errores, podéis ejecutar un chequeo de configuración de Apache para identificar los problemas:

# apachectl configtest

Otros archivos en los que cambiar la IP

Es posible que, dependiendo de nuestra configuración, tengamos que cambiar nuestra IP en más lugares, especialmente si utilizamos Ubuntu. Un lugar es el archivo localizado en “/home/admin/conf/web/apache2.conf”. Debemos editarlo y actualizar la IP que aparece en la primera línea, que será la IP del host virtual.

También es posible que debamos cambiarla en el archivo de configuración de nginx, localizado en “/home/admin/conf/web/snginx.conf”. Concretamente, debemos actualizar la IP que se muestra en la segunda línea.

Esto ha sido todo. Espero que os haya servido de ayuda.

Encontremos más lugares en los que cambiar la IP

Si aún tenemos problemas, vamos a buscar todos los archivos en los que puede aparecer la vieja IP:

# grep -r "VIEJA-IP" /etc/
...
# grep -r "VIEJA-IP" /home/
...
# grep -r "VIEJA-IP" /usr/local/
...

Ahora editamos los archivos que se nos muestren y cambiamos todas las ocurrencias de la IP en todos ellos por la nueva.

El Firewall: Cambiando la IP que utiliza IPtables

Si Fail2Ban nos da algún fallo o vemos algún error relacionado con IPTables, editamos el archivo “/etc/iptables.rules” y buscamos la siguiente línea:

-A INPUT -s VIEJAIP/32 -j ACCEPT

Debemos cambiarla por:

-A INPUT -s NUEVAIP/32 -j ACCEPT

Finalmente, reiniciamos el firewall y, luego, el servidor.

Si aún no consigues entrar a tus sitios o dan errores…

Si este es vuestro caso, os aconsejamos reconstruir la configuración web de VestaCP para todos los usuarios. Para ello entramos en VestaCP y ejecutamos la opción “Rebuild Web” para todos. Tras ésto, reiniciamos el servidor.

EduZRO

Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

1 Comment

  1. Hola,

    Da error que impide el acceso.

    Saludos,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *