Je m’occupe d’un service d’hébergement destiné aux actions politiques / citoyennes / artistiques… Ce service va rejoindre physiquement des voisins/copains eux aussi CHATONS : https://retzien.fr/. Nous allons mutualiser les serveurs et le temps de cerveau alloué au tâches administrative qui incombe à la gestion de ce type de service.
Pour préparer la migration de serveur j’ai fais un petit script qui se connecte à l’API d’ISPconfig et qui change tout les enregistrements DNS A ayant l’IP « X » par l’IP « Y » dans toutes les zones DNS du serveur. Ce script peut aussi s’avérer très utile en cas de changement de box internet Il se lance comme ceci :
php dnsChange.php -o=IP_ORIGINALE -n=NOUVELLE_IP
Le voici
<?php /* * Script de modification des enregistrements DNS A en cas de changement d'IP serveur * * Exemple de lancement : * php dnsChange.php -o=IP_ORIGINAL -n=NOUVELLE_IP * * Sous licence Beerware * Par David Mercereau : http://david.mercereau.info */ // Configuration de la connexion ISPconfig $CONFIG['remoteUser'] = 'UTILISATEUR DISTANT API ISPCONFIG'; $CONFIG['remotePassword'] = 'MOT DE PASSE DE L'UTILISATEUR DISTANT API ISPCONFIG'; $CONFIG['remoteSoapLocation'] = 'https://localhost:8080/remote/index.php'; $CONFIG['remoteSoapUri'] = 'https://localhost:8080/remote/'; // Test arguments $options = getopt('o:n:'); if (count($options) < 2) { exit("Certains arguments sont manquants. -o ANCIENNEIP -n NOUVELLEIP .\n"); } if (!filter_var($options['o'], FILTER_VALIDATE_IP)) { exit("L'origin n'est pas une IP valide.\n"); } if (!filter_var($options['n'], FILTER_VALIDATE_IP)) { exit("La nouvelle IP n'est pas une IP valide.\n"); } // Connexion à ISPconfig $client = new SoapClient(null, array('location' => $CONFIG['remoteSoapLocation'], 'uri' => $CONFIG['remoteSoapUri'], 'stream_context'=> stream_context_create(array('ssl'=> array('verify_peer'=>false,'verify_peer_name'=>false))), 'trace' => 1)); // Login if($session_id = $client->login($CONFIG['remoteUser'], $CONFIG['remotePassword'])) { echo "Login Ok. Session ID:".$session_id."\n\n"; } echo "############################################################################################################################\n"; echo "Recherche de l'IP ".$options['o']." dans tout les enregistrements A des zones DNS du serveur pour la remplacer par ".$options['n']."\n"; echo "############################################################################################################################\n\n"; try { $dns_a_gets = $client->dns_a_get($session_id, -1); $nb_dns_a_get=0; foreach ($dns_a_gets as $dns_a_get) { if ($dns_a_get['type'] == 'A' && $dns_a_get['data'] == $options['o']) { $nb_dns_a_get++; $dns_zone_get = $client->dns_zone_get($session_id, $dns_a_get['zone']); echo "Ip trouvé dans la zone ".$dns_zone_get['origin']." avec l'enregistrement ".$dns_a_get['name'].".".$dns_zone_get['origin'].". Voulez-vous la remplacer ? (Y/n) \n"; $handle = fopen ("php://stdin","r"); $line = fgets($handle); if(trim($line) == 'yes' || trim($line) == 'y' || trim($line) == 'Y' || trim($line) == 'Yes'){ $dns_record = $client->dns_a_get($session_id, $dns_a_get['id']); //print_r($dns_record); $dns_record['data']=$options['n']; //print_r($dns_record); $affected_rows = $client->dns_a_update($session_id, $dns_a_get['sys_userid'], $dns_a_get['id'], $dns_record); echo "Le changement à bien été opéré sur ".$affected_rows." enregistrement\n"; } else { echo "Aucun changement effectué sur ".$dns_a_get['name'].".".$dns_zone_get['origin']."\n"; } fclose($handle); } } if ($nb_dns_a_get == 0) { echo "Aucun enregistrement A avec l'IP ".$options['o']." n'a été trouvé. \n"; } if($client->logout($session_id)) { echo "\nLogged out\n"; } } catch (SoapFault $e) { echo $client->__getLastResponse(); die('SOAP Error: '.$e->getMessage()."\n"); } ?>