{"id":704,"date":"2010-06-01T09:30:49","date_gmt":"2010-06-01T08:30:49","guid":{"rendered":"http:\/\/blog.guiguiabloc.fr\/?p=704"},"modified":"2010-06-01T12:54:42","modified_gmt":"2010-06-01T11:54:42","slug":"mise-a-jour-dynamique-dentree-dns","status":"publish","type":"post","link":"http:\/\/blog.guiguiabloc.fr\/index.php\/2010\/06\/01\/mise-a-jour-dynamique-dentree-dns\/","title":{"rendered":"Mise \u00e0 jour dynamique d&rsquo;entr\u00e9e DNS"},"content":{"rendered":"<p>Petit billet rapide suite \u00e0 la sortie de l&rsquo;offre MiniCloud d&rsquo;OVH <a title=\"http:\/\/www.kimsufi.com\/cloud\/\" href=\"http:\/\/www.kimsufi.com\/cloud\/\" target=\"_blank\">http:\/\/www.kimsufi.com\/cloud\/<\/a><\/p>\n<p>Bien \u00e9videmment, cette technique ne s&rsquo;applique pas seulement \u00e0 cette offre, elle est juste&#8230; bien utile.<\/p>\n<p>En effet, les MiniCloud d&rsquo;OVH changent d&rsquo;adresse IP quand on les \u00e9teints et qu&rsquo;on les rallument. C&rsquo;est assez g\u00eanant de courir apr\u00e8s la nouvelle adresse ip du cloud n\u00b024, mais heureusement, afin d&rsquo;\u00e9viter ceci, le DNS est notre ami.<\/p>\n<p>Vous connaissez tous DynDNS, un service gratuit, tr\u00e8s utilis\u00e9 par les gens qui disposent d&rsquo;une adresse IP dynamique chez eux, et qui permet, lors du changement d&rsquo;adresse, de mettre a jour une entr\u00e9e DNS de type chezmoi.dyndns.com.<\/p>\n<p>Ce que je vous propose, c&rsquo;est de faire la m\u00eame chose sur vos serveurs DNS, et donc de changer dynamiquement une entr\u00e9e de type A en cas de changement d&rsquo;adresse IP (de votre MiniCloud par exemple).<\/p>\n<p>Je consid\u00e8re d\u00e9j\u00e0 que vous savez comment fonctionne un DNS et que le votre est fonctionnel et op\u00e9rationnel pour votre ou vos domaines.<\/p>\n<ul>\n<li><strong>BIND<\/strong><\/li>\n<\/ul>\n<p>Pr\u00e9-requis, les packages dns-utils et bind9\u00a0 (pour les distributions Debian)<\/p>\n<p>Premi\u00e8re \u00e9tape, cr\u00e9er une paire de cl\u00e9s pour permettre de mettre \u00e0 jour le DNS \u00e0 distance en toute s\u00e9curit\u00e9 :<\/p>\n<pre lang=\"text\">dnssec-keygen -a HMAC-MD5 -b 512 -n USER -r \/dev\/urandom dnscloud.guiguiabloc.fr\r\nKdnscloud.guiguiabloc.fr.+157+06250\r\n<\/pre>\n<p>Vous avez d\u00e9sormais 2 cl\u00e9s, 1 priv\u00e9e et 1 publique (comme pour ssh)<\/p>\n<pre lang=\"text\">\r\nserveur:~# ll K*\r\n-rw------- 1 root root 130 jun\u00a0 1 09:41 Kdnscloud.guiguiabloc.fr.+157+06250.key\r\n-rw------- 1 root root 156 jun\u00a0 1 09:41 Kdnscloud.guiguiabloc.fr.+157+06250.private\r\n<\/pre>\n<p>On r\u00e9cup\u00e8re la cl\u00e9 :<\/p>\n<pre lang=\"text\">\r\nserveur:~# cat Kdnscloud.guiguiabloc.fr.+157+06250.private | grep Key\r\nKey: GaC4ezsL0c\/gWqG7nzH4iYyWPqYS2tC3H78ZYkyuvj5LJyq6JZjh4f+KKhuL\/A5gTnc1K0rRw2u\/3z+eXA76XA==\r\n<\/pre>\n<p>Ajouter la cl\u00e9 dans le fichier named.conf (ou named.conf.local tout d\u00e9pend de votre fa\u00e7on de travailler \ud83d\ude09 ) :<\/p>\n<pre lang=\"text\">\r\nkey \"dnscloud.guiguiabloc.fr.\" {\r\n   algorithm hmac-md5;\r\n   secret \"GaC4ezsL0c\/gWqG7nzH4iYyWPqYS2tC3H78ZYkyuvj5LJyq6JZjh4f+KKhuL\/A5gTnc1K0rRw2u\/3z+eXA76XA==\";\r\n   };<\/pre>\n<p>Ensuite, nous allons autoriser cette cl\u00e9 a mettre \u00e0 jour notre domaine (ou sous-domaine si vous avez s\u00e9par\u00e9 vos entr\u00e9es)<\/p>\n<pre lang=\"text\">\r\nzone \"guiguiabloc.fr\" {\r\ntype master;\r\nfile \"\/etc\/bind\/zone.guiguiabloc.fr\";\r\nallow-update { key dnscloud.guiguiabloc.; };\r\nallow-query { any; };\r\n};\r\n<\/pre>\n<p>Dans votre fichier de zone, ajouter votre entr\u00e9e de type A :<\/p>\n<pre lang=\"text\">\r\n$TTL 180\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ; 3 minutes\r\ncloud01 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 A\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 91.12.34.56\r\n<\/pre>\n<p>Vous remarquerez que je force un TTL a\u00a0 180 secondes (important, par d\u00e9faut les entr\u00e9es sont valables 24h&#8230;)<\/p>\n<p>On reload Bind et on tente une mise \u00e0 jour \u00e0 distance :<\/p>\n<pre lang=\"text\">\r\nserveur# nsupdate -d -k .\/Kdnscloud.guiguiabloc.fr.+157+06250.private\r\n   Creating key...\r\n   > server ns.guiguiabloc.org.\r\n   before getaddrinfo()\r\n   > update delete cloud01.guiguiabloc.org.\r\n   > update add cloud01.guiguiabloc.org. 180 A 212.56.43.21\r\n   > send\r\n...\r\nReply from update query:\r\n;; -&gt;&gt;HEADER&lt;&lt;- opcode: UPDATE, status: NOERROR, id:\u00a0 60872\r\n;; flags: qr ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 1\r\n;; TSIG PSEUDOSECTION:\r\ncloud1.guiguiabloc.fr.\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ANY\u00a0\u00a0\u00a0\u00a0 TSIG\u00a0\u00a0\u00a0 hmac-md5.sig-alg.reg.int. 1275379509 300 16 X3gUWw\/uLyIJL4RykJbp24w== 60872 NOERROR 0\r\n<\/pre>\n<p>Et dans les logs de votre serveur Bind :<\/p>\n<pre lang=\"text\">\r\nJun\u00a0 1 10:05:09 NS named[2224]: client 82.247.168.242#26928: signer \"dnscloud.guiguiabloc.fr\" approved\r\nJun\u00a0 1 10:05:09 NS named[2224]: client 82.247.168.242#26928: updating zone 'guiguiabloc.fr.fr\/IN': delete all rrsets from name 'cloud01.guiguiabloc.fr'\r\nJun\u00a0 1 10:05:09 NS named[2224]: client 82.247.168.242#26928: updating zone 'guiguiabloc.fr\/IN': adding an RR at 'cloud01.guiguiabloc.fr' A\r\n<\/pre>\n<p>Magique \ud83d\ude00<\/p>\n<p>Ne reste qu&rsquo;a scripter tout cela.<\/p>\n<p>2 techniques pour r\u00e9cuperer l&rsquo;ip (a vous de choisir celle qui vous convient ) :<\/p>\n<ol>\n<li>On se cr\u00e9er une petite page php sur un de nos serveurs web qui nous donne l&rsquo;ip depuis la laquelle nous nous pr\u00e9sentons :<\/li>\n<\/ol>\n<pre lang=\"text\">\r\ncat index.php\r\n\r\n<?PHP\r\necho $_SERVER[\"REMOTE_ADDR\"];\r\n?>\r\n<\/pre>\n<p>On l&rsquo;h\u00e9berge sur un nom style ip.guiguiabloc.fr et il suffit d&rsquo;appeler (via Curl) l&rsquo;adresse ip.guiguiabloc.fr pour r\u00e9cuperer notre ip fixe.<\/p>\n<ol>\n<li>On r\u00e9cup\u00e8re l&rsquo;adresse IP via ifconfig<\/li>\n<\/ol>\n<pre lang=\"text\">\r\nifconfig eth0 | egrep 'inet adr:'| cut -d: -f2 | awk '{ print $1}'\r\n<\/pre>\n<p>Le script :<\/p>\n<pre lang=\"text\">\r\ncloud# cat update_cloud.sh\r\n#!\/bin\/bash\r\nIP=`curl -s ip.guiguiabloc.fr`\r\n\r\n# Si ifconfig\r\n\r\n# IP=`ifconfig eth0 | egrep 'inet adr:'| cut -d: -f2 | awk '{ print $1}'`\r\n\r\n# check si changement\r\nACTUALIP=`\/usr\/bin\/dig +short cloud01.guiguiabloc.fr @ns.guiguiabloc.fr | \/usr\/bin\/tail -n1 `\r\n\r\nif test \"$ACTUALIP\" = \"$IP\"\r\nthen exit 0\r\nelse\r\n\r\ncat > \/var\/scripts\/majdnscloud.txt << EOF\r\nserver ns.guiguiabloc.fr\r\nzone guiguiabloc.fr\r\nupdate delete cloud01.guiguiabloc.fr. A\r\nupdate add cloud01.guiguiabloc.fr. 180 A $IP\r\nshow\r\nsend\r\nEOF\r\n\r\nnsupdate -k \/var\/scripts\/Kdnscloud.guiguiabloc.fr.+157+06250.private -v \/var\/scripts\/majdnscloud.txt\r\nfi\r\n<\/pre>\n<p>Et hop, on se met a au d\u00e9marrage du cloud (genre a la fin et rc.local) et au reboot du cloud, le dns sera mis automatiquement \u00e0 jour.<\/p>\n<ul>\n<li><strong>DJBDNS<\/strong><\/li>\n<\/ul>\n<p>Si vous n'utilisez pas Bind mais l'excellent DJBDNS, il existe un tutorial tr\u00e8s bien fait pour appliquer la m\u00eame technique :<\/p>\n<p><a title=\"http:\/\/qmail.jms1.net\/djbdns\/dyndns.shtml\" href=\"http:\/\/qmail.jms1.net\/djbdns\/dyndns.shtml\" target=\"_blank\">http:\/\/qmail.jms1.net\/djbdns\/dyndns.shtml<\/a><\/p>\n<p>Voil\u00e0, j'esp\u00e8re que cette technique vous servira, non seulement pour vos serveurs amen\u00e9s \u00e0 changer d'adresse IP, mais \u00e9galement chez vous, si vous avez une IP dynamique et vous souhaitez utiliser vos propres noms de domaines.<\/p>\n<p>Amusez vous bien \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Petit billet rapide suite \u00e0 la sortie de l&rsquo;offre MiniCloud d&rsquo;OVH http:\/\/www.kimsufi.com\/cloud\/ Bien \u00e9videmment, cette technique ne s&rsquo;applique pas seulement \u00e0 cette offre, elle est juste&#8230; bien utile. En effet, les MiniCloud d&rsquo;OVH changent d&rsquo;adresse IP quand on les \u00e9teints &hellip; <a href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2010\/06\/01\/mise-a-jour-dynamique-dentree-dns\/\">Read More <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[13,7,3],"tags":[142,141,60],"_links":{"self":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/704"}],"collection":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/comments?post=704"}],"version-history":[{"count":5,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/704\/revisions"}],"predecessor-version":[{"id":709,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/704\/revisions\/709"}],"wp:attachment":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/media?parent=704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/categories?post=704"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/tags?post=704"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}