cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

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.


ඏ

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

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog