Avant d’être en mesure d’activer le service de résolution de nom de domaine via une adresse WAN dynamique (DDNS) il est primordial d’avoir une adresse IP directement sur le segment publique (WAN) sans quoi il devient impossible de mettre cette mesure en place suivant la méthode proposée. Certains fournisseurs de service offrent une solution tout-en-un incluant un service de réseau LAN auquel il nous est impossible de se soustraire. Dans un tel cas notre routeur OpenWRT|LEDE devient masqué derrière le réseau LAN du fournisseur de service empêchant l’accès WAN natif et réduisant les performances dû au double-NAT.

Dans la procédure qui suit on présume que:

  • votre routeur possède une adresse IPv4 ou IPv6 native sur le WAN
  • vous possédez un nom de domaine valide chez un registraire de votre choix

Délégation d'un sous-domaine

Advenant que le registraire de votre choix où vous avez enregistré votre nom de domaine n'offre pas de service DDNS "compatible" avec OpenWRT|LEDE (voir la liste des registraires DDNS compatibles) il est alors requis d'y créer un sous-domaine (exemple: “home”) et de le déléguer à un autre registraire reconnu. Mon expérience avec Hurricane Electric Internet Services fut somme toute positive et le service DDNS y est gratuit!

Dans l'exemple qui suit on ajoute à notre configuration DNS (type bind) chez notre registraire une délégation de type NS pour sous domaine "home" vers chacun des serveurs offerts par le fournisseurs DDNS (dans le cas présent Hurricane Electric):

home 10800 IN NS ns2.he.net.
home 10800 IN NS ns3.he.net.
home 10800 IN NS ns4.he.net.
home 10800 IN NS ns5.he.net.

Ensuite on souscrit un compte chez Hurricane Electric Internet Services et l'on y ajoute le domaine nouvellement délégué (dans notre exemple: home.<domain>). Si vous obtenez l'erreur: "Zone failed validation test. ERROR: Delegation was not found. Please delegate to ns1, ns2, ns3, ns4 and ns5.he.net then retry. (<domain> / home.<domain>)." il s'agit alors que votre configuration de délégation est invalide ou encore que la propagation à l'ensemble des serveurs DNS du registraire d'origine n'est pas encore complétée. Vérifiez de nouveau votre configuration et allouez quelques minutes de plus afin que la propagation DNS aie lieu.

Une fois le domaine ajouté chez Hurricane Electric, éditer la nouvelle zone et ajouter une entrée de type “A Record” avec les propriétés suivante:

Type-A Record - Hurricane Electric

  • Name: @ (détectera votre adress IP WAN actuelle automatiquement)
  • Enable entry for dynamic dns
  • Time To Live” (TTL) à 3600 secondes (1h) - Certains registraires refusent un délai moindre (he.net propose par défaut 5 minutes i.e. 300 secondes)

À cette nouvelle entrée y générer une clé DDNS via l’icône 🔃.

he.net-GenerateKey.png

La fenêtre suivante proposera l'option “Generate a key” auquel il est essentiel de conserver copie pour les étapes suivantes. Vous obtiendrez alors le message "Successfully generated key for dynamic record home.<domain>".

he.net-GenerateKey-SubWindow.png

Résolution DNS native à partir du routeur OpenWRT

OpenWRT par défaut transmet les requêtes DNS en provenance des différents réseaux LAN vers les DNS reçus du WAN automatiquement via le démon DNSmasq. Cependant le routeur en lui-même n’est pas configuré pour traiter ses propres requêtes. Afin de changer ce comportement il suffit de lui spécifier d'utiliser un autre fichier de résolution:

root@OpenWRT|LEDE:~# ls -la /etc/resolv.conf
lrwxrwxrwx    1 root     root       16 Feb  2  2016 /etc/resolv.conf -> /tmp/resolv.conf
root@OpenWRT|LEDE:~# rm /etc/resolv.conf
root@OpenWRT|LEDE:~# ln -nsf /tmp/resolv.conf.auto /etc/resolv.conf
root@OpenWRT|LEDE:~# ls -la /etc/resolv.conf
lrwxrwxrwx    1 root     root       16 Feb  2  2016 /etc/resolv.conf -> /tmp/resolv.conf.auto

Autrement si le routeur n’est pas en mesure de traiter ses propres requêtes DNS alors le service DDNS ne fonctionnera tout simplement pas. Voici un extrait d'erreurs provenant des journaux contenus à /var/log/ddns/* dans un tel cas:

170914 ERROR : BusyBox nslookup error: '1'
170914       : nslookup: can't resolve 'home.th0ma7.com': Name or service not known
170914  WARN : Get registered/public IP for 'home.th0ma7.com' failed - retry 224/0 in 60 seconds

Il est donc primordial de tester la résolution de votre propre adresse via plusieurs fournisseurs DNS. Il est important d'allouer de 15 à 30 minutes avant que la propagation de nouvelles entrées DNS aie lieu (certains mentionne même jusqu'à 3h!).

Autre note importante, la commande dig est très puissante mais son installation nécessite les paquets bind-dig et bind-libs qui à eux-seuls prennent près de 1Mo d'espace! Sur un routeur à 4Mo à 8Mo cela revient à nous priver d'espace essentiel! Je recommande de d'installer puis désinstaller cet outil lorsque complété.

