{"id":677,"date":"2022-12-07T21:04:09","date_gmt":"2022-12-07T20:04:09","guid":{"rendered":"https:\/\/cisko.fr\/?p=677"},"modified":"2022-12-07T21:07:09","modified_gmt":"2022-12-07T20:07:09","slug":"configurer-un-dns-dynamique-avec-duckdns-et-nodered","status":"publish","type":"post","link":"https:\/\/cisko.fr\/?p=677","title":{"rendered":"Configurer un DNS dynamique avec DuckDNS et NodeRED"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">J&rsquo;ai derni\u00e8rement chang\u00e9 d&rsquo;op\u00e9rateur internet pour passer chez Sosh. \u00ab\u00a0Et vous, quand est-ce que vous passez chez &#8230;\u00a0\u00bb, euh NON ! Je connais pas Sosh, ni Orange en tant qu&rsquo;op\u00e9rateur internet pour particulier et je me disais \u00ab\u00a0bah une box, c&rsquo;est une box, du moment que ca me donne internet&#8230;\u00a0\u00bb b\u00e9h en fait non.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai d\u00e9j\u00e0 gal\u00e9r\u00e9 avec IPv6 et leur DHCP6 et annonce RA qui \u00e9crase mon pihole. Et maintenant que ma box vient de rebooter, je vois que plus aucune de mes machines n&rsquo;est accessible de l&rsquo;ext\u00e9rieu. J&rsquo;ai vite compris que mon IP avait chang\u00e9. Apr\u00e8s un moment de recherche, il n&rsquo;est pas possible de fixer l&rsquo;IP de sa connexion internet chez Sosh\/Orange.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons donc vois comment contourner ce probl\u00e8me en utilisant une entr\u00e9e DNS dynamique.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">C&rsquo;est quoi un DNS dynamique<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un DNS dynamique est un service qui permet de mettre \u00e0 jour automatiquement une entr\u00e9e DNS afin d&rsquo;acc\u00e9der \u00e0 des machines dont l&rsquo;IP peut changer spontan\u00e9ment. On pourra donc acc\u00e9der \u00e0 son serveur en tapant un nom de machine comme \u00ab\u00a0serveur1.mondomaine.fr\u00a0\u00bb qui lui sera fixe.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pourquoi DuckDNS ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il existe plusieurs \u00ab\u00a0soci\u00e9t\u00e9\u00a0\u00bb qui propose ce service, dont le plus connu DynDNS. Mais je ne voulais pas de payant (entre 33\u20ac et 48\u20ac\/an). Alors j&rsquo;ai cherch\u00e9 dans les API de mon registrar DNS, mais le miens ne fait pas ce service. Il y a bien OVH qui propose se service, mais il faut que son domaine soit enregistr\u00e9 chez eux et je voulais pas migrer mon domaine. En cherchant un peu, je suis tomb\u00e9 sur DuckDNS qui \u00e0 l&rsquo;air pas mal utilis\u00e9 dans le monde de la domotique avec des int\u00e9grations dans Home Assistant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je vais donc utiliser DuckDNS car il permet de mettre \u00e0 jour une entr\u00e9e DNS avec un simple requ\u00eate HTTPS. Je vais donc avoir ma propre int\u00e9gration, ind\u00e9pendante de la box qui est utilis\u00e9e, sous NodeRED sur lequel j&rsquo;ai mes automatisations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration  DuckDNS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons commencer par s&rsquo;enregistrer sur le site <a rel=\"noreferrer noopener\" href=\"https:\/\/www.duckdns.org\/\" data-type=\"URL\" data-id=\"https:\/\/www.duckdns.org\/\" target=\"_blank\">duckdns.org<\/a> et r\u00e9cup\u00e9rer un token. Pour s&rsquo;enregistrer, il faut lier DuckDNS \u00e0 une des plateformes suivantes : Personna, Twitter, Github, Google. Une fois connect\u00e9 \u00e0 votre compte saisir le sous-domaine que vous voulez puis cliquer sur le bouton vert \u00ab\u00a0add domain\u00a0\u00bb. Noter dans un coin le nom de domain ainsi que votre token.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"459\" src=\"https:\/\/cisko.fr\/wp-content\/uploads\/2022\/12\/DuckDNS-step-1024x459.png\" alt=\"\" class=\"wp-image-681\" srcset=\"https:\/\/cisko.fr\/wp-content\/uploads\/2022\/12\/DuckDNS-step-1024x459.png 1024w, https:\/\/cisko.fr\/wp-content\/uploads\/2022\/12\/DuckDNS-step-300x135.png 300w, https:\/\/cisko.fr\/wp-content\/uploads\/2022\/12\/DuckDNS-step-768x344.png 768w, https:\/\/cisko.fr\/wp-content\/uploads\/2022\/12\/DuckDNS-step-1536x689.png 1536w, https:\/\/cisko.fr\/wp-content\/uploads\/2022\/12\/DuckDNS-step.png 1835w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration NodeRED<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour cette automatisation, j&rsquo;ai d\u00e9cid\u00e9 de faire un contr\u00f4le avant afin de ne pas surcharger les serveurs DuckDNS (d\u00e9j\u00e0 que c&rsquo;est gratuit, on va pas consommer des ressources inutilement. Ca leur coute de l&rsquo;argent \u00e0 eux). Je regarde donc si l&rsquo;IP \u00e0 chang\u00e9e et je fait un requ\u00eate vers DuckDNS uniquement si elle a chang\u00e9.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"113\" src=\"https:\/\/cisko.fr\/wp-content\/uploads\/2022\/12\/NodeRED-flow-1024x113.png\" alt=\"\" class=\"wp-image-682\" srcset=\"https:\/\/cisko.fr\/wp-content\/uploads\/2022\/12\/NodeRED-flow-1024x113.png 1024w, https:\/\/cisko.fr\/wp-content\/uploads\/2022\/12\/NodeRED-flow-300x33.png 300w, https:\/\/cisko.fr\/wp-content\/uploads\/2022\/12\/NodeRED-flow-768x84.png 768w, https:\/\/cisko.fr\/wp-content\/uploads\/2022\/12\/NodeRED-flow-1536x169.png 1536w, https:\/\/cisko.fr\/wp-content\/uploads\/2022\/12\/NodeRED-flow.png 1738w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;automatisation se d\u00e9roule comme ceci :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Je fait donc un contr\u00f4le toutes les 15 minutes et uniquement en journ\u00e9e. J&rsquo;estime pouvoir attendre 15 minutes apr\u00e8s un reboot ; et la nuit je dors.<\/li>\n\n\n\n<li>En parall\u00e8le, je fais une r\u00e9solution DNS de mon nom de domaine via la commande nslookup ;<\/li>\n\n\n\n<li>Et je r\u00e9cup\u00e8re mon IP internet. Pour ce faire, je fais une requ\u00eate vers mon serveur Web sur lequel j&rsquo;ai d\u00e9pos\u00e9 une page PHP qui me retourne mon IP. Cette page contient le code suivant :<br><code>&lt;?php echo $_SERVER['REMOTE_ADDR']; ?&gt;<\/code><br>Vous pouvez des sites existants sur internet mais il faudra parser\/formater la r\u00e9ponse.<\/li>\n\n\n\n<li>Losque j&rsquo;ai les deux r\u00e9sultats, je les compare et transmet le message uniquement s&rsquo;ils sont diff\u00e9rents<\/li>\n\n\n\n<li>Puis je g\u00e9n\u00e8re la requ\u00eate vers DuckDNS en utilisant l&rsquo;URL suivante : <br><code>https:\/\/www.duckdns.org\/update?domains={votredomaine}&amp;token={votretoken}<\/code><br>Remplacer {votredomain} par le domaine enregistr\u00e9 au d\u00e9but, de m\u00eame pour {votretoken}<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est tout !! <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tests et conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour tester, on va ouvrir une invite de commande : WIN + R ; taper cmd ; ENTER ; taper nslookup mondomaine.duckdns.org ; ENTER<br>Avant la mise \u00e0 jour : <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;nslookup mondomaine.duckdns.org\nServeur :   livebox.home\nAddress:  2a01::0\nR\u00e9ponse ne faisant pas autorit\u00e9 :\nNom :    mondomaine.duckdns.org\nAddress:  182.X.X.1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Apr\u00e8s la mise \u00e0 jour :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;nslookup mondomaine.duckdns.org\nServeur :   livebox.home\nAddress:  2a01::0\nR\u00e9ponse ne faisant pas autorit\u00e9 :\nNom :    mondomaine.duckdns.org\nAddress:  212.X.X.193<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Voila, vous pouvez maintenant vous connecter chez vous lorsque vous n&rsquo;y \u00eates pas \u00e0 l&rsquo;aide d&rsquo;une URL alors que vous avez une IP dynamique. Ca peut \u00eatre votre NAS avec vos photos et musiques ; votre domotique ; ou bien d&rsquo;autres choses. Bien sur, en fonction de ce que voudrez acc\u00e9der, il faudra faire le n\u00e9cessaires pour autoriser les connexions venant d&rsquo;internet car sinon la box bloquera la connexion.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bonus<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous avez votre propre domaine vous pouvez faire un alias DNS qui pointera vers l&rsquo;entr\u00e9e de DuckDNS :<br><code>mondomaine.cisko.fr. CNAME mondomaine.duckdns.org<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;nslookup mondomaine.cisko.fr\nServeur :   livebox.home\nAddress:  2a01::0\nR\u00e9ponse ne faisant pas autorit\u00e9 :\nNom :    mondomaine.duckdns.org\nAddress:  212.X.X.193\nAliases:  mondomaine.cisko.fr<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Bonus 2<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Voici le flow NodeRED, vous n&rsquo;avez qu&rsquo;a l&rsquo;importer et changer votre domaine et votre token.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;{\"id\":\"aecd3f77f31fd53e\",\"type\":\"comment\",\"z\":\"30e591de3ccfa354\",\"name\":\"Update Duck DNS dynamique\",\"info\":\"\\n\",\"x\":160,\"y\":1160,\"wires\":&#91;]},{\"id\":\"fa0a5f107e626467\",\"type\":\"exec\",\"z\":\"30e591de3ccfa354\",\"command\":\"nslookup\",\"addpay\":\"payload\",\"append\":\"\",\"useSpawn\":\"false\",\"timer\":\"\",\"winHide\":false,\"oldrc\":false,\"name\":\"\",\"x\":340,\"y\":1200,\"wires\":&#91;&#91;\"217d92a56fd27ccd\"],&#91;],&#91;]]},{\"id\":\"daa2b7ee5f14b611\",\"type\":\"inject\",\"z\":\"30e591de3ccfa354\",\"name\":\"Start\",\"props\":&#91;{\"p\":\"payload\"},{\"p\":\"topic\",\"vt\":\"str\"}],\"repeat\":\"\",\"crontab\":\"*\/15 6-23 * * *\",\"once\":false,\"onceDelay\":0.1,\"topic\":\"\",\"payload\":\"mondomaine.cisko.fr\",\"payloadType\":\"str\",\"x\":110,\"y\":1200,\"wires\":&#91;&#91;\"fa0a5f107e626467\",\"41a417cd136aac8e\"]]},{\"id\":\"217d92a56fd27ccd\",\"type\":\"function\",\"z\":\"30e591de3ccfa354\",\"name\":\"formatage\",\"func\":\"var filter = \/mondomaine\\\\.duckdns\\\\.org&#91;\\\\n\\\\r].* (((25&#91;0-5]|(2&#91;0-4]|1\\\\d|&#91;1-9]|)\\\\d)\\\\.?\\\\b){4})\/\\n\\nmsg.topic = \\\"dnsIP\\\"\\nmsg.payload = msg.payload.match(filter)&#91;1]\\n\\n\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":&#91;],\"x\":530,\"y\":1200,\"wires\":&#91;&#91;\"6241773d392ed895\"]]},{\"id\":\"41a417cd136aac8e\",\"type\":\"http request\",\"z\":\"30e591de3ccfa354\",\"name\":\"get(monIP)\",\"method\":\"GET\",\"ret\":\"txt\",\"paytoqs\":\"ignore\",\"url\":\"https:\/\/cisko.fr\/get_WAN_IP.php\",\"tls\":\"\",\"persist\":false,\"proxy\":\"\",\"insecureHTTPParser\":false,\"authType\":\"\",\"senderr\":false,\"headers\":&#91;],\"credentials\":{\"user\":\"\",\"password\":\"\"},\"x\":350,\"y\":1260,\"wires\":&#91;&#91;\"26685b4e1b8075e3\"]]},{\"id\":\"6241773d392ed895\",\"type\":\"join\",\"z\":\"30e591de3ccfa354\",\"name\":\"\",\"mode\":\"custom\",\"build\":\"object\",\"property\":\"payload\",\"propertyType\":\"msg\",\"key\":\"topic\",\"joiner\":\"\\\\n\",\"joinerType\":\"str\",\"accumulate\":false,\"timeout\":\"\",\"count\":\"2\",\"reduceRight\":false,\"reduceExp\":\"\",\"reduceInit\":\"\",\"reduceInitType\":\"\",\"reduceFixup\":\"\",\"x\":730,\"y\":1260,\"wires\":&#91;&#91;\"dd8e53ff5fb631a7\",\"f9983582c902bf89\"]]},{\"id\":\"26685b4e1b8075e3\",\"type\":\"change\",\"z\":\"30e591de3ccfa354\",\"name\":\"\",\"rules\":&#91;{\"t\":\"set\",\"p\":\"topic\",\"pt\":\"msg\",\"to\":\"wanIP\",\"tot\":\"str\"}],\"action\":\"\",\"property\":\"\",\"from\":\"\",\"to\":\"\",\"reg\":false,\"x\":540,\"y\":1260,\"wires\":&#91;&#91;\"6241773d392ed895\"]]},{\"id\":\"dd8e53ff5fb631a7\",\"type\":\"function\",\"z\":\"30e591de3ccfa354\",\"name\":\"if(different)\",\"func\":\"\\nif(msg.payload.dnsIP != msg.payload.wanIP)\\n    return msg;\",\"outputs\":1,\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":&#91;],\"x\":890,\"y\":1260,\"wires\":&#91;&#91;\"db2a20b375a69689\"]]},{\"id\":\"db2a20b375a69689\",\"type\":\"http request\",\"z\":\"30e591de3ccfa354\",\"name\":\"update DuckDNS\",\"method\":\"GET\",\"ret\":\"txt\",\"paytoqs\":\"ignore\",\"url\":\"https:\/\/www.duckdns.org\/update?domains=mondomaine&amp;token=montoken\",\"tls\":\"\",\"persist\":false,\"proxy\":\"\",\"insecureHTTPParser\":false,\"authType\":\"\",\"senderr\":false,\"headers\":&#91;],\"credentials\":{\"user\":\"\",\"password\":\"\"},\"x\":1070,\"y\":1260,\"wires\":&#91;&#91;\"2d25d30218102c41\"]]},{\"id\":\"2d25d30218102c41\",\"type\":\"debug\",\"z\":\"30e591de3ccfa354\",\"name\":\"debug 13\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"targetType\":\"msg\",\"statusVal\":\"\",\"statusType\":\"auto\",\"x\":1240,\"y\":1260,\"wires\":&#91;]},{\"id\":\"f9983582c902bf89\",\"type\":\"debug\",\"z\":\"30e591de3ccfa354\",\"name\":\"debug 14\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"true\",\"targetType\":\"full\",\"statusVal\":\"\",\"statusType\":\"auto\",\"x\":880,\"y\":1220,\"wires\":&#91;]}]<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai derni\u00e8rement chang\u00e9 d&rsquo;op\u00e9rateur internet pour passer chez Sosh. \u00ab\u00a0Et vous, quand est-ce que vous passez chez &#8230;\u00a0\u00bb, euh NON ! Je connais pas Sosh, ni Orange en tant qu&rsquo;op\u00e9rateur internet pour particulier et je me disais \u00ab\u00a0bah une box, c&rsquo;est une box, du moment que ca me donne internet&#8230;\u00a0\u00bb b\u00e9h en fait non. J&rsquo;ai [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":685,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[82,81,83,85,84],"class_list":["post-677","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-g33k-land-informatique","tag-dns","tag-duckdns","tag-dyndns","tag-livebox","tag-nodered"],"_links":{"self":[{"href":"https:\/\/cisko.fr\/index.php?rest_route=\/wp\/v2\/posts\/677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cisko.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cisko.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cisko.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cisko.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=677"}],"version-history":[{"count":3,"href":"https:\/\/cisko.fr\/index.php?rest_route=\/wp\/v2\/posts\/677\/revisions"}],"predecessor-version":[{"id":686,"href":"https:\/\/cisko.fr\/index.php?rest_route=\/wp\/v2\/posts\/677\/revisions\/686"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cisko.fr\/index.php?rest_route=\/wp\/v2\/media\/685"}],"wp:attachment":[{"href":"https:\/\/cisko.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cisko.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cisko.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}