J'utilise avec la plus grande satisfaction le script de Juliette (voir ici: http://www.fr.ixus.net/modules.php?name=Content&pa=showpage&pid=107) depuis plusieurs semaines.
Cependant, son utilisation n'autorise l'identification de DNS Dynamiques qu'au niveau des règles de forwarding du pare-feu.
Comme je fais tourner des process adhoc sur mon ipcop qui doivent être accédés par des dns dynamiques, j'ai adapté son script afin de prendre en compte mon besoin. (voir mon post ici :
http://forums.fr.ixus.net/viewtopic.php?t=31633&start=0&postdays=0&postorder=asc&highlight=)
Pour ceux que ça pourrait intéresser, voici les adaptations:
Ce script remplace le contenu du fichier dyndns. Pour la procédure de mise en place, je vous invite à vous référer au tutorial existant.
- Code: Tout sélectionner
#!/bin/sh
#
# version 2.0 du script dyndns
# auteur : Bit8tr
# Modification du script de juliette michaux (1.3) pour étendre la résolution des dns dynamiques
# aux accès externes d'IPCOP
#
# Date de création : le 10 février 2005
#
# Ce script sert a remettre a jour la table config du firewall et des accès externes.
# Ces tables sont dans le fichier /var/ipcop/portfw/config et /var/ipcop/xtaccess/config
#
# Dans les regles de firewall, a chaque adresse ip a mettre a jour, un commentaire speciale
# a ete insere avant le nom de domaine : **DDNS**. Par ex : **DDNS**www.google.fr
#
# Nous utiliserons la même méthode que les règles de gestion du port forwarding
# pour les accès externes, en insérant un commentaire speciale avant le nom de domaine : **DDNS**.
# dans le champ remarque Par ex : **DDNS**www.google.fr
#
# Quand le script parcourt la config et voit ces commentaires, il recherche l'ip correspondante
# au nom de domaine et insere cette nouvelle adresse ip a la place de l'ancienne.
#
# Ainsi, si un domaine change d'ip tous les jours, ce script permet de renseigner le
# firewall de facon transparente pour l'utilisateur
#
# Ce script est une deuxieme version de dyndns, mais au lieu d'utiliser la commande ping
# pour trouver l'adresse ip correspondante au nom de domaine, on utilise la commande
# nslookup.cgi. Ce script est un script perl qui se trouve dans le repertoire
# /home/httpd/cgi-bin. Il prend en argument argv[0] le nom de domaine et retourne
# l'adresse ip correspondante.
# Ceci rend l'execution beaucoup plus rapide et permet de faire tourner l'application
# sur la crontab toutes les minutes au lieu de cinq, avec le ping.
# Creation des variables du chemin du fichier de config du fire-wall et des accès externes
cheminfw="/var/ipcop/portfw/"
cheminae="/var/ipcop/xtaccess/"
# Copie du fichier des config des fichiers temporaires ficIN
cp $cheminfw"config" $cheminfw"ficIN"
cp $cheminae"config" $cheminae"ficIN"
# Changement du mode des fichiers de config pour les interdire en ecriture pendant la procedure
chmod 555 $cheminfw"config"
chmod 555 $cheminae"config"
# Changement du mode des fichiers ficIn pour pouvoir travailler dessus
chmod 744 $cheminfw"ficIN"
chmod 744 $cheminae"ficIN"
# La boucle while va permettre de lire une ligne du fichier de config du firewall,
# de l'analyser, et de la reecrire dans le fichier ficOUT
cat $cheminfw"ficIN" | while read lignefw
do
remfw=`echo $lignefw |awk -F "," '{print $10}'`
if test -z "$remfw"
then
#on est dans le cas ou il n'y a pas de remarque sur la ligne de firewall
#on recopie donc la ligne tel quel
echo $lignefw >> $cheminfw"ficOUT"
else
#on a une remarque dans le fichier de config
domainefw=`echo $remfw | awk -F "*" '{print $5}'`
if test -z "$domainefw"
then
#la remarque ne porte pas le symbole cle **DDNS**
#on ne fait donc aucun traitement et on la reecrit tel quel
echo $lignefw >> $cheminfw"ficOUT"
else
#on a une remarque dans le fichier de config
domainefw=`echo $remfw | awk -F "*" '{print $5}'`
if test -z "$domainefw"
then
#la remarque ne porte pas le symbole cle **DDNS**
#on ne fait donc aucun traitement et on la reecrit tel quel
echo $lignefw >> $cheminfw"ficOUT"
else
#la remarque porte le symbole **DDNS**, on doit l'analyser
#on cherche la nouvelle ip a l'aide de la commande nslookup.cgi
ipnewfw=`/home/httpd/cgi-bin/nslookup.cgi $domainefw`
#echo "ipnewfw "$ipnewfw
#on reprend le debut de la ligne du fichier config a ne pas modifier
argfw1=`echo $lignefw | awk -F "," '{print $1}'`
argfw2=`echo $lignefw | awk -F "," '{print $2}'`
argfw3=`echo $lignefw | awk -F "," '{print $3}'`
argfw4=`echo $lignefw | awk -F "," '{print $4}'`
argfw5=`echo $lignefw | awk -F "," '{print $5}'`
argfw6=`echo $lignefw | awk -F "," '{print $6}'`
argfw7=`echo $lignefw | awk -F "," '{print $7}'`
argfw8=`echo $lignefw | awk -F "," '{print $8}'`
#on ecrit le debut de ligne, l'adresse ip nouvelle et la remarque
#a la suite du fichier ficOUT
echo $argfw1,$argfw2,$argfw3,$argfw4,$argfw5,$argfw6,$argfw7,$argfw8,$ipnewfw,$remfw >> $cheminfw"ficOUT"
fi
fi
fi
done
# La boucle while va permettre de lire une ligne du fichier de config des accès externes,
# de l'analyser, et de la reecrire dans le fichier ficOUT
cat $cheminae"ficIN" | while read ligneae
do
remae=`echo $ligneae |awk -F "," '{print $6}'`
if test -z "$remae"
then
#on est dans le cas ou il n'y a pas de remarque sur la ligne des accès externes
#on recopie donc la ligne tel quel
echo $ligneae >> $cheminae"ficOUT"
else
#on a une remarque dans le fichier de config
domaineae=`echo $remae | awk -F "*" '{print $5}'`
if test -z "$domaineae"
then
#la remarque ne porte pas le symbole cle **DDNS**
#on ne fait donc aucun traitement et on la reecrit tel quel
echo $ligneae >> $cheminae"ficOUT"
else
#on a une remarque dans le fichier de config
domaineae=`echo $remae | awk -F "*" '{print $5}'`
if test -z "$domaineae"
then
#la remarque ne porte pas le symbole cle **DDNS**
#on ne fait donc aucun traitement et on la reecrit tel quel
echo $ligneae >> $cheminae"ficOUT"
else
#la remarque porte le symbole **DDNS**, on doit l'analyser
#on cherche la nouvelle ip a l'aide de la commande nslookup.cgi
ipnewae=`/home/httpd/cgi-bin/nslookup.cgi $domaineae`
#on reprend le debut de la ligne du fichier config a ne pas modifier
argae1=`echo $ligneae | awk -F "," '{print $1}'`
argae3=`echo $ligneae | awk -F "," '{print $3}'`
argae4=`echo $ligneae | awk -F "," '{print $4}'`
argae5=`echo $ligneae | awk -F "," '{print $5}'`
#on ecrit le debut de ligne, l'adresse ip nouvelle et la remarque
#a la suite du fichier ficOUT
echo $argae1,$ipnewae,$argae3,$argae4,$argae5,$remae >> $cheminae"ficOUT"
fi
fi
fi
done
#calcul du nombre de difference entre le fichier ficIN et ficOUT dans les 2 répertoires
difw=`diff $cheminfw"ficIN" $cheminfw"ficOUT" | grep [0-9]c[0-9] | wc -l`
diae=`diff $cheminae"ficIN" $cheminae"ficOUT" | grep [0-9]c[0-9] | wc -l`
#calcul du nombre de remarque contenant **DDNS**
ddfw=`cat $cheminfw"ficIN" | grep \*\*DDNS\*\* | wc -l`
ddae=`cat $cheminae"ficIN" | grep \*\*DDNS\*\* | wc -l`
#Traitement des différences pour les regles du firewall
if test $difw -le $ddfw
then
#on est dans le cas ou le nombre de changement est inferieur ou egal au nombre
#d'adresse ip verifier : ce qui signifie que le script c'est bien passe
#on detruit le fichier ficIn maintenant inutile
rm $cheminfw"ficIN"
#on remplace le fichier config par le fichier ficOUT
mv $cheminfw"ficOUT" $cheminfw"config"
chmod 766 $cheminfw"config"
#on active les changements
/usr/local/bin/setportfw
#echo "tout c'est bien passe"" nb diff:"$difw" nb ddns:$ddfw"
else
#on a un nombre de changement beaucoup trop grand
#on prefere ne rien changer
rm $cheminfw"ficIN"
rm $cheminfw"ficOUT"
chmod 766 $cheminfw"config"
#echo "une erreur s'est produite"" nb diff:"$difw" nb ddns:$ddfw"
fi
#Traitement des différences pour les regles des acces externes
if test $diae -le $ddae
then
#on est dans le cas ou le nombre de changement est inferieur ou egal au nombre
#d'adresse ip verifier : ce qui signifie que le script c'est bien passe
#on detruit le fichier ficIn maintenant inutile
rm $cheminae"ficIN"
#on remplace le fichier config par le fichier ficOUT
mv $cheminae"ficOUT" $cheminae"config"
chmod 766 $cheminae"config"
#on active les changements
/usr/local/bin/setxtaccess
#echo "tout c'est bien passe"" nb diff:"$diae" nb ddns:$ddae"
else
#on a un nombre de changement beaucoup trop grand
#on prefere ne rien changer
rm $cheminae"ficIN"
rm $cheminae"ficOUT"
chmod 766 $cheminae"config"
#echo "une erreur s'est produite"" nb diff:"$diae" nb ddns:$ddae"
fi