Hurricane Electric:

root@OpenWRT|LEDE:~# dig @ns2.he.net +short home.<domain> NS
ns5.he.net.
ns3.he.net.
ns2.he.net.
ns1.he.net.
ns4.he.net.
root@OpenWRT|LEDE:~# dig @ns2.he.net +short home.<domain>
<IP>

Votre fournisseur de service par défaut (voir /tmp/resolv.conf.auto):

root@OpenWRT|LEDE:~# dig @<ISP-DNS> +short home.<domain> NS
root@OpenWRT|LEDE:~# dig @<ISP-DNS> +short home.<domain>

Google:

root@OpenWRT|LEDE:~# dig @8.8.8.8 +short home.<domain> NS
root@OpenWRT|LEDE:~# dig @8.8.8.8 +short home.<domain>

OpenWRT par défaut (via 127.0.0.1 faisant appel à /tmp/resolv.conf.auto):

root@OpenWRT|LEDE:~# dig @localhost +short home.<domain> NS
root@OpenWRT|LEDE:~# dig @localhost +short home.<domain>

DDNS installation

Installer quelques paquets requis:

root@OpenWRT|LEDE:~# opkg update
root@OpenWRT|LEDE:~# opkg install ddns-scripts luci-app-ddns wget

Les paquets curl et ca-certificates sont optionnels puisque la commande wget sera préférée si disponible et Hurricane Electric utilise un certificat "self-signed" et n'est donc pas contenu dans le paquet ca-certificates.

DDNS configuration

Hurricane Electric utilise un certificat “Self-Signed” par conséquent il est nécessaire de désactiver la validation du certificat lorsque l’on active la mise à jour via HTTPS.

À noter aussi que si votre fournisseur de service n’offre pas le IPv6 alors l'instance du démon DDNS associé à IPv6 devra dorénavant être désactivée manuellement. Auparavant il se désactivait de lui-même sous OpenWRT 15.05 suivant sa première tentative ne laissant que le démon associé à votre adresse IPv4 en fonction. Ce comportement à changé avec les nouvelles version de OpenWRT et LEDE et il doit être désactivé manuellement (uci set ddns.myddns_ipv6.enabled='0') .

Remplacer les paramètres <Domain> et <Username> avec vos propres valeurs ainsi que <GeneratedKey> avec la clé générée chez Hurricane Electric.

IPv4:

uci set ddns.myddns_ipv4.service_name='he.net'
uci set ddns.myddns_ipv4.lookup_host='home.<Domain>'
uci set ddns.myddns_ipv4.domain='home.<Domain>'
uci set ddns.myddns_ipv4.username='<Username>'
uci set ddns.myddns_ipv4.password='<GeneratedKey>'
uci set ddns.myddns_ipv4.enabled='1'
uci changes ddns
uci commit

Si l’on veut utiliser le HTTPS pour les mise à jour (recommandé):

uci set ddns.myddns_ipv4.use_https='1'
uci set ddns.myddns_ipv4.cacert='IGNORE'
uci changes ddns
uci commit

Si l’on a besoin d'accès rapide aux journaux DDNS:

uci set ddns.myddns_ipv4.use_logfile='1'
uci changes ddns
uci commit

IPv6:

uci set ddns.myddns_ipv6.service_name='he.net'
uci set ddns.myddns_ipv6.lookup_host='home.<Domain>'
uci set ddns.myddns_ipv6.domain='home.<Domain>'
uci set ddns.myddns_ipv6.username='<Username>'
uci set ddns.myddns_ipv6.password='<GeneratedKey>'
uci set ddns.myddns_ipv6.enabled='1'
uci changes ddns
uci commit

Si l’on veut utiliser le HTTPS pour les mise à jour (recommandé):

uci set ddns.myddns_ipv6.cacert='IGNORE'
uci set ddns.myddns_ipv6.use_https='1'
uci changes ddns
uci commit

Si notre fournisseur n'offre pas de IPv6 alors on désactive le démon:

uci set ddns.myddns_ipv6.enabled='0'
uci changes ddns
uci commit

Si l’on a besoin d'accès rapide aux journaux DDNS:

uci set ddns.myddns_ipv6.use_logfile='1'
uci changes ddns
uci commit

Démarrer le démon DDNS:

root@OpenWRT|LEDE:~# /etc/init.d/ddns restart

Ne reste plus qu'à surveiller les journaux via logread ou avec les fichiers journaux associés à chacun des démons (si ddns.myddns_ipv4.enabled='1' et/ou ddns.myddns_ipv6.enabled='1'):

/tmp/log/ddns/myddns_ipv4.log
/tmp/log/ddns/myddns_ipv6.log

Si vous obtenez un succès un message se terminant par ce qui suit apparaîtra dans les journaux:

 173829       : ddns version  : 2.4.3-1
 173829       : verbose mode  : 0 - run normal, NO console output
 173829       : check interval: 600 seconds
 173829       : force interval: 259200 seconds
 173829       : retry interval: 60 seconds
 173829       : retry counter : 0 times
 173829       : No old process
 173829       : last update: never
 173829       : Detect registered/public IP
...
 173832       : DDNS Provider answered: good <IP>
 173832  info : Update successful - IP '<IP>' send
 173832       : Waiting 600 seconds (Check Interval)

Références: