viernes, 17 de noviembre de 2017

DHCP script para crear dhcpd.conf a partir de la db dhcpd.leases

Se me ha presentado el siguiente escenario: Tengo un servidor ubuntu que distribuye y rutea vlans y estoy en el medio de la elaboraciĆ³n de un plan de contingencia en el cual estĆ”n comprendidos los router y los switch del MDF.
el BCP (Business Continuity Plan) esta pensado para una situaciĆ³n donde desaparece momentĆ”neamente la topologĆ­a lĆ³gica de Vlan. En el plan de continuidad permanece la subdivisiĆ³n de redes pero esta ves por la asignaciĆ³n de los datos de configuraciĆ³n directamente por el isc-dhcp-server. Para ello el plan contempla dos tipos de incidentes:
1) fallas en el servidor distribuidor de vlans.
2) fallas en el switch principal con TRUNKs vlan.

 Para esto, configurĆ© un servidor clon del distribuidor de vlans y me vĆ­ en la necesidad de crear un script que me permita obtener los datos de los hosts existentes conectados o apagados para asignarle estĆ”ticamente su pertenencia a la sub red.
De ello surge el script que explico a continuaciĆ³n.
En Ubuntu la base de datos del servidor dhcp esta en: /var/lib/dhcp/dhcpd.leases
y su configuraciĆ³n en:  /etc/dhcp/dhcpd.conf

el contenido de dhcpd.conf puede ser parecido a este:



y el contenido de dhcpd.leases:



Primero vamos a generar un archivo csv con el script explicado aqui:
http://jaskolowski.com.ar/2017/11/script-para-parsear-dhcpdlease.html

que es este:



nos genera un archivo con un contenido parecido a este:



ese archivo lo vamos a procesar con el siguiente script:



dejo el texto a continuaciĆ³n por si les resulta mĆ”s fĆ”cil copy&paste:

#!/bin/bash
# script para crear dhcpd.conf a partir de la DB dhcpd.leases
#
# Creamos variables para obtener IP, MAC y Gateway de hosts
IP=(`cat lease.csv |cut -f1 -d";"`)
MAC=(`cat lease.csv |cut -f2 -d";"`)
GW=(`cat lease.csv |cut -f1 -d";"|sed 's:[^.]*$:1:'`)

# iniciamos el encabezado de dhcpd.conf

echo "ddns-update-style none;">dhcpd.conf
echo "Authoritative;">>dhcpd.conf
echo "ignore client-updates;">>dhcpd.conf


#creacion de un arreglo
for i in "${!IP[@]}"
do

# creamos cada lease por host
echo "# PC-${IP[$i]}">>dhcpd.conf
echo "Host PC-${IP[$i]} {">>dhcpd.conf
echo "        hardware ethernet               ${MAC[$i]};">>dhcpd.conf
echo "        fixed-address                   ${IP[$i]};">>dhcpd.conf
echo "        option subnet-mask              255.255.255.224;">>dhcpd.conf
echo "        option domain-name-servers      8.8.8.8,208.67.222.222;">>dhcp.conf
echo "        option routers                  ${GW[$i]};">>dhcpd.conf
echo "        default-lease-time -1;">>dhcpd.conf
echo "        max-lease-time -1;">>dhcpd.conf
echo "}">>dhcpd.conf
done
 Y eso nos da como resultado un archivo de configuraciĆ³n de dhcp server que va a asignar a cada host que tiene registrado por su mac la ip correspondiente a la sub red a la que pertenecĆ­a en un entorno vlan.

Adicionalmente se puede configurar una sub red para 30 Ć³ 62 hosts que no hayan sido registrados en dhcpd.leases y aunque no esten en la sub red de su vlan, al menos tengan conexiĆ³n hasta que se concluya el DRP.






No hay comentarios: