DynDNS avec un routeur MikroTik

Skip to main content
Du bist hier:
Drucken

DynDNS avec un routeur MikroTik

DynDNS avec un routeur MikroTik

Si votre raccordement internet ne dispose pas d’une adresse IP fixe, vous pouvez faire mettre à jour automatiquement un enregistrement DNS chez FireStorm par votre routeur MikroTik. Le routeur contrôle son adresse IP WAN à intervalles rapprochés et signale tout changement via notre API DNS. Ainsi, un nom comme vpn.votredomaine.ch reste toujours joignable, sans passer par un fournisseur DynDNS externe.

Le script est volontairement économe. Il résout d’abord l’enregistrement via un résolveur public. Si l’adresse IP correspond déjà, l’exécution se termine sans aucun appel à l’API. Ce n’est qu’en cas de différence qu’il lit la valeur actuelle chez nous et met l’enregistrement à jour.

 

Conditions préalables

  • Le domaine doit pointer vers nos serveurs de noms, la zone DNS doit donc être hébergée chez FireStorm
  • L’accès API doit être activé dans l’espace client (admin.firestorm.ch => Compte => Profil client)
  • Un MikroTik avec RouterOS 7
  • L’enregistrement DNS à mettre à jour doit déjà exister. Créez-le une fois dans l’espace client avec une adresse IP quelconque et un TTL de 60

 

1. Créer une clé API

Connectez-vous à l’espace client et ouvrez Compte => Profil client.

Menu Compte avec l'entrée Profil client

Cochez Accès API et cliquez sur GÉRER LES CLÉS API.

Activer l'accès API et ouvrir la gestion des clés API

Créez une nouvelle clé :

  • Désignation : par exemple dyndns mikrotik
  • Domaines : ne sélectionnez que le domaine que le routeur a le droit de modifier
  • Autoriser aussi la gestion DNS complète : cochez cette case. Sans cette autorisation, la clé ne peut que poser des challenges de certificat, pas modifier un enregistrement A

Dialogue de gestion des clés API avec désignation, choix des domaines et autorisation

Notez ensuite le nom d’utilisateur et la clé API. La clé n’est affichée qu’une seule fois.

 

2. Trouver l’ID de zone

Le script travaille avec l’ID numérique de la zone, que l’API vous fournit. L’appel suivant fonctionne sur tout ordinateur disposant de curl, par exemple sur Mac, sous Linux ou dans Windows PowerShell :

curl -H "X-Api-Key: VOTRE-CLE-API" https://api.firestorm.ch/dns/v1/zones

La réponse contient toutes les zones auxquelles la clé a accès, chacune avec un id et un name. Vous indiquerez plus tard l’id de votre domaine dans le script.

 

3. Importer le certificat racine dans le routeur

RouterOS ne contient aucune autorité de certification par défaut. Pour que le routeur puisse réellement vérifier la connexion à notre API, importez une seule fois le certificat racine ISRG Root X1 de Let’s Encrypt. Sans cette étape, il faudrait désactiver la vérification du certificat, ce que nous ne recommandons pas.

Téléchargez le fichier isrgrootx1.pem depuis letsencrypt.org/certs/isrgrootx1.pem et glissez-le dans la zone Files de Winbox. Ensuite, dans le terminal :

/certificate import file-name=isrgrootx1.pem passphrase=""

Le routeur peut aussi chercher le fichier lui-même :

/tool fetch url="https://letsencrypt.org/certs/isrgrootx1.pem" check-certificate=no
/certificate import file-name=isrgrootx1.pem passphrase=""

Vérifiez avec l’appel suivant que la connexion vérifiée fonctionne. Si une liste de zones revient, tout est prêt :

/tool fetch url="https://api.firestorm.ch/dns/v1/zones" http-header-field="X-Api-Key: VOTRE-CLE-API" check-certificate=yes-without-crl as-value output=user

 

4. Créer le script

Téléchargez le script : firestorm_mikrotik_dyndns.rsc

Dans Winbox ou WebFig, allez sous System => Scripts, cliquez sur [+], saisissez un nom, par exemple firestorm_dyndns_update, et cochez les autorisations read, write, policy et test. Collez le contenu du fichier et adaptez les réglages en haut :

Réglage Signification
apiUser Nom d’utilisateur de l’étape 1
apiKey Clé API de l’étape 1
zoneId ID de zone de l’étape 2
recordName Nom complet de l’enregistrement, par exemple vpn.votredomaine.ch
recordType A pour IPv4 ou AAAA pour IPv6
wanInterface Nom de votre interface WAN. Avec PPPoE, ce n’est pas ether1 mais par exemple pppoe-out1
ttl Durée de validité en secondes, 60 recommandé

Cliquez ensuite sur Run Script et consultez le Log. Vous y verrez si l’enregistrement était déjà à jour ou s’il vient d’être modifié.

 

5. Programmer l’exécution

Sous System => Scheduler, cliquez sur [+] :

  • Name : par exemple FirestormDyndns
  • Interval : 00:05:00 pour un contrôle toutes les cinq minutes
  • On Event : exactement le nom de votre script, par exemple firestorm_dyndns_update
  • Policies : cochez ici aussi read, write, policy et test

Script et scheduler avec les autorisations read, write, policy et test

Le routeur contrôle désormais tout seul et ne nous signale un changement que lorsque l’adresse IP a réellement changé.

 

Dépannage

« Aucune adresse correspondante trouvée sur l’interface … »
Le nom d’interface saisi est incorrect. Sous IP => Addresses, vous voyez sur quelle interface se trouve votre adresse publique. Sur les raccordements PPPoE, il s’agit de la connexion pppoe-out.

« Échec de la requête API »
Le plus souvent, le certificat racine de l’étape 3 manque, ou la clé est incorrecte. Testez l’appel de l’étape 3 à la main.

« L’enregistrement … n’existe pas dans la zone … »
Le script ne crée aucun nouvel enregistrement, il ne fait que mettre à jour ceux qui existent. Créez l’enregistrement une fois dans l’espace client.

Réponse « Record not found » lors de la mise à jour
L’enregistrement a été modifié à la main entre-temps. Le script relit la valeur actuelle lors de son prochain passage et se corrige de lui-même.

Le routeur se trouve derrière un raccordement sans IP publique
Si votre fournisseur ne vous attribue qu’une adresse privée, par exemple dans la plage 100.64.x.x, le script inscrit exactement cette adresse et le nom reste injoignable depuis l’extérieur. Dans ce cas, il vous faut une adresse IP publique auprès de votre fournisseur.

 

D’autres instructions sur notre interface se trouvent dans l’article API DNS. Ce script nous a aimablement été mis à disposition par l’un de nos clients.

Related Post