Μετάβαση στο περιεχόμενο
EuroVPSEuroVPS
Περιοχή πελατών

Πώς τρέχετε DNS με hidden primary και δημόσια secondaries

Κρατήστε το κύριο αντίγραφο των ζωνών σας εκτός internet και αφήστε τα secondaries να κάνουν τις απαντήσεις. Δύο τρόποι να τα τροφοδοτήσετε με PowerDNS, με DNSSEC, και οι έλεγχοι.

Από EuroVPS Engineering

5 λεπτά ανάγνωσης
Πώς τρέχετε DNS με hidden primary και δημόσια secondaries

Ο server στον οποίο επεξεργάζεστε τις ζώνες DNS σας δεν χρειάζεται να απαντά στο internet, και δεν θα έπρεπε. Ένας hidden primary κρατά το authoritative αντίγραφο και δέχεται αλλαγές από τους ανθρώπους σας και τον αυτοματισμό σας. Ένα σύνολο δημόσιων secondaries, που είναι οι μόνοι servers στις εγγραφές NS σας, απαντούν σε κάθε query. Ο primary μπορεί να ενημερώνεται, να επανεκκινείται ή να δέχεται επίθεση από κανέναν, επειδή κανείς απ' έξω δεν ξέρει πού είναι. Αυτό το άρθρο δείχνει πώς το χτίζετε με PowerDNS, τους δύο τρόπους να φτάσουν τα δεδομένα από τον primary στα secondaries, και τους ελέγχους που αποδεικνύουν ότι ο primary είναι πραγματικά κρυφός.

Η μορφή του σχεδιασμού

  • Ένας primary σε ιδιωτικό δίκτυο, χωρίς δημόσια διεύθυνση, που δεν κατονομάζεται ποτέ σε εγγραφές NS ή SOA. Τρέχει το API και τη web διεπαφή που χρησιμοποιεί η ομάδα σας.
  • Δύο ή περισσότερα δημόσια secondaries σε διαφορετικά sites, ιδανικά σε διαφορετικά δίκτυα και διαφορετικούς παρόχους ή πλατφόρμες, ώστε καμία μεμονωμένη αστοχία να μην τα ρίξει όλα.
  • Μια ιδιωτική διαδρομή από τον primary προς κάθε secondary, μόνο για replication.
  • Τα secondaries συνεχίζουν να απαντούν αν ο primary εξαφανιστεί. Κρατούν πλήρες αντίγραφο, οπότε ένας νεκρός primary σημαίνει «καμία αλλαγή για λίγο», όχι «domain εκτός».

Υπάρχουν δύο τρόποι να τροφοδοτήσετε τα secondaries. Και οι δύο δουλεύουν. Ταιριάζουν σε διαφορετικές ομάδες.

Επιλογή πρώτη: zone transfers με NOTIFY και TSIG

Αυτό είναι standard DNS και δουλεύει με οποιοδήποτε μείγμα DNS servers. Ο primary στέλνει NOTIFY όταν μια ζώνη αλλάξει. Το secondary ελέγχει το SOA serial και τραβά τη ζώνη με AXFR ή IXFR.

Στον primary, στο pdns.conf:

primary=yes
allow-axfr-ips=192.0.2.21/32,198.51.100.31/32
also-notify=192.0.2.21,198.51.100.31
only-notify=

Αυτές οι διευθύνσεις είναι οι ιδιωτικές διευθύνσεις των secondaries. Αφήνοντας το only-notify κενό και απαριθμώντας στόχους στο also-notify, το NOTIFY πηγαίνει μόνο στα secondaries σας, ποτέ σε ό,τι τυχαίνει να βρίσκεται στις εγγραφές NS.

Μετά υπογράψτε τις μεταφορές. Μια λίστα επιτρεπόμενων IP από μόνη της εμπιστεύεται το δίκτυο. Ένα κλειδί TSIG αποδεικνύει ότι το αίτημα έρχεται από το secondary σας.

# on the primary
pdnsutil generate-tsig-key xfr hmac-sha256
pdnsutil activate-tsig-key example.com xfr primary
pdnsutil list-tsig-keys      # copy the secret

# on each secondary (pdns.conf contains: secondary=yes)
pdnsutil import-tsig-key xfr hmac-sha256 '<secret>'
pdnsutil create-secondary-zone example.com 203.0.113.10
pdnsutil activate-tsig-key example.com xfr secondary

Όπου 203.0.113.10 είναι η ιδιωτική διεύθυνση του primary. Για να μη δημιουργείτε κάθε ζώνη με το χέρι σε κάθε secondary, το PowerDNS μπορεί να τις δημιουργεί αυτόματα όταν ο primary στείλει NOTIFY για νέα ζώνη. Ρυθμίστε τον primary ως autoprimary σε κάθε secondary:

pdnsutil add-autoprimary 203.0.113.10 ns1.example.net

και ορίστε autosecondary=yes στα secondaries.

Επιλογή δεύτερη: native ζώνες και database replication

Το PowerDNS μπορεί επίσης να παρακάμψει εντελώς τις μεταφορές DNS. Σημειώστε τις ζώνες ως NATIVE, κρατήστε τες σε backend MySQL, MariaDB ή PostgreSQL, και αφήστε τη βάση δεδομένων να αντιγράφει τα δεδομένα του primary σε ένα read-only replica σε κάθε secondary.

pdnsutil set-kind example.com native

Σε κάθε secondary, το PowerDNS διαβάζει από την τοπική replica βάση του, ρυθμισμένη read-only. Το replication τρέχει μόνο πάνω από το ιδιωτικό δίκτυο.

