Godje.nl

En ik zag dat het goed was

Update DNS-instellingen met TransIP REST-API

Omdat ik Godje.nl thuis host en ik geen zakelijke internet-aansluiting heb, wil mijn externe IP soms wel eens veranderen. Dit komt dan waarschijnlijk omdat mijn internetaanbieder apparatuur in de wijkkast heeft vervangen bijvoorbeeld. Aangezien ik niet van tevoren weet wanneer dat gebeurt, heb ik ooit een API-koppeling geschreven die regelmatig mijn IP controleert, en eventueel aanpast. Dit heb ik gedaan met behulp van de SOAP-koppeling van TransIP. Omdat TransIP heeft aangegeven deze uit te faseren en verder te gaan met hun nieuwe REST-API, heb ik mijn code aangepast. In dit artikel zal ik proberen te omschrijven wat je moet doen om dit zelf ook voor elkaar te krijgen.

  1. Als eerste is het noodzakelijk om binnen jouw TransIP-omgeving de API te activeren.
  2. Vervolgens moet je een Key Pair maken. Zodra je dit doet krijg je de private key te zien. Dit is de enige keer dat je deze te zien krijgt. Sla deze dus veilig op, deze heb je straks nog nodig. Verder zie je nog een vinkje met de tekst "Whitelisted IP". Dit vinkje zorgt ervoor dat alleen het goedgekeurde IP toegang krijgt tot de API. Bij veel toepassingen is dat heel handig en veilig, echter proberen wij een toepassing te maken die ook werkt als je een nieuw IP van jouw internet-aanbieder toegewezen krijgt. Wij moeten deze dus uitschakelen.
  3. Installeer de RestAPI Library
    Nu kan ik zelf uitschrijven hoe je de TransIP-library moet installeren, maar dat heeft TransIP zelf ook al heel netjes op hun site staan.
  4. Vervolgens kun je onderstaande code gebruiken om alles aan elkaar te verbinden.
transip
<?php
 use \Transip\Api\Library\TransipAPI;
 require_once(__DIR__ . '/vendor/autoload.php');

 $domainName = 'godje.nl'; //Your domain name.
 $login = 'loginname'; // Your login name on the TransIP website.
 $generateWhitelistOnlyTokens = false; // If the generated token should only be usable by whitelisted IP addresses in your Controlpanel.

 $privateKey = '-----BEGIN PRIVATE KEY-----
 // One of your private keys; these can be requested via the TransIP Controlpanel.
 -----END PRIVATE KEY-----';

 $api = new TransipAPI($login, $privateKey, $generateWhitelistOnlyTokens);
 $api->setTokenExpiryTime('30 minutes');
 $api->setTokenLabelPrefix('RestApiV6-');
 function getDnsSetting($api, $domainName, $name, $type)
 {
  // Get the DNS for your domain
  $domainDns = $api->domainDns()->getByDomainName($domainName);
  
  foreach ( $domainDns as $element ) {
   if ( $name == $element->getName() && $type == $element->getType() ) 
    return $element;
  }
 }

 function setDnsSetting($api, $domainName, $dnsEntry)
 {
  $api->domainDns()->updateEntry($domainName, $dnsEntry);
 }

 function updateCurrentIP($api, $domainName)
 {
  $currentIpAddress = file_get_contents('http://ipecho.net/plain');
  $validip = filter_var($currentIpAddress, FILTER_VALIDATE_IP);
  if ($validip == false)
   die("ERROR: current ip requested via ipecho is not valid!");

  $NS=array('ns0.transip.net');
  $result = dns_get_record($domainName, DNS_A, $NS);
  $ipAddress = $result[0]['ip'];
  $validip = filter_var($ipAddress, FILTER_VALIDATE_IP);
  if ($validip == false)
   die("ERROR: ip requested via nslookup is not valid!");
  
  if ($currentIpAddress != $ipAddress)
  {
   echo "-$currentIpAddress-$ipAddress-";
   $dnsEntry = getDnsSetting($api, $domainName, '@','A');
   $dnsEntry->setContent($currentIpAddress);
   setDnsSetting($api, $domainName, $dnsEntry);
   echo "IP Address updated";
  }
  else
   echo "IP Address at TransIP has already the latest value.";
 }

 updateCurrentIP($api, $domainName);
?>

Om ervoor te zorgen dat de DNS-instellingen automatisch uitgevoerd worden moet je zorgen dat dit script periodiek uitgevoerd wordt. Het makkelijkst om dit te realiseren is door een cron-job hiervoor te maken. Hiervoor heb ik de volgende regels gebruikt:

cron
0 * * * * wget -O /dev/null -o /dev/null https://transip.godje.nl?action=updatecurrentip
@reboot wget -O /dev/null -o /dev/null https://transip.godje.nl?action=updatecurrentip

De eerste regel zorgt ervoor dat op ieder heel uur het script wordt uitgevoerd. De tweede regel op het moment dat jouw webserver opgestart wordt. Mocht je bijvoorbeeld overstappen naar een nieuwe internet provider, dan kun je ervoor kiezen om jouw webserver te herstarten. Of je wacht gewoon tot het volgende uur natuurlijk.

Update DNS-instellingen met TransIP SOAP-API Geblokkeerde poorten openen op de Ziggo Connectbox Website snelheid uitgelegd Sipura 3000 instellen voor VoIP Update DNS-instellingen met TransIP REST-API Waarom de verbinding met Ziggo ieder uur wegvalt Optimaliseer websiteprestaties met Nginx Proxy Cache op een RAM-drive https://zitikerbij.godje.nl