Magazine d'actualités journalières pour et par des téchnophiles passionnés qui refusent à se croire Geek ! #Mempyre

Home Internet Blogging Un NDD (.com, .fr, etc) sur un serveur à IP dynamique grâce à CloudFlare.

Un NDD (.com, .fr, etc) sur un serveur à IP dynamique grâce à CloudFlare.

SHARE
, / 3995 14

server_cables

Un énorme problème pour un auto-hébergement, ne pas avoir une IP fixe forever, ça peut être aussi un problème sur des hébergements mutualisé mais ils ont généralement des serveurs DNS inclus dans leurs data-center.

Mais alors quel est le problème réel ?

Si je configure mon domaine, prenons le plus proche, ImnotGeek.com, il est enregistré sur GoDaddy, je peux soit l’envoyer sur un minimum de deux serveurs DNS soit vers une IP soit vers un lien http en redirection.

Mon problème ? Mempyre (la totalité de mes sites) sont maintenant sur un serveur Debian dans un appartement proche de Paris. Connecté en DMZ sur un routeur Netgear avec une connexion ADSL Orange (Switch vers la fibre d’ici trois mois). Et ce n’est pas nouveau, Orange change l’IP de ses clients tous les quatre jours environ.

La meilleure solution pour un cas pareil, où le serveur peut être hors ligne pour des raisons x est une passerelle comme CloudFlare, qui intègre une mémoire tampon des pages et un filtre d’attaques extérieures.
Ce qui est sympa, est que CF devient le DNS qui sera lié à GoDaddy et qu’il offre la gestion directe de l’IP de destination.

CF DNS settings

Explication (global) :
Quand tu tapes http://www.ImnotGeek.com/ la requête est envoyé à un des Gros serveurs DNS mondiaux, qui redirige vers les DNS de l’hébergement qui dirige vers l’IP du serveur contenant les fichiers de WordPress et le moteur PHP/MySQL/etc

Et dans mon cas, CloudFlare gère l’entré de demande d’IP des Gros DNS et renvoi la requête vers mon IP Orange, ce qui affiche le contenu que le serveur virtuel Apache à comme correspondance à l’adresse ImnotGeek.com.

J’ai une IP pour 11 sites. Apache gère sans soucis cette complexité.

CF connait mon IP domestique, Apache est configuré, miracle tout marche. Mais après plusieurs jours, plus rien, Oh rage, Oh désespoir, Oh changement d’IP.

Alors j’ai cherché un script pour la mise à jour automatique et j’ai trouvé, le script en question ne marchait pas, malgré des essais de recodage.
Mais l’intérêt de ce script est qu’il ma permit de comprendre comment il marchait (il est enfantin ce script). Il indique l’adresse https qui permet via une API de mettre à jour l’IP des paramètres du domaine dans la gestion de CF.

Apres des jours de réflexions et de tests, j’ai trouvé la solution pour la mise à jour de l’IP, une solution WTF, mêlant script et PHP.

__________________________________________________________

Etape 1 : Récupérer l’IP externe de mon serveur.

Dans le terminal (connexion en SSH pour moi), il faut d’abord installer lynx.

su aptitude install lynx

Lynx est un navigateur web léger qui vas être bien utile.

Et maintenant tester la commande permettant de récupérer une IP de manière net.

lynx -dump http://whatismyip.com/ | grep -i « Your IP Address Is » | awk ‘{ print $5; }’

Miracle, cela répond l’IP de manière parfaite en X.X.X.X

lynx test ip

Il faut exporter ce résultat dans un fichier, qui pour moi sera ip.php , je le veux dans un répertoire visible sur le web et en local. Par exemple /var/www/siteexemple/IP , Donc en tapant http://siteexemple.com/IP/ on tombe dans le répertoire IP. Il est de plus impératif que ce « siteexemple.com » soit celui qui soit accessible depuis l’IP « http://X.X.X.X/IP/ » donc le site par défaut.

Pour avoir un export propre et facile, il faut crée un script en .sh, moi j’ai choisi ip.sh.
Pour le crée :

su nano /etc/ip.sh

Et y mettre dedans une ligne :

lynx -dump http://whatismyip.com/ | grep -i « Your IP Address Is » | awk ‘{ print $5; }’ >/var/www/siteexemple/IP/ip.php

Enregistré avec CtrlX, validé. Ayé un script est crée.

Pour le tester :

sh /etc/ip.sh

Et la, miracle, l’IP est exporté directement dans le dossier /IP/ du répertoire web dans le fichier ip.php

