Primera versión. Actualización por ssh

La base de datos se llama "ips" y simplemente contiene dos campos; nombres y direcciones

Con la siguiente línea enviamos la sentencia sql directamente a ip_servidor:/tmp/empresa.sql y posteriormente la ejecutamos en el equipo ip_servidor

Debemos asegurarnos de que el cliente pueda entrar por ssh sin que el servidor le pida clave, para poder realizarlo automáticamente

Importante

NOTA: Tener cuidado con los espacios, ya que es una sentencia de una sola línea.

Esta sentencia la ponemos en un crontab, en /etc/cron.d de forma que se ejecute cada media hora, por ejemplo.

Esta sentencia la ponemos en un crontab, en /etc/cron.d de forma que se ejecute cada media hora, por ejemplo.

Sugerencia

Debemos substituir las variables necesarias.


echo 'update direcciones set direccion="'`links -source www.cualesmiip.com |grep -i "tu ip real" |awk '{print $5}' |cut -d">" -f 2`'" where nombre="empresa"' > /tmp/sentencia.sql && scp /tmp/empresa.sql cliente@ip_servidor:/tmp/empresa.sql && ssh cliente@ip_servidor 'mysql ips -e "`cat /tmp/empresa.sql`"'
	

Ahora debemos configurar el lado servidor para que introduzca los datos que contiene la base de datos en el fichero de zona correspondiente del servidor dns. Para ello usaremos nuevamente una tarea de cron, que se ejecute un par de minutos después de que nos manden las ip's. En nuestro fichero de zona dns no añadiremos ningún host (sólo la definición de zona y el MX), y copiaremos el fichero de zona a dominio.bak. Añadiremos manualmente a la base de datos los host con ip estática (de este modo tenemos todas las ip's en la BD, tanto las estáticas como las dinámicas)

Con el siguiente script ejecutado desde cron, sacamos cada X minutos los datos que tenga la base de datos y los introducimos en el fichero de zona vacío


mv /etc/bind/db.dominio /etc/bind/db.dominio.old && cp /etc/bind/dominio.bak /etc/bind/db.dominio && mysql -u cliente ips -e "select * from direcciones" | awk '{print $1" IN A "$2}' |grep -v nombre >> /etc/bind/db.dominio && /etc/init.d/bind reload 2&>/dev/null