Αντιστροφή ζώνης ανάθεσης σε υποδίκτυα μικρότερα από /24 στο BIND. Πως δουλεύει

Μια μέρα αντιμετώπισα το καθήκον να δώσω σε έναν από τους πελάτες μου το δικαίωμα να επεξεργάζεται εγγραφές PTR του υποδικτύου /28 που του έχει ανατεθεί. Δεν έχω αυτοματισμό για την επεξεργασία των ρυθμίσεων BIND από έξω. Επομένως, αποφάσισα να ακολουθήσω μια διαφορετική διαδρομή - να εκχωρήσω στον πελάτη ένα κομμάτι της ζώνης PTR του υποδικτύου /24.

Φαίνεται - τι θα μπορούσε να είναι πιο απλό; Απλώς καταχωρούμε το υποδίκτυο όπως απαιτείται και το κατευθύνουμε στο επιθυμητό NS, όπως γίνεται με έναν υποτομέα. Αλλά όχι. Δεν είναι τόσο απλό (αν και στην πραγματικότητα είναι γενικά πρωτόγονο, αλλά η διαίσθηση δεν θα βοηθήσει), γι' αυτό γράφω αυτό το άρθρο.

Όποιος θέλει να το καταλάβει μόνος του μπορεί να διαβάσει RFC
Όποιος θέλει μια έτοιμη λύση, καλώς η γάτα.

Για να μην καθυστερήσω σε όσους αρέσει η μέθοδος copy-paste θα αναρτήσω πρώτα το πρακτικό μέρος και μετά το θεωρητικό.

1. Εξάσκηση. Ζώνη ανάθεσης /28

Ας πούμε ότι έχουμε ένα υποδίκτυο 7.8.9.0/24. Πρέπει να αναθέσουμε το υποδίκτυο 7.8.9.240/28 σε πελάτη dns 7.8.7.8 (ns1.client.domain).

Στο DNS του παρόχου πρέπει να βρείτε ένα αρχείο που να περιγράφει την αντίστροφη ζώνη αυτού του υποδικτύου. Ας είναι 9.8.7.in-addr.harp.
Σχολιάζουμε συμμετοχές από 240 έως 255, αν υπάρχουν. Και στο τέλος του αρχείου γράφουμε τα εξής:

255-240  IN  NS      7.8.7.8
$GENERATE 240-255 $ CNAME $.255-240

μην ξεχάσετε να αυξήσετε τη σειριακή ζώνη και κάντε

rndc reload

Αυτό ολοκληρώνει το τμήμα παροχής. Ας περάσουμε στο dns πελάτη.

Αρχικά, ας δημιουργήσουμε ένα αρχείο /etc/bind/master/255-240.9.8.7.in-addr.arpa το ακόλουθο περιεχόμενο:

$ORIGIN 255-240.9.8.7.in-addr.arpa.
$TTL 1W
@                       1D IN SOA       ns1.client.domain. root.client.domain. (
                        2008152607      ; serial
                        3H              ; refresh
                        15M             ; retry
                        1W              ; expiry
                        1D )            ; minimum
@                       IN NS        ns1.client.domain.
@                       IN NS        ns2.client.domain.
241                     IN PTR          test.client.domain.
242                     IN PTR          test2.client.domain.
245                     IN PTR          test5.client.domain.

Και στο όνομα .conf προσθέστε μια περιγραφή του νέου μας αρχείου:

zone "255-240.9.8.7.in-addr.arpa." IN {
        type master;
        file "master/255-240.9.8.7.in-addr.arpa";
};

B επανεκκινήστε τη διαδικασία δέσμευσης.

/etc/init.d/named restart

Ολα. Τώρα μπορείτε να ελέγξετε.

#>  host 7.8.9.245 
245.9.8.7.in-addr.arpa is an alias for 245.255-240.9.8.7.in-addr.arpa.
245.255-240.9.8.7.in-addr.arpa domain name pointer test5.client.domain.

Λάβετε υπόψη ότι δεν δίνεται μόνο η εγγραφή PTR, αλλά και το CNAME. Έτσι πρέπει να είναι. Αν αναρωτιέστε γιατί, τότε καλώς ήρθατε στο επόμενο κεφάλαιο.

2. Θεωρία. Πως δουλεύει.

Είναι δύσκολο να διαμορφώσετε και να διορθώσετε ένα μαύρο κουτί. Είναι πολύ πιο εύκολο αν καταλαβαίνεις τι συμβαίνει μέσα.

Όταν εκχωρούμε έναν υποτομέα σε έναν τομέα τομέα, τότε γράφουμε κάτι σαν αυτό:

client.domain.	NS	ns1.client.domain.
ns1.client.domain.	A	7.8.7.8

Λέμε σε όλους όσους ρωτούν ότι δεν είμαστε υπεύθυνοι για αυτόν τον ιστότοπο και λέμε ποιος είναι υπεύθυνος. Και όλα τα αιτήματα για πελάτης.τομέας ανακατεύθυνση στο 7.8.7.8. Κατά τον έλεγχο, βλέπουμε την ακόλουθη εικόνα (θα παραλείψουμε τι έχει ο πελάτης εκεί. Δεν έχει σημασία):

# host test.client.domain
test.client.domain has address 7.8.9.241

Εκείνοι. ενημερωθήκαμε ότι υπάρχει τέτοιος δίσκος Α και η ip του είναι 7.8.9.241. Χωρίς περιττές πληροφορίες.

