Un nom de domaine avec une adresse IP qui nâest pas fixe, comment on sâen sort ?
La fonction dâun nom de domaine est de permettre de retrouver lâadresse IP dâune machine Ă partir dâun nom. Ce service doit donc connaĂźtre lâadresse de la machine mĂȘme si celle-ci change.
Voici une solution si votre domaine est chez [Gandi.net]. Lien supprimé.
Attention :
Gandi a Ă©tĂ© rachetĂ© en 2023 par un fonds dâinvestissement. Historiquement les noms de domaines Ă©taient livrĂ©s avec 2 ou 4 boites mails, dĂšs le rachat, les vautours qui gĂšrent maintenant Gandi ont dĂ©cidĂ©s que ce ne serait plus le cas (nouveau client, comme anciens). Je mâinterroge sur lâaspect lĂ©gal, mais finalement câest pas trĂšs important, car clairement ce type de service nĂ©cessite de la confiance, et ce type de changement de contrat unilatĂ©ral montre que le fournisseur nâest pas fiable.
En 2024 les prix ont simplement presque été multipliés par 3 pour les noms de domaines sans adresse mail.
Ce billet ainsi que le code associé ne sera plus mis à jour et en aucun cas ce billet est un conseille pour utiliser les services de Gandi.
Sachez que la plupart des gros fournisseurs de services propose le mĂȘme type dâAPI.
Contexte
Vous souhaitez exposer un service (un ordinateur particulier) derriĂšre une box (Ă votre domicile) cependant vous fournisseurs dâaccĂšs internet (FAI) ne vous propose pas dâadresse IP fixe.
La solution proposée se limite à une box en IPv4, pour une box en IPv6 des adaptations seront à prévoir.
Vous disposez :
- dâune box en IPv4,
- dâun ordinateur proposant un service (par exemple un serveur web),
- dâun nom de domaine chez Gandi et la clĂ© dâAPI correspondante.
Préliminaires
Ce billet nâa pas vocation Ă expliquer en dĂ©tail comment exposer un service, mais voici quelques Ă©lĂ©ments :
Vous devez commencer par configurer votre box afin quâelle accepte les connexions entrantes. En gĂ©nĂ©ral on trouve cela dans une rubrique nommĂ©e « Redirection de ports » en IPv4 cela peut ĂȘtre associĂ© Ă la notion de « NAT » (Network address translation) et en IPv6 au « Filtrage dâadresses ».
Dans le cas dâune BOX en IPv4Â :
Pour cela vous devez identifier lâadresse IP de la machine sur le rĂ©seau local et le ou les ports que vous souhaitez exposer.
Pour lâexemple on considĂ©ra que :
- Sur le rĂ©seau local lâordinateur Ă lâadresse IP : 192.168.1.191,
- Les services se trouve sur les ports 80 et 433 (en internet et en externe) et quâils utilisent le protocole TCP.
En IPv4, vous devrez configurer la redirection de ports :
Protocole | Ports externes | IP de destination | Ports internes |
---|---|---|---|
TCP | 443 | 192.168.1.191 | 443 |
TCP | 80 | 192.168.1.191 | 80 |
Les libellĂ©s et les champs dĂ©pendent de votre box, mais vous devez trouver quelque chose de similaire dans lâinterface dâadministration.
Le tableau ci-dessus propose lâexemple dâun serveur web rĂ©pondant en http et en https.
Concernant la valeur du champ protocole, câest soit TCP, soit UDP, soit TCP/UDP*. Sur vous avec un doute sachez quâil est plus probable que vous ayez besoin que de TCP. Si ce nâest pas le cas, câest gĂ©nĂ©ralement bien documenter par le service que vous souhaitez exposer.
Le code associé
Le code se compose de fichiers bash (attention BusyBox nâest pas supportĂ©) qui nĂ©cessite la commande curl et qui Ă pour vocation la mise Ă jour de la configuration Gandi et en particulier le DNS.
- Le fichier
gandi-config-commons-api.sh
contient des fonctions globales, vous devez « sourcer » ce fichier avant dâutiliser les autres fichiers*-api.sh
- Le fichier
gandi-config-dns-api.sh
contient les fonctions suivantes :
La plupart des fonctions nécessitent que la variable GANDI_CONFIG_API_KEY
contienne votre clĂ© dâapi de Gandi,
certaines nécessitent la variable GANDI_CONFIG_DNS_DEFAULT_TTL
.
gandi_config_dns_get_external_ip
â Retourne lâIP externe (IP de la box).gandi_config_dns_get_href_for_domain DOMAIN_NAME
â Retourne la rĂ©fĂ©rence pour la zone (zone_records_href).gandi_config_dns_get_records_for_domain DOMAIN_NAME
â Retourne toutes les entrĂ©es du domaine.gandi_config_dns_auto_update_A_record DOMAIN_NAME SUBDOMAINE_NAME TTL
â CrĂ©er ou mettre a jour une entrĂ©e de type A avec l'ip externe.gandi_config_dns_update_A_record DOMAIN_NAME SUBDOMAINE_NAME TTL IP
â CrĂ©er ou mettre Ă jour une entrĂ©e de type A avec l'ip donnĂ©e.gandi_config_dns_update_A_record_from_href DOMAIN_HREF SUBDOMAINE_NAME TTL IP
â CrĂ©er ou mettre Ă jour une entrĂ©e de type A avec l'ip donnĂ©e.- `gandi_config_dns_create_record_from_href DOMAIN_HREF SUBDOMAINE_NAME TYPE TTL IP â CrĂ©er ou mettre Ă jour une entrĂ©e du type donnĂ© avec lâIP donnĂ©e.
gandi_config_dns_update_domain_from_JSON IP DOMAIN_JSON_STR
-gandi_config_dns_update_domains_from_JSON IP DOMAINS_JSON_FILE
--
Le fichier
gandi-config-dns-update.sh
est un script bash exĂ©cutable, qui utilise lâAPI ci-dessus.
La commande prend les paramĂštres suivants (tous facultatifs)Â :
gandi-config-dns-update.sh --help
gandi-config-dns-update.sh [--api-key KEY] [--config JSONFILE] [--ip IP_ADDRESS] [--ttl TTL] [--debug]
Option | Format long | Description |
---|---|---|
-h | --help | Affiche lâaide et quitte. |
--api-key KEY | Permet de dĂ©finir la clĂ© dâAPI de Gandi depuis la ligne de commande (la valeur correspondante du fichier de configuration sera ignorĂ©e) | |
-c JSONFILE | --config JSONFILE | DĂ©fini lâemplacement du fichier de configuration |
--ip IP_ADDRESS | Adresse IP a utilisĂ©e pour les sous-domaines. Si cette valeur nâest pas fournie le script essayera de dĂ©terminer la valeur automatiquement | |
--ttl TTL | Permet de définir la valeur TTL à utiliser depuis la ligne de commande (la valeur correspondante du fichier de configuration sera ignorée) | |
-D | --debug | Affiche des traces complĂ©mentaires lors de lâexĂ©cution. |
Si lâoption --config
nâest pas prĂ©cisĂ©e la configuration sera recherchĂ© Ă travers les fichiers suivants dans cet ordre :
- Dans le répertoire courant :
gandi-config.json
${HOME}/.config/gandi-config.json
/etc/gandi-config.json
/root/gandi-config.json
Notez que le script doit pouvoir lire le fichier, faites attention aux droits utilisateurs, car le contenu de fichier est sensibleâŠ
Format du fichier de configuration :
{
"gandi": {
"global": {
"api-key": "ZzZzZzZzZzZzZzZzZzZzZzZz",
"ip": {
"last-ip-file": "/etc/last-external-ip",
"logfile": "/var/log/pi/external-ip.log"
},
"ttl": 1200
},
"domains": [
{
"name": "exemple.org"
"hosts": [
"@",
"blog",
"drive",
"git",
"www"
]
},
{
"name": "exemple2.org"
"hosts": [
"@",
"cdn",
"www"
]
}
]
}
}
Liens
- [Documentation de lâAPI Gandi] Lien supprimĂ©
኿