Pour recapituler, si on tape http://siteexemple.com/IP/ip.php ou http://X.X.X.X/IP/ip.php et sur le serveur directement http://localhost/IP/ip.php ont obtient le résultat de manière propre avec une IP.

 

______________________________________________________________

Partie 2 : Etablir une mise a jour de l’IP sur CloudFlare.

Dans le répertoire /IP/ il faut crée une page par nom de domaine à mettre à jour.

Deux solutions, en terminal ou via un upload FTP ou SFTP ( FileZilla )

J’explique via le terminal, lancé la création du document siteexemple.php

su nano /var/www/siteexemple/IP/siteexemple.php

Un document vide s’ouvre, coller dedans une basique redirection web, l’adresse de la redirection est la mise à jour via API avec dedans le domaine, l’email du compte, la clé API et pour l’IP de fin, un include PHP du fichier auto générer de la partie 1, le ip.php

<html>
<head>

<title>Redirection IP SiteExemple</title>

<meta http-equiv= »refresh » content= »1; URL=https://www.cloudflare.com/api.html?a=DIUP&hosts=LENOMDEDOMAINE&u=LEMAILDUCOMPTE&tkn=LACLEAPI&ip=<?php include(‘ip.php’); ?> »>
</head>

<body>
</body>

</html>

Puis sauvegardé. Pour tester, http://siteexemple.com/IP/siteexemple.php
Miracle, la redirection se fait, et CF répond.

 

Pour trouver la clé API :

CF API

__________________________________________________

Etape 3 : Automatiser le tout.

Dans le terminal, installer w3m :

su aptitude install w3m

Puis testé la commande de mise a jour :

w3m localhost/IP/siteexemple.php

lynx scriptlynx refreshlynx fin

Initialisé des actions à timing régulier, pour que toutes les 5min la mise à jour d’IP se fasse ainsi que l’exécution sur CF.

Dans le terminal :

su crontab –e

Rajouté une ligne pour la mise a jour IP :

5,15,20,25,30,35,40,45,50,55 * * * * sh /etc/ip.sh

Et une pour l’exécution CF :

5,15,20,25,30,35,40,45,50,55 * * * * w3m localhost/IP/siteexemple.php

 

crontab

Enregistré avec un CtrlX et normalement, l’ensemble est exécuté toutes les 5 minutes.

Fin

Je répondrais à vos questions dans les commentaires.

  • Pingback: Associer un vrai nom de domaine (.com .fr …etc) avec une IP dynamique | Korben

  • http://blog.m0le.net Nono

    Je me trompe peut-être, mais à la place d’un très laid :
    5,15,20,25,30,35,40,45,50,55 * * * * sh /etc/ip.sh

    Ne pourrait-on pas le remplacer par un (joli) :
    */5 * * * * sh /etc/ip.sh

    ?

  • David Ruzicka

    huh? C’est pas gratuit les IP fixes chez Orange sur demande?
    http://assistance.orange.fr/beneficier-d-une-adresse-ip-fixe-393.php

  • http://www.imnotgeek.com/ Erwin

    @but2ene C’est une piste intéressante, j’essayerais :)

  • Sch

    Tout le monde devrait avoir un esprit de partage, cela nous aiderait beaucoup. En tout cas, grand merci pour cette liste!

  • http://admingamer.fr Admingamer.fr

    Salut,

    Me trouvant dans la même situation j’ai trouvé ce script qui est un peu plus propre je trouve, bien que le tien fonctionne malgré tout !
    http://jimdrash.com/node/5

  • serg

    oui, c’est nettement mieux avec
    */5 * * * * sh /etc/ip.sh
    d’autant qu’il manque « 00 » dans la liste initiale

  • Pierre Ozoux

    http://whatismyip.com/ requiert de payer maintenant…

    Vous avez une alternative?

  • bass2style

    mon serveur est sous windows server et IIS7, une idee de comment je pourrais faire ? je suis chez belgacom en VDSL2, mon IP change toutes les 96h, et donc obligé d’utiliser un dyndns tout moche, ca le fait pas j’ai envie de dire. ^^

    donc si tu a le meme genre d’explicatif, mais pour du crosoft, je suis preneur. ^^

  • flo

    curl ifconfig.me
    => ca vous renvois directement votre ip (sans avoir besoin de faire de grep/awk/etc.)
    :)

  • http://www.imnotgeek.com/ Erwin

    Enfait, tout marche bien mais j’ai un petit problème pour le chargement final des pages, donc j’utilise une session persistante de X11vnc avec un navigateur et ma page de mise a jour d’IP avc un refresh.
    Pour le moment ça, ça marche super bien.