V tomto článku se dozvíte:
- Jak funguje primární DNS systému WEDOS
- Jak migrovat primární DNS prostřednictvím rozhraní WAPI
- Často kladené otázky
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:
- číst data z jednoduchého souboru .zone (formát BIND),
- extrahovat záznamy DNS a
- 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é
@
nebodomain.tld.
), na subdomény se odkazuje pomocí názvu (např.www
). - Záznam SOA je inline, např.
@ IN SOA ns1.example-dns.tld.
a nahoře.ns2.example-dns.tld
. - 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
aNS
a prázdné řádky. - Uloží každý záznam typu
A
,AAAA
,MX
,CNAME
neboTXT
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.