« LINUX:DNS-GSLB » : différence entre les versions

Aucun résumé des modifications
Aucun résumé des modifications
 
(8 versions intermédiaires par le même utilisateur non affichées)
Ligne 3 : Ligne 3 :
----
----
=But=
=But=
Le DNS mondial ressemble à un annulaire téléphonique. Sur internet, chaque machine est identifiée par une adresse IP (comme notre n° de téléphone). Pour que cette machine soit plus facilement accessible, on lui donne un nom (exemple: www.google.com). La fonction principale d'un serveur DNS est de faire la liaison entre ces deux informations.
Il existe la possibilité de créer un nom de domaine gratuit et d'en gérer sa zone DNS. Malheureusement ce nom de domaine ne sera pas totalement personnel. Nous allons utiliser le service de GSLB.ME.  
Pour faire connaitre votre serveur sur Internet, iIl faut donc effectuer ces deux étapes sur un serveur DNS sur Internet.
 
 
=Organisation d'un nom de domaine=
Sur Internet, il y a de nombreux serveurs de noms de domaines. Quand on les interroge, ils sont chargés de répondre en interrogeant leur annuaire.
S'ils n'ont pas la réponse, ils transfèrent la question à un serveur qui est le dépositaire de l'information. En effet chaque serveur est le dépositaire de référence d'un certains nombres de noms de domaines. Les autres, en fonction des demandes gardent une copie en mémoire pendant un certain temps. Après ce temps limite, l'information risque de ne plus être à jour; il faut donc qu'il rafraichisse les informations auprès du serveur maître de l'information.
 
