Mise a jour des DNS de Gandi.net et utilisation d'un Proxy inversé avec un NAS Synology
Vous trouverez dans cet article, l’ensemble des éléments permettant de mettre à jour les DNS Gandi.net à partir d’un NAS Synology ainsi que de mettre en place un proxy inversé pour vos différents services sur votre réseau local.
Objectif
Contexte
Nous souhaitons utiliser un nom de domaine personnel de Gandi.net nommé testing.com
pour pouvoir accéder aux différents services existant derrière un accès (Routeur Livebox) internet personnel en fonction des sous-domaines définis.
Nous avons un réseau local contenant les équipements suivants :
- Routeur Livebox avec l’adresse local 192.10.10.1 (Adresse publique : 90.125.62.14)
- NAS Synology avec l’adresse local 192.10.10.2
- Serveur local n°1 pour héberger le service VPN avec l’adresse local 192.10.10.10
- Serveur local n°2 pour héberger le service GAME avec l’adresse local 192.10.10.20
- Serveur local n°3 pour héberger le service TODO avec l’adresse local 192.10.10.30
Nous avons un nom de domaine testing.com
actif chez Gandi.net.
Schéma :
Contrainte
Le routeur Livebox ne permet de gérer que l’IPv4, l’adresse IP publique n’est pas fixe et on ne sait pas quand elle change, il faut donc pouvoir vérifier régulièrement notre adresse IP publique pour mettre à jour le DNS de Gandi.net lorsque cela est nécessaire.
Usage
- Lorsqu’un utilisateur souhaite accéder à l’url
https://vpn.testing.com
alors il doit être redirigé automatiquement vers le serveur local n°1. - Lorsqu’un utilisateur souhaite accéder à l’url
http://game.testing.com
alors il doit être redirigé automatiquement vers le serveur local n°2. - Lorsqu’un utilisateur souhaite accéder à l’url
http://todo.testing.com
alors il doit être redirigé automatiquement vers le serveur local n°3. - Lorsqu’un utilisateur souhaite accéder à l’url
https://share.testing.com
alors il doit être redirigé automatiquement vers le NAS Synology.
Liste des étapes
Pour mettre en place les éléments nécessaires, nous allons réaliser les étapes suivantes :
- Création d’un jeton d’accès à l’API de Gandi.net
- Configuration du routeur Livebox pour rediriger le traffic internet entrant vers le NAS Synology
- Creation et mise à jour des DNS Gandi.net avec l’adresse IP publique associée au routeur Livebox
- Mise en place du Proxy inversé sur le NAS Synology pour accéder aux différents serveurs
Création d’un jeton d’accès à l’API de Gandi.net
Le jeton d’accès va nous permettre de nous authentifier pour utiliser l’API fourni par Gandi.net afin de pouvoir automatiser les modifications nécessaires sur les enregistrements DNS lors des changements d’adresse IP publique.
Démarche pour créer le jeton d’accès :
- Connexion sur le compte d’administration sur le site Gandi.net
- Cliquez sur le menu
Organizations
- Cliquez sur l’organisation souhaitée
- Cliquez sur l’onglet
Sharing
- Dans la partie
Personal Access Token (PAT)
, cliquez sur le boutonCreate a token
- Renseigner les différents éléments nécesssaires
- Renseigner le nom du jeton (ex :
testing_dns_pat
) - Sélectionnez la durée de validité du jeton comprise entre 7 jours et 1 an (ex :
7 days
) - Cochez la case
Restrict to selected products
et sélectionnez le domaine souhaité (ex :testing.com
) - Cochez la case
See and renew domain names
- Cochez la case
Manage domain technical configurations
- Cliquez sur le bouton
Create
- Renseigner le nom du jeton (ex :
- Copier le Jeton d’accès créé dans un endroit sécurisé car il ne sera plus accessible
Configuration du routeur
Nous allons mettre en place une redirection du traffic internet entrant vers le NAS Synology par défaut pour que le NAS Synology puisse servir de reverse proxy pour rediriger les utilisateurs vers le serveur local défini en fonction de l’adresse entrante utilisée.
Démarche pour configurer la box internet :
- Se connecter sur le compte d’administration de la livebox
- Allez dans le menu
Advanced Parameters
- Cliquez sur l’option
Network
- Cliquez sur l’onglet
NAT / PAT
- Ajoutez une règle pour rediriger le traffic HTTP entrant vers le NAS Synology et cliquez sur
Create
- Application/Service : Reverse Proxy HTTP
- Internal Port : 80
- External Port : 80
- Protocol : TCP
- Equipment : 192.10.10.2
- External IP : All
- Ajoutez une règle pour rediriger le traffic HTTPS entrant vers le NAS Synology et cliquez sur
Create
- Application/Service : Reverse Proxy HTTPS
- Internal Port : 443
- External Port : 443
- Protocol : TCP
- Equipment : 192.10.10.2
- External IP : All
Creation et mise à jour des DNS Gandi.net
Attention : la prise en compte d’un changement de DNS peut mettre plusieurs heures en fonction de sa configuration.
Pour créer et mettre à jour les informations sur le DNS de Gandi.net, nous allons utiliser l’API publique de Gandi.net et créer un script qui sera exécuté directement sur le NAS Synology.
Création d’un répertoire sur le NAS pour stocker le script à exécuter
- Allez dans l’application
File Station
- Naviguez jusqu’au répertoire
Share
- Créer un sous-répertoire
Script
Note : L’adresse complète du répertoire sera volume1/Share/Script
Création d’un script nommé Gandi_Update_DNS.sh
Le script Gandi_Update_DNS.sh
doit être créé dans le répertoire volume1/Share/Script
du NAS Synology.
Nous définissons les paramètres important du script au début :
- Le jeton d’accès à l’API Gandi sera dans la variable :
TOKEN_GANDI
- Le nom du domaine sera dans la variable :
DOMAIN_GANDI
- La liste des sous domaines à mettre à jour seront dans la variable :
RECORDS_GANDI
A partir de ces informations, nous allons pouvoir mettre en place le script suivant :
1#!/bin/sh
2
3# Configure data
4TOKEN_GANDI="<testing_dns_pat>"
5DOMAIN_GANDI="testing.com"
6RECORDS_GANDI="share vpn game todo" #subdomain listing
7RECORD_TYPE_GANDI="A"
8RECORD_TTL_GANDI="1200"
9
10RECORD_GANDI=$(echo $RECORDS_GANDI | cut -d" " -f1)
11
12# 1. Get Public IP
13CURRENTIP_GANDI=$(curl -s -4 ifconfig.co/ip)
14IPLENGTH_GANDI=$(echo -n ${CURRENTIP_GANDI} | wc -m)
15
16# Check that ifconfig.io give me an IP
17if [ -z "${CURRENTIP_GANDI}" ]
18then
19 echo "\n$(date +"%Y-%m-%d %H:%M:%S") - Error - CURRENTIP_GANDI is empty"
20 exit 1
21fi
22
23if [ ${IPLENGTH_GANDI} -gt 16 ] || [ ${IPLENGTH_GANDI} -lt 7 ]
24then
25 echo "\n$(date +"%Y-%m-%d %H:%M:%S") - Error - CURRENTIP_GANDI issue : [${CURRENTIP_GANDI}]"
26 exit 1
27fi
28
29
30# 2. Get gandi's NS for my domain
31NS_GANDI=$(curl -X GET "https://api.gandi.net/v5/livedns/domains/${DOMAIN_GANDI}/nameservers" -H "authorization: Bearer ${TOKEN_GANDI}" | jq '.[0]' | sed 's/"//g')
32
33# 3. Get the last IP recorded
34LASTREGISTEREDIP_GANDI=$(/var/packages/DNSServer/target/bin/dig +short ${RECORD_GANDI}.${DOMAIN_GANDI} @${NS_GANDI})
35LASTREGISTEREDIPLENGTH_GANDI=$(echo -n ${LASTREGISTEREDIP_GANDI} | wc -m)
36
37if [ -z "${LASTREGISTEREDIP_GANDI}" ]
38then
39 echo "\n$(date +"%Y-%m-%d %H:%M:%S") - Error - LASTREGISTEREDIP_GANDI is empty"
40 exit 1
41fi
42
43if [ ${LASTREGISTEREDIPLENGTH_GANDI} -gt 16 ] || [ ${LASTREGISTEREDIPLENGTH_GANDI} -lt 7 ]
44then
45 echo "\n$(date +"%Y-%m-%d %H:%M:%S") - Error - LASTREGISTEREDIP_GANDI issue : [${LASTREGISTEREDIP_GANDI}]"
46 exit 1
47fi
48
49
50# 4. Update if needed
51if [ "${CURRENTIP_GANDI}" != "${LASTREGISTEREDIP_GANDI}" ]
52then
53 for SUB_GANDI in $RECORDS_GANDI; do # Loop on all domaine to use the same IP Address
54 echo "\n$(date +"%Y-%m-%d %H:%M:%S") - Info - DNS Record for [$SUB_GANDI] sent"
55 curl -X PUT https://api.gandi.net/v5/livedns/domains/${DOMAIN_GANDI}/records/${SUB_GANDI}/${RECORD_TYPE_GANDI} \
56 -H "authorization: Bearer ${TOKEN_GANDI}" \
57 -H "Content-Type: application/json" \
58 -d "{\"rrset_values\": [\"${CURRENTIP_GANDI}\"], \"rrset_ttl\": "${RECORD_TTL_GANDI}"}"
59 done
60 echo "\n$(date +"%Y-%m-%d %H:%M:%S") - Info - DNS Record has changed !!!!"
61 exit 2
62fi
63
64exit 0
Les grandes étapes sont les suivantes :
curl -s -4 ifconfig.co/ip
(résultat :90.125.62.14
) : Récupération de notre adresse IP publique actuellecurl -X GET "https://api.gandi.net/v5/livedns/domains/${DOMAIN_GANDI}/nameservers" -H "authorization: Bearer ${TOKEN_GANDI}" | jq '.[0]' | sed 's/"//g'
: Récupération dunameserver
principal de Gandi.net pour notre domainetesting.com
/var/packages/DNSServer/target/bin/dig +short ${RECORD_GANDI}.${DOMAIN_GANDI} @${NS_GANDI}
: Récupération de l’adresse IP publique enregistrée dans le DNS de Gandi.net pour le domainetesting.com
- Dans le cas où l’adresse IP publique actuelle est différente de l’adresse IP publique enregistrée dans le DNS de Gandi.net alors on met à jour l’information pour chaque sous domaine renseigné.
Automatisation de l’exécution du script Gandi_Update_DNS.sh
Pour exécuter automatiquement un script sur le NAS Synology, les étapes sont les suivantes :
- Cliquez sur le menu
Main menu
(en haut à gauche sur l’écran principal) - Cliquez sur l’application
Control Panel
- Cliquez sur le menu
Task Scheduler
- Cliquez sur le bouton
Create
et sélectionnez l’optionScheduled Task > User-defined script
- Renseignez les informations de l’onglet
General
et cochez la caseEnabled
- Renseignez les informations de l’onglet
Schedule
avec la fréquence et l’horaire d’exécution du script - Renseignez les informations de l’onglet
Task Settings
- Cochez la case
Send run details by email
- Cochez la case
Send run details only when the scrip terminates abnormally
- Renseignez votre mail pour recevoir les informations en cas d’erreur du script
- Renseignez la commande a exécuter dans
User-defined script
. La commande estbash <script path>/Gandi_Update_DNS.sh
- Cochez la case
- Cliquez sur le bouton
OK
- Renseignez les informations de l’onglet
- Vérifiez que la case est bien cochée pour le script ajouté dans l’écran récapitulatif
Résultat de l’exécution du script Gandi_Update_DNS.sh
Mise en place du Proxy inversé sur le NAS Synology
Se connecter au NAS Synology et suivre les étapes suivantes :
- Cliquez sur le menu
Main menu
(en haut à gauche sur l’écran principal) - Cliquez sur l’application
Control Panel
- Cliquez sur le menu
Login Portal
- Cliquez sur l’onglet
Advanced
- Cliquez sur le bouton
Reverse Proxy
- Cliquez sur le bouton
Create
- Renseignez les éléments suivant pour la redirection de l’adresse
vpn.testing.com
vers le serveur n°1 (192.10.10.10) et cliquez sur le boutonSave
- Reverse Proxy Name :
VPN (HTTPS)
- Source
- Protocol :
HTTPS
- Hostname:
vpn.testing.com
- Port :
443
- Protocol :
- Destination :
- Protocol :
HTTPS
- Hostname :
192.10.10.10
- Port :
443
- Protocol :
- Reverse Proxy Name :
- Recommencez l’opération pour la redirection de l’adresse
game.testing.com
vers le serveur local n°2 (192.10.10.20)- Reverse Proxy Name :
GAME (HTTP)
- Source
- Protocol :
HTTP
- Hostname:
game.testing.com
- Port :
80
- Protocol :
- Destination :
- Protocol :
HTTP
- Hostname :
192.10.10.20
- Port :
80
- Protocol :
- Reverse Proxy Name :
- Recommencez l’opération pour la redirection de l’adresse
todo.testing.com
vers le serveur local n°3 (192.10.10.30)- Reverse Proxy Name :
TODO (HTTP)
- Source
- Protocol :
HTTP
- Hostname:
todo.testing.com
- Port :
80
- Protocol :
- Destination :
- Protocol :
HTTP
- Hostname :
192.10.10.30
- Port :
80
- Protocol :
- Reverse Proxy Name :
Résultat de la configuration du Proxy inversé :