lunes, 27 de enero de 2014

Script para configuración de IP estática

El siguiente código fuente corresponde a un script cuyo objetivo es permitir la configuración de una única interfaz de red en una máquina Linux.

Hay que decir que el script no ha sido completado ya que se utilizó para comenzar las explicaciones relacionadas con la configuración de red de máquinas Linux y recordatorio de shellscripts. Dada la posible complejidad que pudiera derivarse al intentar dotar a este script de capacidad para configurar más de un interfaz de red, se optó por hacerlo para una sola.

Debemos tener en cuenta que si estamos trabajando con cualquier distro cuya gestión de interfaces de red esta realizada a través de Network Manager, será necesario desactivar dicho sistema de gestión.

Para ello bastaría con acceder al archivo de configuración de NetworkManager (/etc/NetworkManager/NetworkManager.conf) en la máquina en cuestión y poner a "false" la variable "managed". Si tienes alguna duda al respecto, te aconsejo que accedas al siguiente enlace: Desactivación de NetworkManager en Ubuntu.

Aquí teneis el código fuente:

#!/bin/bash

#Script que permite configurar de manera estática el direccionamiento IP
#de una tarjeta de red en una máquina Ubuntu Desktop 12.04.
#Para que los no nos afecte el gestor de red NetworkManager de Ubuntu
#deberemos desactivarlo. Accederemos a /etc/NetworkManager/NetworkManager.conf
#lo editaremos y modificaremos la variable "managed" poniéndola a false.

#los archivos a tener en cuenta en este script serían:
#a) Configuración IP: /etc/network/interfaces
#b) Resolución de nombres WAN: /etc/resolv.conf
#c) Resolución de nombre LAN: /etc/hosts (opcional)

#--------------------
# FUNCIONES
#--------------------

function titulo()
{
    clear
    echo "****************************************************"
    echo "*   CONFIGURADOR DE DIRECCIONAMIENTO IP ESTÁTICO   *"
    echo "****************************************************"
}

function copiaseg()
{
          
    echo "Realizando copias de seguridad..."
   
    if [ -f /etc/network/interfaces ]
    then
        cp /etc/network/interfaces /etc/network/interfaces.original
        if [ $? -eq 0 ]
        then
            echo "El archivo interfaces ha sido salvaguardado con éxito."
        else
            echo "Error al salvaguardar el archivo interfaces."
        fi
    fi

    if [ -f /etc/resolv.conf ]
    then
        cp /etc/resolv.conf /etc/resolv_original.conf
        if [ $? -eq 0 ]
        then
            echo "El archivo resolv.conf ha sido salvaguardado con éxito."
        else
            echo "Error al salvaguardar el archivo resolv.conf."
        fi
    fi
   
}


function grabar_configuracion()
{

    echo "----------------------------------------------------"
    echo "La nueva configuración de red introducida es: "
    echo "Interfaz: $1"
    echo "Dirección IP: $2"
    echo "Máscara de red: $3"
    echo "Puerta de enlace / Gateway: $4"
    echo "DNS 1º: $5"
    echo "DNS 2º: $6"
    echo "----------------------------------------------------"

    # A partir de aquí abría que reescribir completos los archivos    
    # de configuración interfaces y resolv.conf
   
   
    #Modificación de /etc/network/interfaces
    interfaces="/etc/network/interfaces"
    echo "auto lo" > $interfaces
    echo "iface lo inet loopback" >> $interfaces
    echo "auto $1" >> $interfaces
    echo "iface $1 inet static" >> $interfaces
    echo "address $2" >> $interfaces
    echo "mask $3" >> $interfaces
    echo "gateway $4" >> $interfaces

    #Modificación de /etc/resolv.conf
    resolv="/etc/resolv.conf"   
    echo "#Generado por script configuraip.sh" > $resolv
    echo "nameserver $5" >> $resolv
    echo "nameserver $6" >> $resolv

    #reiniciamos los servicios de red para
    #que la nueva configuración tenga efecto
    /etc/init.d/networking restart

}



#--------------------
# PROGRAMA PRINCIPAL
#--------------------

titulo

if [ $LOGNAME != "root" ]
then
    read -p "Lo siento, este script debe ser ejecutado con privilegios de root."
    exit 1   
fi

#Mostramos los interfaces de red
titulo
echo "Mostrando interfaces de red actuales..."
for nic in `lshw -short -class network | grep eth | tr -s " " | cut -f2 -d" " `
do
    echo "* Interfaz: $nic"
done
echo "-----------------------------------------------------"

nic_elegida=""
while [ "$nic_elegida" == "" ]
do
    read -p "Elige la interfaz que deseas configurar: " nic_elegida
done

nic_valida=1
for nic in `lshw -short -class network | grep eth | tr -s " " | cut -f2 -d" " `
do
    if [ $nic == $nic_elegida ]
    then
        nic_valida=0
    fi
done

if [ $nic_valida -ne 0 ]
then
    echo "Error, la interfaz $nic_elegida no es válida."
    read -p "Pulsa una tecla para cerrar el script..."
    exit 1
fi


echo "La interfaz elegida es: $nic_elegida"
read -p "Introduce la nueva dirección ip estática: " ip
read -p "Introduce la nueva máscara de red: " mascara
read -p "Introduce la puerta de enlace: " puerta
read -p "Introduce el DNS 1º: " dns1
read -p "Introduce el DNS 2º: " dns2
echo
read -p "Pulse una tecla para continuar."
titulo

respuesta=""
while [ "$respuesta" == "" ]
do
    read -p "Desea grabar estos datos de configuración (S/N): " respuesta
    case $respuesta in
        s|S)copiaseg; grabar_configuracion $nic_elegida $ip $mascara $puerta $dns1 $dns2;            break;;
        n|N)echo "Ok, no se modificarán los archivos de configuración"; read; break;;
        *) echo "No ha introducido una respuesta válida, vuelva a intentarlo.";;
    esac
done

echo "Fin del script."
read
exit 0

No hay comentarios: