Crearsi il Proprio DNS Dinamico con Cloudflare ed Script Php

1 Agosto 2016 di Daniele Frulla


Tra i tanti servizi che ci mette a disposizione Internet occorre prendere in considerazione il DNS (Domain Name System) che è alla base di ogni navigazione.

Il DNS indica un’associazione di un nome con un indirizzo IP. Facciamo un esempio: se vuoi raggiungere il sito www.newstechnology.eu il tuo pc deve prima trasformare il nome in un indirizzo IP e la richiesta verrà effettuata a dei servers sparsi per il mondo che si chiamano servers DNS Pubblici.

Generalmente quando fai un contratto ADSL privato o contratti telefonici dati, ti viene assegnato un indirizzo IP Pubblico e questo ti rimane fino a che non perdi la linea o fino a quando il tuo provider non ti cambia IP. Questi genere di IP che cambiano nel tempo si dice vengono assegnati in maniera dinamica.

Una azienda che lavora su internet e deve esporre i propri servizi ad Internet valuta dei contratti ADSL business che forniscono 1 o più indirizzi IP statici.

Dynamc DNS

Se sei un privato se vuoi gestire dinamicamente l’indirizzo IP associando il nome al indirizzo allora devi trovare un provider di Dynamic DNS.  Generalmente ci si registra con un utente e password al servizio DDNS e dal tuo server casalingo fai girare uno scripts che aggiorna presso il provider DDNS l’IP associato al nome DNS.

Per esempio se il servizio scelto è www.noip.com, puoi registrare la tua macchina come pippo.noip.com. Ogni volta che navigherai su internet o utilizzerai nslookup col nome pippo.noip.com risulterà l’ip che ti è stato associato alla connessione ad internet.

Ci sono moltissimi Dynamic DNS:

Questa non è una lista esaustiva di tutti i DNS dynamic, ma è un esempio di quante applicazioni siano in commercio e anche di quante siano gratuite.

In particolare CloudFlare non è propriamente un DNS dinamico, ma permette di nascondere il vostro sito web dietro indirizzi IP, contro attacchi DoS ed è anche una sorta di cache del vostro sito (il vostro sito sarà quindi più veloce).

Per permettere a CloudFlare di svolgere la funzione di DNS dinamico ci appoggiamo sulle sue Api che sono alla versione 4 e permettono di aggiungere, modificare, cancellare i propri DNS. Di seguito un piccolo script php che permette ad un nostro server casalingo di aggiornare l’IP del proprio nome DNS. Potrai così raggiungere col nome pubblico il tuo server ovunque sarai.

[php]
<?php
class CloudFlare {
private $host_api;
private $email;
private $token;

public function __construct( $email, $key ) {
$this->host_api = ‘https://api.cloudflare.com/client/v4’;
$this->email = $email;
$this->token = $key;
}

public function getZones( ) {
$result = $this->curl(‘GET’, ‘/zones’ );
return $result ;
}

public function getIdZone( $host ) {
$zones = json_decode( $this->getZones());
foreach ( $zones->result as $zone ) {
if ( $zone->name == $host )
return $zone->id;
}
return null;
}

public function getIdDns( $host, $name ) {
$zone_id = $this->getIdZone($host);

$result = json_decode ( $this->curl(‘GET’, "/zones/$zone_id/dns_records?type=A&amp;name=$name") );

if ( ! $result->result )
return;
else
return $result->result[0]->id;
}

public function updateZoneIP( $host, $name, $ip ) {
$id = $this->getIdDns($host,$name);
$id_zone = $this->getIdZone($host);
if ( !$id )
return;

$result = $this->curl(‘put’,"/zones/$id_zone/dns_records/$id", array(‘content’=>$ip,’type’=>’A’,’name’=>$name,’ttl’=>120) );
return $result;
}

/**
* @return string Current IP address
*/
public function getCurrentMyIP() {
$source = "http://myip.dnsomatic.com/";
return file_get_contents($source);
}

public function curl( $method = ‘GET’, $relative_url, $datas = null ) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->host_api . $relative_url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper( $method ) );

$headers = [
‘X-Auth-Email: ‘.$this->email,
‘X-Auth-Key: ‘.$this->token,
‘Content-Type: application/json’
];

if ( $datas ) {
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($datas) );
$headers[] = ‘Content-Length: ‘. strlen(json_encode($datas));
}

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
}

define(‘API_KEY’, ‘<TOKEN>’); // CloudFlare API key
define(‘USERNAME’, ‘<EMAIL CLOUDFLARE>’); // Email address used to login into CloudFlare
$host = ‘<ZONE>’;
$host_to_modify = ‘<HOST_NAME>.<ZONE>’;
$ip_to_modify = gethostbyname($host_to_modify);

$cloudflare = new CloudFlare( USERNAME, API_KEY);
$new_ip = $cloudflare->getCurrentMyIP();
if ( $ip_to_modify == $new_ip ) {
echo "No ip $ip_to_modify to change into $new_ip";
exit;
}

$cloudflare->updateZoneIP( $host, $host_to_modify, $new_ip );

echo "Ip $ip_to_modify change into $new_ip";
echo "New ip $host_to_modify -> ".gethostbyname($host_to_modify);

?>
[/php]

 


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


Copyright di Caterina Mezzapelle Part. I.V.A. 02413940814 - R.E.A. 191812