ZONE - Primární DNS

V tomto článku se dozvíte:


WEDOS DNS

Systém WEDOS DNS může fungovat jako primární nebo sekundární:

  • Primární DNS znamená, že záznamy DNS jsou ukládány a doručovány přímo prostřednictvím serverů DNS systému WEDOS. Chcete-li používat DNS v primárním režimu, musíte přidat doménu a zkopírovat nebo importovat její záznamy DNS. Jakmile jsou záznamy migrovány, nemusíte je udržovat u předchozího poskytovatele a místo toho používat systém WEDOS.
  • Sekundární DNS jsou uloženy na autoritativním serveru DNS jiného poskytovatele a systém WEDOS DNS na ně pouze odkazuje. Tato konfigurace je náročnější na nastavení (více informací naleznete v článku ZÓNA - bílý štítek ) a vyžaduje údržbu vlastního serveru DNS.

Sekundární DNS sice umožňuje aplikacím komunikovat s původním řešením DNS a spoléhat se na WEDOS pouze z hlediska distribuce, ale pokud stejně používáte WEDOS, může být údržba vlastní infrastruktury DNS příliš nákladově neefektivní. Chcete-li se dozvědět, jak migrovat stávající záznamy do systému WEDOS jako primárního DNS, použijte buď importní rozhraní DNS AXFR, nebo WAPI, jak je popsáno níže.


Migrace DNS prostřednictvím rozhraní WAPI

Chcete-li automatizovat migraci DNS pro velký počet domén nebo záznamů, doporučujeme použít níže uvedenou variantu skriptu WAPI.

Pokud se s rozhraním WAPI setkáváte poprvé, projděte si nejprve příručku WAPI.

Mějte na paměti, že je stanoven limit 1000 požadavků WAPI za hodinu. Vezměte v úvahu 1 požadavek na přidání domény do WAPI plus 1 na požadavek.

Dodaný skript WAPI používá PHP k:

  1. číst data z jednoduchého souboru .zone (formát BIND),
  2. extrahovat záznamy DNS a
  3. vytvořit doménu pomocí rozhraní WAPI a naplnit ji těmito záznamy.

Čtení ze souboru .zone

Tato část se zabývá čtením dat z jednoho příkladu souboru .zone (BIND). Skript funguje pro soubory podle těchto kritérií:

  • Oblast názvu záznamu pro hlavní doménu je prázdná (žádné @ nebo domain.tld.), na subdomény se odkazuje pomocí názvu (např. www).
  • Záznam SOA je inline, např. @ IN SOA ns1.example-dns.tld. ns2.example-dns.tld.a nahoře.
  • Každý záznam DNS musí být uveden na jednom řádku.
  • Směrnice jako např. $ORIGIN nebo $INCLUDE nejsou podporovány.
  • Komentáře (text za ;) jsou povoleny, skript je bude ignorovat.

Zde je ukázkový soubor pro referenci:

$TTL 3600
@ IN SOA ns1.example-dns.tld. ns2.example-dns.tld. (
1234567890 ; Serial (YYYYMMDDnn)
7200 ; Refresh
1800 ; Retry
1209600 ; Expire
3600 ; Minimum TTL
)

IN NS ns1.example-dns.tld.
IN NS ns2.example-dns.tld.

IN A 46.28.105.2
IN MX 10 mail.wds-test.org.

www IN CNAME wds-test.eu.

Výpis záznamů DNS

Pro zpracování tohoto souboru a získání informací o záznamech DNS můžete použít (a podle potřeby upravit) následující skript:

$filename = 'domain.zone'; // Load a .zone file

if (!file_exists($filename)) {
die("Error: File $filename not found.<br>");
}

$rawLines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$dnsRecords = [];

$inSOABlock = false;

