Nu adăugați punctul final la numele RR. Folosește-l așa:
server my.dns.server
zone example.com
exemplu cheie.com unele-date-cheie
actualizare șterge example.com 604800 A
actualizare add example.com 604800 A 192.0.2.1
trimite
Tocmai l-am testat cu înregistrarea A și MX; a funcționat pentru mine, serverul este PowerDNS, clientul este ISC nsupdate de la bind-tools, autentificarea a fost prin TSIG, numele cheii este egal cu numele zonei pentru simplitate.
Am impresia că nu înțelegi pe deplin cum $ORIGINĂ
și @
de lucru, așa că iată o mică explicație. Pentru explicația completă vezi RFC1035.
Pe fir acestea nu apar niciodată. Este doar un „zahăr de sintaxă” convenabil care scurtează tastarea și citirea fișierelor de zonă. Următoarele trei exemple definesc zone identice (mi-e lene să completez înregistrările SOA, valorile lor exacte nu contează pentru subiectul nostru):
$ORIGIN example.com.
@ 604800 IN SOA ns1 ....
604800 ÎN NS ns1
ns1 3600 IN A 192.0.2.1
@ 3600 ÎN A 192.0.2.5
$ORIGINĂ .
exemplu.com 604800 ÎN SOA ns1.example.com ....
$ORIGIN com.
exemplu 604800 IN NS ns1.exemplu
$ORIGIN ns1.example.com.
@ 3600 ÎN A 192.0.2.1
exemplu.com. 3600 ÎN A 192.0.2.5
exemplu.com. 604800 ÎN SOA ns1.example.com. ....
exemplu.com. 604800 ÎN NS ns1.example.com.
ns1.example.com. 3600 ÎN A 192.0.2.1
exemplu.com. 3600 ÎN A 192.0.2.5
În primul exemplu nu am specificat niciun nume RR în a treia linie (NS
RR după SOA
RR), astfel încât analizatorul îl va prelua din linia anterioară. Acest comportament este motivul precis pentru @
existența sintaxei: nu puteți lăsa câmpul de nume RR gol, deoarece va lua numele înregistrării anterioare. Dacă am sărit peste @
la ultima înregistrare, aș defini o secundă A
înregistrare pentru ns1
. Deci, pentru a defini o înregistrare cu numele egal cu originea setata în prezent (va fi „apex” dacă originea este setată la numele zonei) nu puteți folosi „nume gol”, deoarece va invoca acest comportament „preluare anterior”.Fie trebuie să scrieți numele complet al înregistrării în mod explicit cu punctul final, astfel încât să nu adăugați o origine (cum este scris în alte exemple), să schimbați originea sau să utilizați un simbol special @
care îi spune parserului: „nu repeta numele anterior, aici vine originea goală”, deci ultima linie din primul exemplu definește exemplu.com.
.
Al doilea exemplu este doar o demonstrație fantezică cum $ORIGINĂ
și @
lucram impreuna.
Al treilea exemplu nu folosește zahăr. Acestea sunt date reale absolute pe care le deține zona în fiecare dintre aceste trei exemple.
Deci, înregistrarea dvs. ar putea fi reprezentată în fișierul de zonă ca exemplu.com
după $ORIGINĂ .
, sau exemplu.com.
oriunde, sau @
după $ORIGIN example.com.
, sau chiar exemplu
după $ORIGIN com.
, nu contează. Aceste cazuri sunt toate egale. Probabil că vă așteptați să vedeți varianta „@”, dar BIND poate decide să o scrie ca oricare dintre acele variante, așa că fiți pregătit să le recunoașteți pe toate. Și nu îl puteți forța să folosească vreo variantă anume, îmi pare rău.
Un alt avertisment ar putea fi să citiți fișierul de zonă după actualizare fără a-l îngheța mai întâi. Observați fișierul „jnl” de lângă fișierul de zonă; este jurnalul în care datele dvs. actualizate au fost stocate pentru prima dată. Doar când faci rndc freeze example.com
datele sunt scrise în fișierul de zonă (dar zona este apoi blocată pentru actualizări, pentru a debloca trebuie să faceți dezgheţ
funcționarea sau reîncărcați serverul). Modul corect de a verifica dacă zona este actualizată sau nu este să faceți interogarea DNS reală, cu săpa
sau gazdă
sau nslookup
, oricare îți place:
gazdă -v exemplu.com