Μια μέρα αντιμετώπισα το καθήκον να δώσω σε έναν από τους πελάτες μου το δικαίωμα να επεξεργάζεται εγγραφές PTR του υποδικτύου /28 που του έχει ανατεθεί. Δεν έχω αυτοματισμό για την επεξεργασία των ρυθμίσεων BIND από έξω. Επομένως, αποφάσισα να ακολουθήσω μια διαφορετική διαδρομή - να εκχωρήσω στον πελάτη ένα κομμάτι της ζώνης PTR του υποδικτύου /24.
Φαίνεται - τι θα μπορούσε να είναι πιο απλό; Απλώς καταχωρούμε το υποδίκτυο όπως απαιτείται και το κατευθύνουμε στο επιθυμητό NS, όπως γίνεται με έναν υποτομέα. Αλλά όχι. Δεν είναι τόσο απλό (αν και στην πραγματικότητα είναι γενικά πρωτόγονο, αλλά η διαίσθηση δεν θα βοηθήσει), γι' αυτό γράφω αυτό το άρθρο.
Όποιος θέλει να το καταλάβει μόνος του μπορεί να διαβάσει
Όποιος θέλει μια έτοιμη λύση, καλώς η γάτα.
Για να μην καθυστερήσω σε όσους αρέσει η μέθοδος 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