foreach ($rawLines as $line) {
$trimmed = trim($line);

// Skip $TTL
if (stripos($trimmed, '$TTL') === 0) {
continue;
}

// Handle start of SOA block
if (preg_match('/\bSOA\b/i', $trimmed)) {
$inSOABlock = true;
continue;
}

// Skip lines inside SOA block
if ($inSOABlock) {
// Remove comments before checking for closing parenthesis
$noComment = explode(';', $trimmed)[0];
if (strpos($noComment, ')') !== false) {
$inSOABlock = false;
}
continue;
}

// Skip NS records
if (preg_match('/(^|\s)IN\s+NS\s/i', $trimmed)) {
continue;
}

// Skip empty lines
if (empty($trimmed)) {
continue;
}

// Parse each line into structured data
$record = [];
if (preg_match('/^(?:(\S+)\s+)?IN\s+(A|AAAA|MX|CNAME|TXT)\s+(.*)$/i', $trimmed, $matches)) {
$record['name'] = isset($matches[1]) ? $matches[1] : "";
$record['type'] = $matches[2];
$record['rdata'] = $matches[3];
$dnsRecords[] = $record;
}
}

Tento skript:

  • Načte jeden .zone soubor.
  • Přeskočí TTL, SOA a NS a prázdné řádky.
  • Uloží každý záznam typu A, AAAA, MX, CNAME nebo TXT v $dnsRecords pole.

Možná ji budete chtít upravit na:

  • načítání více souborů nebo čtení z jiných typů souborů.
  • Práce pro různé konvence názvů záznamů.
  • Ukládání dalších typů záznamů do pole.

Přidání domény a záznamů do DNS

Nakonec automatizujte přidání domény a záznamů do DNS. Předtím se ujistěte, že máte WAPI nakonfigurováno podle příručky WAPI.

Nahraďte také $wapiLogin = 'login@domain.tld' a $wapiPassword = 'WAPI_password' s vašimi konkrétními hodnotami.

$domain = 'domain.tld'; // Domain name

// Set CEST timezone for timestamp verification
date_default_timezone_set('Europe/Prague');

// WEDOS WAPI credentials and settings
$wapiUrl = 'https://api.wedos.com/wapi/json';
$wapiLogin = 'login@domain.tld';
$wapiPassword = 'WAPI_password';

// Function to make WAPI requests
function wapiRequest($command, $data) {
global $wapiUrl, $wapiLogin, $wapiPassword;

// Construct the authorization string
$dateHour = date('H', time());
$auth = sha1($wapiLogin.sha1($wapiPassword).$dateHour);

// Construct the request payload
$payload = array(
'request' => array(
'user' => $wapiLogin,
'auth' => $auth,
'command' => $command,
'data' => $data,
'clTRID' => 'dns' . date('YmdHis')
)
);

echo json_encode($payload);

// Initialize cURL session
$ch = curl_init($wapiUrl);

// Set cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('request' => json_encode($payload))));

// Execute cURL session
$response = curl_exec($ch);

// Close cURL session
curl_close($ch);

return json_decode($response, true);
}

$response = wapiRequest('dns-domain-add', 'array('name' => $domain)'); // Create domain in DNS
foreach ($dnsRecords as $record) {
$response = wapiRequest('dns-row-add', array(
'domain' => $domain,
'name' => $record['name'],
'ttl' => 300,
'type' => $record['type'],
'rdata' => $record['rdata']
)); // Populate domain with DNS records
}

Tento skript:

  • Vytváří univerzální wapiRequest funkce pro odesílání požadavků do rozhraní WAPI.
  • Přidá doménu do systému WEDOS DNS a poté přidá záznamy.

Možná budete chtít přidat:

  • Vlastní logika na základě odezvy code. Další informace naleznete v článku WAPI - WEDOS DNS.

ČASTO KLADENÉ DOTAZY

Mohu importovat primární DNS prostřednictvím AXFR?

Rozhraní pro import AXFR je v současné době ve vývoji. Bude také podporovat textové a souborové vstupy ve formátu BIND.

Bylo to užitečné?

Děkujeme za váš názor!
Obecné selektory
Pouze přesné shody
Vyhledávání v názvu
Vyhledávání v obsahu
Výběr typu příspěvku