Ces serveurs sont organisés de façon hiérarchique. Au dessus, il y a un serveur de noms de domaine central, racine, mondial. (note: pour une question d'efficacité et de disponibilité, ces serveurs sont plusieurs et redondants, idem éventuellement pour les serveurs maîtres)
 
De la même façon les noms de domaines sont organisés de façon hiérarchique. Chaque niveau est séparé par un point. Au plus haut niveau, on a une liste fixée au niveau mondial de noeud ("fr" pour la France, "eu" pour l'Europe, "org" comme organisation,...). Par exemple le nom de la machine "www.google.com." correspond à la machine "www", serveur WEB, du nom de domaine "google" appartenant à la société Google qui lui appartient du nom de domaine primordial "com" comme "commercial". Le point final renvoie à la racine générale et donc aux serveurs racines. Autre exemple "mail.edf.fr" fait référence à la machine "mail" de la société Edf ("edf") située en France ("fr").
 




Ligne 103 : Ligne 92 :
Comme vous avez une adresse IP dynamique, dès qu'elle change, elle doit être adaptée dans le DNS.
Comme vous avez une adresse IP dynamique, dès qu'elle change, elle doit être adaptée dans le DNS.


Il existe deux méthodes:
Il existe deux méthodes pour y arriver:
* Programme Java
* le programme Java
* Utilisation de l'API
* l'utilisation de l'API




Ligne 111 : Ligne 100 :
Le site de GSLB fournit une API et une application Java pour l'adapter à distance.
Le site de GSLB fournit une API et une application Java pour l'adapter à distance.
L'explication de cette application se trouve à l'URL <nowiki>https://docs.gslb.me/clients/</nowiki> et l'application est téléchargeable à l'URL '''<nowiki>https://docs.gslb.me/files/20131227-GSLB.ME-RestClient.zip</nowiki>''' Cette application transforme les enregistrements de type "A" mais pas les autres.  
L'explication de cette application se trouve à l'URL <nowiki>https://docs.gslb.me/clients/</nowiki> et l'application est téléchargeable à l'URL '''<nowiki>https://docs.gslb.me/files/20131227-GSLB.ME-RestClient.zip</nowiki>''' Cette application transforme les enregistrements de type "A" mais pas les autres.  
Notons que ce script "GSLB.me-RestClient.jar" que nous allons utiliser, est écrit en Java (version 8). Il faut donc que l'interpréteur Java soit installé.
Cette application ne fonctionne pas avec les nouvelles versions de Java. Elle s'exécute correctement avec la version 8.
Sous Linux, versions de Fedora 41 et précédentes, on pouvait l'installer avec la commande suivante:
dnf install java-1.8.0-openjdk
Mais depuis la version 42 de Fedora, ce paquet n'est plus disponible. Il faut se rabattre sur le dépôt de "Adoptium", les paquets "Eclipse Temurin".
Pour activer ce dépôt, on crée le fichier "/etc/yum.repos.d/adoptium-temurin-java-repository.repo" dont voici le contenu:
----
[adoptium-temurin-java-repository]
name=Adoptium
baseurl=<nowiki>https://packages.adoptium.net/artifactory/rpm/fedora/$releasever/$basearch</nowiki>
enabled=1
gpgcheck=1
gpgkey=<nowiki>https://packages.adoptium.net/artifactory/api/gpg/key/public</nowiki>
enabled_metadata=1
----
On rafraichit la liste des paquets et des dépôts avec la commande classique:
dnf upgrade --refresh
et on installe le paquet de Java 8 de Temurin:
dnf install temurin-8-jre
La clé du dépôt est chargée et ensuite le paquet.
On peut passer au logiciel écrit en Java.


Dans nos exemples de scripts qui suivent, nous les placerons dans un répertoire nommé "/manager/gdlb.me".
Dans nos exemples de scripts qui suivent, nous les placerons dans un répertoire nommé "/manager/gdlb.me".


Nous y décompressons le fichier "20131227-GSLB.ME-RestClient.zip" téléchargé ci-dessous. Un sous-répertoire "GSLB.ME-RestClient" est alors créé dans le répertoire "/manager/gdlb.me".
Nous y décompressons le fichier "20131227-GSLB.ME-RestClient.zip" téléchargé ci-dessous. Un sous-répertoire "GSLB.ME-RestClient" est alors créé dans le répertoire "/manager/gdlb.me".


Voici un exemple de script qui permet la mise à jour des enregistrements de type "A" dans votre espace DNS.
Voici un exemple de script qui permet la mise à jour des enregistrements de type "A" dans votre espace DNS.
Ligne 162 : Ligne 180 :
Pour que ce script s'exécute automatiquement à intervalle régulier, il faut ajouter cet appel dans le CRON.
Pour que ce script s'exécute automatiquement à intervalle régulier, il faut ajouter cet appel dans le CRON.


Entrée à ajouter dans le fichier /etc/crontab
Ajoutez cette entrée dans le fichier "/etc/crontab":
----
----
  # dyndns GSLB.ME
  # dyndns GSLB.ME
Ligne 168 : Ligne 186 :
----
----


Notons que ce script "GSLB.me-RestClient.jar" est écrit en Java (version 1). Il faut donc que l'interpréteur Java soit installé.
Sous Fedora 38, on ajoute le paquet "java-1.8.0-openjdk" grâce à la commande suivante:
dnf install java-1.8.0-openjdk
Si on installe la dernière version 17 ou 20, le script "GSLB.me-RestClient.jar" ne fonctionne pas.


<!--
<!--
Ligne 254 : Ligne 266 :
----
----
-->
-->
=DDCLIENT=
Le logiciel DDCLIENT est un paquet qui offre un service de mise à jour de la zone DNS.
Il est compatible à bon nombre de situations. Nous allons l'appliquer à notre cas.
Son principe de fonctionnement est analogue aux scripts présentés dans cet article. Mais au lieu d'utiliser le CRON du système, il utilise le système SYSTEMD.
==Installation==
On commence par installer le logiciel avec la commande:
dnf install ddclient
==Fichier de configuration du service==
Le premier fichier "/etc/sysconfig/ddclient" sert à paramétrer le service.
Voici son contenu:
----
DDCLIENT_OPTIONS="--file /etc/ddclient.conf"
----
On force l'utilisation du fichier de paramètres "/etc/ddclient.conf". C'est le fichier installé par défaut. Alors que le logiciel demande par défaut le fichier "/etc/ddclient/ddclient.conf".
==Fichier de configuration du logiciel==
Comme désigné ci-dessus, on utilise le fichier de paramétrage du logiciel "/etc/ddclient.conf". Il est important que ce fichier appartiennent à l'utilisateur "ddclient".
Voici une configuration conforme à notre zone DNS:
----
# Options générales
ssl=no
daemon=3600
syslog=yes
mail=root
mail-failure=root
mail-from=ddclient
pid=/run/ddclient/ddclient.pid
# Méthode récupération de l'adresse IP publique de notre serveur
usev4=webv4 , webv4=ifconfig.co
# Paramètres de connexion à la zone DNS pour mail.adbweb.gslb.eu
protocol=dyndns2
server=dynupdate.gslb.me
login=adresse@email
password=mot-de-passe
mail.adbweb.gslb.eu
# Paramètres de connexion à la zone DNS pour www.adbweb.gslb.eu
protocol=dyndns2
server=dynupdate.gslb.me
login=adresse@email
password=mot-de-passe
www.adbweb.gslb.eu
# Paramètres de connexion à la zone DNS pour adbweb.gslb.eu
protocol=dyndns2
server=dynupdate.gslb.me
login=adresse@email
password=mot-de-passe
adbweb.gslb.eu
----
Explication des paramètres:
* Paramètres généraux
** ssl=0 : accès au site de la zone sans cryptage - GSLB n'accepte pas le protocole HTTPS
** daemon=3600 : le service teste les noms de domaine toute les heures (3600s)
** syslog=yes : les messages sont envoyés le système de journalisation de l'OS
* Méthode récupération de l'adresse IP publique de notre serveur
** usev4=webv4 , webv4=ifconfig.co : comme la machine n'est pas connectée directement sur Internet car elle fait partie de notre LAN local, on interroge le site Web "ifconfig.co" spécialisé dans ce traitement. La requête se fait pour l'IPV4.
* Paramètres de connexion à la zone DNS du domaine à mettre à jour - à répéter pour chaque domaine
** protocol=dyndns2 : protocole de mise à jour accepté par GSLB selon sa documentation
** serverdynupdate.gslb.me : nom de machine de GSLB traitant la mise à jour
** login=adresse@email : nom de compte d'accès de gestion de la zone DNS à GSLB
** password=mot-de-passe : mot de passe d'accès de gestion de la zone DNS à GSLB
** enfin le nom de domaine à mettre à jour
==Debuggage en ligne de commande==
Il est possible de tester interractivement en ligne de commande avant de le mettre en production via le service "ddclient.service".
Ce programme doit être lancé par l'utilisateur "ddclient" (commande : sudo -u ddclient). En mode "debug", on peut suivre le déroulement des traitements et donc voir laquelle pose problème:
sudo -u ddclient ddclient -file /etc/ddclient.conf --verbose --debug --foreground
==Activation du service==
De façon classique, on active et lance le service:
systemctl enable ddclient.service
systemctl start ddclient.service
On peut vérifier son état:
systemctl status ddclient.service
=Script personnel=
On peut aussi utiliser un script simple qui va récupérer l'adresse IP de notre machine et la comparer à celle reprise dans la zone DNS et en cas de non concordance, l'adresse est mise à jour dans la zone DNS.
Voici le script que l'on "dynme.bat" également placé dans le répertoire "/manager/gdlb.me".
----
#!/bin/bash
####################################
#
# Configuration à adapter selon votre situation
#
# LISTEHOST : nom de la machine
# LOGIN : utilisateur GSLB.ME
# PASSWORD : mot de passe
#
LISTEHOST="mail.adbweb.gslb.eu www.adbweb.gslb.eu adbweb.gslb.eu"
LOGIN=adresse@email
PASSWORD=mot-de-passe
#####################################
# Journal
PATH_LOG=/var/log/dynme.log
#
# Journalisation
#
echo > $PATH_LOG
echo "Run dyndns" >> $PATH_LOG
date >> $PATH_LOG
#
# Récupération IP de la machine
#
CURRENT_IP=`curl -s ifconfig.co`
echo "Current IP" >> $PATH_LOG
echo "$CURRENT_IP" >> $PATH_LOG
#
# Passage en revue de tous les domaines
#
for HOST in ${LISTEHOST}
  do
  echo "----------------------------" >> $PATH_LOG
  echo "Machine $HOST" >> $PATH_LOG
  HOST_IP=`dig @ns1.gslb.me. +short $HOST`
  echo "Host IP" >> $PATH_LOG
  echo "$HOST_IP" >> $PATH_LOG
#
# Comparaison de l'adresse IP réelle et de celle du serveur DNS
# Si elles sont différentes, celle du serveur DNS est adaptée
#
  if [ -z "$CURRENT_IP" ] || [ -z "$HOST_IP" ]
  then
        echo "Pas d'IP récupérée" >> $PATH_LOG
  else
        if [ "$HOST_IP" != "$CURRENT_IP" ]
        then
                echo "IP changée" >> $PATH_LOG
                RES=`curl -s --user "$LOGIN:$PASSWORD" "<nowiki>http://dynupdate.gslb.me/nic/update?system=dyndns&hostname=$HOST&myip=$CURRENT_IP</nowiki>"`
                echo "Résultat de la requête DynDns" >> $PATH_LOG
                echo "$RES" >> $PATH_LOG
        else
                echo "IP n'a pas été changée" >> $PATH_LOG
        fi
  fi
  done
----
Les paramètres du script "dynme.bat" sont à adapter selon vos besoins:
* LOGIN correspond à votre nom de compte d'accès au site de GSLB
* PASSWORD correspond au mot de passe de ce compte
* NOMDNS reprend votre nom de domaine (la valeur reprise en exemple est celle du cas exposé plus haut)
* LISTEHOST reprend les différentes entrées des enregistrements de type A (les valeurs reprisent en exemple sont celles du cas exposé plus haut)
Pour que ce script s'exécute automatiquement à intervalle régulier, il faut ajouter cet appel dans le CRON.
Ajoutez cette entrée dans le fichier "/etc/crontab":
----
# dyndns GSLB.ME
5,20,35,50 * * * * root /manager/gslb.me/dynme.bat >& /manager/gslb.me/dynme.log
----




=API=
=API=
Une approche alternative consiste à utiliser l'API mise à disposition par le site.  
Une approche alternative consiste à utiliser l'API mise à disposition par le site.  
Elle est documentée à l'URL <nowiki>https://docs.gslb.me/</nowiki> et avec des exemples sous l'onglet "Zones".
Elle est documentée à l'URL <nowiki>https://docs.gslb.me/</nowiki> et avec des exemples sous l'onglet "Zones" sur le dessus de la page.


Nous nous concentrerons sur la modification des adresses IP de nos enregistrements dans notre DNS.
Nous nous concentrerons sur la modification des adresses IP de nos enregistrements dans notre DNS.
Ligne 288 : Ligne 463 :
  ######################################################
  ######################################################
  cd /manager/gslb.me/GSLB.ME-RestClient/sbin
  cd /manager/gslb.me/GSLB.ME-RestClient/sbin
  ./sh.GSLB.ME-RestClient -u ${EMAIL} -p ${PW} -gr ${NOMDNS} >& /manager/gslb.me/infogr.lis
  ./sh.GSLB.ME-RestClient -u ${EMAIL} -p ${PW} -gr ${NOMDNS} >& /manager/gslb.me/record.txt
  cd /manager/gslb.me
  cd /manager/gslb.me
  /usr/bin/python -m json.tool infogr.lis > infogr.json
  /usr/bin/python -m json.tool record.txt > record.json
----
----
Comme ci-dessus, il faut adapter le nom DNS, l'adresse mail et le mot de passe. La procédure récupère sous format JSON tous les enregistrements de votre DNS. Mais comme il le fait sous forme d'une seule ligne, on utilise une procédure Python pour la rendre plus lisible.
Comme ci-dessus, il faut adapter le nom DNS, l'adresse mail et le mot de passe. La procédure récupère sous format JSON tous les enregistrements de votre DNS. Mais comme il le fait sous forme d'une seule ligne, on utilise une procédure Python pour la rendre plus lisible.


Voici un exemple réduit de sortie:
Voici un exemple réduit de sortie dans le fichier "record.json":
----
----
  {
  {
Ligne 368 : Ligne 543 :
  ######################################################
  ######################################################
  cd /manager/gslb.me
  cd /manager/gslb.me
  /usr/bin/curl --basic -u ${EMAIL}:${PW} -o record.log --location --request GET https://api.gslb.me/2.0/record/${NOMDNS} --data ''
  /usr/bin/curl --basic -u ${EMAIL}:${PW} -o record.txt --location --request GET https://api.gslb.me/2.0/record/${NOMDNS} --data ''
  /usr/bin/python -m json.tool record.log > record.json
  /usr/bin/python -m json.tool record.txt > record.json
----
----
On obtient le même résultat dans le fichier "record.json".




Ligne 460 : Ligne 636 :
Pour que ce script s'exécute automatiquement à intervalle régulier, il faut ajouter cet appel dans le CRON.
Pour que ce script s'exécute automatiquement à intervalle régulier, il faut ajouter cet appel dans le CRON.


Entrée à ajouter dans le fichier /etc/crontab
Ajoutez cette entrée dans le fichier "/etc/crontab":
----
----
  # dyndns GSLB.ME
  # dyndns GSLB.ME