Γιατί να το επιλέξετε:

  • Κάθε αλλαγή φτάνει ως γραμμή, μόλις τη στείλει η βάση δεδομένων. Δεν υπάρχει αύξηση serial για να ξεχάσετε και NOTIFY για να χαθεί.
  • Το AXFR μπορεί να απενεργοποιηθεί παντού, οπότε δεν υπάρχει καθόλου διεπαφή μεταφοράς για να προστατεύσετε.
  • Νέες ζώνες εμφανίζονται στα secondaries αυτόματα, επειδή είναι κι αυτές γραμμές.
  • Τα κλειδιά DNSSEC αντιγράφονται μαζί με τις εγγραφές, και κάθε secondary υπογράφει μόνο του τις απαντήσεις.

Γιατί όχι: κάθε secondary πρέπει να τρέχει το ίδιο backend, και τώρα λειτουργείτε database replication, που χρειάζεται δική του παρακολούθηση για lag και σπασμένα νήματα. Αν τα secondaries σας περιλαμβάνουν DNS άλλου κατασκευαστή, οι μεταφορές είναι η μόνη επιλογή.

Εμείς χτίζουμε τα δικά μας με native ζώνες και database replication, επειδή αφαιρεί εντελώς την επιφάνεια μεταφοράς και κάνει τη βάση δεδομένων τη μία, προφανή πηγή αλήθειας.

DNSSEC με hidden primary

Και οι δύο επιλογές υποστηρίζουν υπογραφή:

  • Με μεταφορές, υπογράφετε στον primary. Τα secondaries λαμβάνουν την υπογεγραμμένη ζώνη και τη σερβίρουν ως presigned δεδομένα. Το PowerDNS σημειώνει τη ζώνη PRESIGNED αυτόματα όταν μεταφέρει υπογεγραμμένες εγγραφές.
  • Με database replication, τα κλειδιά ζουν στη βάση δεδομένων, οπότε κάθε secondary υπογράφει ζωντανά με τα ίδια κλειδιά και απαντά πανομοιότυπα.

Σε κάθε περίπτωση, δοκιμάστε την επικύρωση από έξω με έναν validating resolver:

dig +dnssec example.com SOA @1.1.1.1
delv example.com SOA

Το delv πρέπει να αναφέρει «fully validated».

Κατονομάστε τους σωστούς servers

Το νόημα ενός hidden primary χάνεται αν το όνομά του διαρρεύσει στις εγγραφές που διαβάζει ο κόσμος.

  • Οι εγγραφές NS απαριθμούν μόνο τα δημόσια secondaries.
  • Το πεδίο SOA MNAME κατονομάζει ένα δημόσιο secondary, όχι τον primary. Στο PowerDNS, το default-soa-content το ορίζει για νέες ζώνες. Διορθώστε τις υπάρχουσες με pdnsutil edit-zone.
  • Το glue στο μητρώο δείχνει μόνο στις δημόσιες διευθύνσεις των secondaries.

Κάποια εργαλεία βάζουν το όνομα του ίδιου του server στο SOA MNAME από προεπιλογή. Ελέγξτε το σε κάθε ζώνη, όχι μόνο στην πρώτη.

Κλειδώστε κάθε ρόλο

  • Βάλτε μπροστά από κάθε δημόσιο secondary ένα front end που καταλαβαίνει DNS, όπως το dnsdist, για να αρνείται τύπους query που επιτρέπουν amplification, να περιορίζει τον ρυθμό, και να απορρίπτει queries για ζώνες που δεν σερβίρετε.
  • Στα secondaries, αρνηθείτε NOTIFY από οπουδήποτε εκτός από τον primary, και αρνηθείτε αιτήματα AXFR από το internet.

Ελέγξτε το από έξω

# NS and SOA name only public secondaries
dig +short NS example.com
dig +short SOA example.com

# Every secondary has the same serial
for ns in $(dig +short NS example.com); do
  printf '%s ' "$ns"; dig +short SOA example.com @"$ns" | awk '{print $3}'
done

# Transfers are refused from the internet
dig AXFR example.com @ns1.example.net

# The primary does not answer from outside (expect a timeout)
dig example.com SOA @<primary-address> +time=2 +tries=1

Τρέξτε τη σύγκριση serial συνεχώς, όχι μία φορά. Ένα secondary που σταμάτησε να λαμβάνει ενημερώσεις συνεχίζει να απαντά με σιγουριά με παλιά δεδομένα. Το μόνο σύμπτωμα είναι ένα serial που μένει πίσω. Βάλτε συναγερμό σε αυτό, και συναγερμό αν το όνομα ή η διεύθυνση του primary εμφανιστεί ποτέ σε εγγραφή NS ή SOA.

Εν συντομία

Ο primary είναι εκεί που επεξεργάζεστε, τα secondaries είναι εκεί που ρωτά ο κόσμος, και τα δύο συναντιούνται μόνο σε ιδιωτικό δίκτυο. Διαλέξτε μεταφορές αν αναμειγνύετε κατασκευαστές DNS, database replication αν δεν θέλετε καθόλου επιφάνεια μεταφοράς. Κατονομάστε μόνο τα secondaries, υπογράψτε τη ζώνη, και παρακολουθείτε τα serials.

Χτίζουμε και λειτουργούμε clusters PowerDNS με αυτόν τον τρόπο για πελάτες που θέλουν να κατέχουν το DNS τους. Αν σχεδιάζετε ένα, ευχαρίστως να βοηθήσουμε.

CTA

Μιλήστε με έναν μηχανικό

Related

Σχετικά: Authoritative και recursive DNS σε PowerDNS · Authoritative DNS και reverse DNS, ως υποδομή

Δημοσιεύθηκε 14 Σεπτεμβρίου 2026.

Όλες οι σημειώσεις