Mit Hilfe dieses Scripts lässt sich ein DNS-Eintrag in Cloudflare ( https://www.cloudflare.com ) updaten. Dadurch hat man die Möglichkeit sich sein eigenes Dynamisches DNS aufzubauen.
Sofern man bereits Inhaber einer Domain ist, ist der DNS-Service bei Cloudflare kostenlos (*).
Den API-Key gibt es bei Cloudflare übrigens unter: My Settings ==> Account ==> API Key ==> Global API Key
Der Proxyservice sorgt hierbei auch noch für ein gültiges SSL-Zertifikat
Die Eigene IP liese ja glaube ich jeder von uns eh schon aus seinem Router oder von wieistmeineip aus
Wenn das Update nicht erfolgreich war wird der Fehler mit echo ausgegeben und das Script abgebrochen.
<?
// Cloudflare DNS Update vis API V4
$apiKey = "6c0cbf5029aed0af395ac4b864c6b0956c0cb"; // API Key
$email = "mail@domain.de"; // E-Mail-Adresse
$zone = "domain.de"; // Domain
$dnsRecord = "subdomain.domain.de"; // DNS-Record der geändert werden soll
$ip = GetValue(1234 /*[IP-Adresse]*/); // IP-Adresse
$enableProxy = "false"; // Aktiviert den Proxy-Service von Cloudflare für diesen DNS-Eintrag
$ttl = 120; // TTl des Eintrags in Sekunden (mindestens 120)
$type = "A"; // Record-Typ IPV4 => "A" IPv6 => "AAAA"
// Ab hier braucht nichts mehr geändert zu werden
$zoneId ="";
$recordId= "";
// get Zone ID
{
$curl = curl_init();
a
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.cloudflare.com/client/v4/zones",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"x-auth-email: ".$email,
"x-auth-key: ".$apiKey
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
$obj = json_decode($response,true);
if( $obj["success"]!=1)
{
echo "GetZoneId Failed";
die;
}
$zones =($obj['result']);
foreach($zones as $zoneResult) {
if($zoneResult['name']==$zone)
$zoneId = $zoneResult['id'];
}
if ($zoneId =="")
{
echo "Zone not found. Zones: </br> " ;
foreach($zones as $zoneResult) {
echo $zoneResult['name'] ." </br>" ; }
die;
}
}
}
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.cloudflare.com/client/v4/zones/".$zoneId."/dns_records",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"x-auth-email: ".$email,
"x-auth-key: ".$apiKey
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
$obj = json_decode($response,true);
if( $obj["success"]!=1)
{
echo "GetRecordID Failed";
die;
}
$zones =($obj['result']);
foreach($zones as $zoneResult) {
if($zoneResult['name'] == $dnsRecord)
$recordId = $zoneResult['id'];
}
if ($recordId =="") {
echo "Record not found. Records: </br>" ;
foreach($zones as $zoneResult) {
echo $zoneResult['name']. " </br>" ;}
die;
} }
}
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.cloudflare.com/client/v4/zones/".$zoneId."/dns_records/".$recordId ,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => "{
\"id\":\"".$recordId."\",
\"type\":\"".$type."\",
\"name\":\"".$dnsRecord."\",
\"content\":\"".$ip."\",
\"proxiable\":true,
\"proxied\":".$enableProxy.",
\"ttl\":".$ttl.",
\"locked\":false,
\"zone_id\":\"".$zoneId."\",
\"zone_name\":\"".$zone."\"
}",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"x-auth-email:".$email,
"x-auth-key: ".$apiKey
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
$obj = json_decode($response);
if( $obj->{'success'}==1)
echo "Update von ".$dnsRecord." auf ".$ip. " erfolgreich";
}
}