Πώς μπορεί να γίνει το ίδιο με ένα υποδίκτυο;

Επειδή Ο διακομιστής μας DNS είναι καταχωρημένος στο RIPE, τότε όταν ζητάτε μια διεύθυνση IP PTR από το δίκτυό μας, το πρώτο αίτημα θα εξακολουθεί να είναι σε εμάς. Η λογική είναι ίδια με τα domains. Πώς όμως εισάγετε ένα υποδίκτυο σε ένα αρχείο ζώνης;

Ας προσπαθήσουμε να το εισάγουμε ως εξής:

255-240  IN  NS      7.8.7.8

Και... το θαύμα δεν έγινε. Δεν λαμβάνουμε καμία ανακατεύθυνση αιτήματος. Το θέμα είναι ότι το bind δεν γνωρίζει καν ότι αυτές οι εγγραφές στο αρχείο της αντίστροφης ζώνης είναι διευθύνσεις IP και ακόμη περισσότερο δεν καταλαβαίνει την καταχώριση εύρους. Για αυτόν, αυτό είναι απλώς ένα είδος συμβολικού υποτομέα. Εκείνοι. για bind δεν θα υπάρχει διαφορά μεταξύ "255-240"Και"ο υπερπελάτης μας". Και για να πάει το αίτημα εκεί που πρέπει, η διεύθυνση στο αίτημα θα πρέπει να μοιάζει με αυτό: 241.255-240.9.8.7.in-addr.arpa. Ή όπως αυτό αν χρησιμοποιήσουμε έναν υποτομέα χαρακτήρων: 241.oursuperclient.9.8.7.in-addr.arpa. Αυτό είναι διαφορετικό από το συνηθισμένο: 241.9.8.7.in-addr.harp.

Θα είναι δύσκολο να υποβάλετε ένα τέτοιο αίτημα με μη αυτόματο τρόπο. Και ακόμα κι αν λειτουργεί, δεν είναι ακόμα σαφές πώς να το εφαρμόσετε στην πραγματική ζωή. Άλλωστε, κατόπιν αιτήματος 7.8.9.241 Το DNS του παρόχου εξακολουθεί να απαντά σε εμάς, όχι του πελάτη.

Και εδώ είναι που μπαίνουν στο παιχνίδι CNAME.

Από την πλευρά του παρόχου, πρέπει να δημιουργήσετε ένα ψευδώνυμο για όλες τις διευθύνσεις IP του υποδικτύου σε μια μορφή που θα προωθήσει το αίτημα στο DNS του πελάτη.

255-240  IN  NS      ns1.client.domain.
241     IN  CNAME   241.255-240
242     IN  CNAME   242.255-240
и т.д.

Αυτό είναι για τους εργατικούς =).

Και για τους τεμπέληδες, το παρακάτω σχέδιο είναι πιο κατάλληλο:

255-240  IN  NS      ns1.client.domain.
$GENERATE 240-255 $ CNAME $.255-240

Τώρα ζητήστε πληροφορίες στο 7.8.9.241 του 241.9.8.7.in-addr.harp στον διακομιστή DNS του παρόχου θα μετατραπεί σε 241.255-240.9.8.7.in-addr.arpa και πηγαίνει στον πελάτη dns.

Η πλευρά του πελάτη θα πρέπει να χειριστεί τέτοια αιτήματα. Αντίστοιχα, δημιουργούμε μια ζώνη 255-240.9.8.7.in-addr.arpa. Σε αυτό, μπορούμε, καταρχήν, να τοποθετήσουμε αντίστροφες εγγραφές για οποιαδήποτε ip ολόκληρου του υποδικτύου /24, αλλά θα μας ρωτήσουν μόνο για εκείνες που μας προωθεί ο πάροχος, επομένως δεν θα μπορούμε να παίξουμε γύρω από το =).
Για να το δείξω, θα δώσω για άλλη μια φορά ένα παράδειγμα των περιεχομένων ενός αρχείου αντίστροφης ζώνης από την πλευρά του πελάτη:

$ORIGIN 255-240.9.8.7.in-addr.arpa.
$TTL 1W
@                       1D IN SOA       ns1.client.domain. root.client.domain. (
                        2008152607      ; serial
                        3H              ; refresh
                        15M             ; retry
                        1W              ; expiry
                        1D )            ; minimum
@                       IN NS        ns1.client.domain.
@                       IN NS        ns2.client.domain.
241                     IN PTR          test.client.domain.
242                     IN PTR          test2.client.domain.
245                     IN PTR          test5.client.domain.

Αυτό συμβαίνει επειδή χρησιμοποιούμε το CNAME από την πλευρά του παρόχου και ως απάντηση σε αίτημα για δεδομένα ανά διεύθυνση IP, λαμβάνουμε δύο εγγραφές, όχι μία.

#>  host 7.8.9.245 
245.9.8.7.in-addr.arpa is an alias for 245.255-240.9.8.7.in-addr.arpa.
245.255-240.9.8.7.in-addr.arpa domain name pointer test5.client.domain.

Και μην ξεχάσετε να διαμορφώσετε σωστά το ACL. Γιατί δεν έχει νόημα να παίρνεις μια ζώνη PTR για τον εαυτό σου και να μην απαντάς σε κανέναν από έξω =).

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο