Skip to content

WAN et DDNS

Vincent Fortier edited this page Dec 3, 2019 · 5 revisions

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 OpwnWRT 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 (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.). 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>)." 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:

  • 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 🔃.

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>".

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.<DOMAIN>': Name or service not known
170914  WARN : Get registered/public IP for 'home.<DOMAIN>' 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:~# 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:~# dig @ns2.he.net +short home.<domain>
<IP>

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

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

Google:

root@openwrt:~# dig @8.8.8.8 +short home.<domain> NS
root@openwrt:~# 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:~# dig @localhost +short home.<domain> NS
root@openwrt:~# dig @localhost +short home.<domain>

DDNS

Installation

Il y a plusieurs variantes au niveau des prérequis à ddns-scripts. Il est possible d'utiliser wget seul, sinon ca-certificates conjointement avec l'un ou l'autre des paquets suivants:

  • curl
  • libustream-mbedtls20150806
  • libustream-openssl20150806
  • libustream-wolfssl20150806 Sur un routeur avec très peu d'espace disque je recommande la conjonction de ca-certificates puisque requis pour plusieurs autres outils (ex: stubby) conjointement avec libustream-openssl20150806.

Installer quelques paquets requis:

root@openwrt:~# opkg update
root@openwrt:~# opkg install ddns-scripts luci-app-ddns ca-certificates libustream-openssl20150806

IPv4

Remplacer les paramètres et avec vos propres valeurs ainsi que avec la clé générée chez Hurricane Electric. À noter que 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.

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

IPv6

Procédure similaire à IPv4:

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 votre fournisseur de service n’offre pas le IPv6 alors l'instance du démon DDNS associé à IPv6 doit être désactivée par défaut.

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

Debug

Pour un accès rapide aux journaux DDNS:

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

Démarrage

Démarrer le démon DDNS:

root@openwrt:~# /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: