Μετατρέψτε ένα εύρος IP από την πρώτη στην τελευταία διεύθυνση σε ακριβείς διαδρομές VPN
Ένα εύρος από την πρώτη στην τελευταία διεύθυνση σπάνια χωρά σε ένα πρόθεμα. Μετατρέψτε το σε ακριβή μπλοκ CIDR ώστε μια διαδρομή να μην πιάνει προορισμούς εκτός του διαστήματος.
Κάποιος σας δίνει μια πρώτη και μια τελευταία διεύθυνση και ζητά μια διαδρομή VPN. Η δελεαστική κίνηση είναι να διαλέξετε το συντομότερο πρόθεμα που περιέχει και τα δύο άκρα, και αυτή η κίνηση προσθέτει ήσυχα προορισμούς που κανείς δεν ζήτησε. Ένα μπλοκ CIDR έχει πάντα μέγεθος δύναμη του δύο και διεύθυνση έναρξης ευθυγραμμισμένη με αυτό, οπότε ένα αυθαίρετο διάστημα συνήθως χρειάζεται περισσότερα από ένα. Διατρέξτε το διάστημα, χωρίστε το ακριβώς και μετά ελέγξτε τις διευθύνσεις ακριβώς έξω από αυτό.
Ξεκινήστε από το διάστημα, όχι από το πρόθεμα
Γράψτε την πρώτη διεύθυνση και την τελευταία διεύθυνση πριν γράψετε οτιδήποτε άλλο. Το ζεύγος είναι η απαίτηση· ένα πρόθεμα είναι μόνο μια πιθανή έκφρασή της, και μερικές φορές λανθασμένη. Δύο αριθμοί είναι επίσης πολύ πιο εύκολο να ελεγχθούν από μια μάσκα.
Ένα ευθυγραμμισμένο διάστημα συμπτύσσεται σε ένα μπλοκ. Ένα μη ευθυγραμμισμένο διασπάται σε περισσότερα, και η διάσπαση είναι ακριβής και όχι κατά προσέγγιση. Αυτό που δεν πρέπει να κάνετε είναι να στρογγυλοποιήσετε προς τα έξω και να το πείτε αρκετά κοντά, γιατί οι επιπλέον διευθύνσεις λαμβάνουν όποια πολιτική φέρει η διαδρομή.
Και οι δύο κατευθύνσεις του λάθους έχουν σημασία. Για μια διαδρομή προς τη σήραγγα, οι επιπλέον διευθύνσεις τραβιούνται μέσα στο VPN. Για μια εξαίρεση παράκαμψης, οι επιπλέον διευθύνσεις την προσπερνούν. Κανένα από τα δύο αποτελέσματα δεν είναι ορατό σε έναν πίνακα διαδρομών που δείχνει μόνο το πρόθεμα που εγκαταστήσατε.
Πρώτη περίπτωση: το διάστημα τυχαίνει να είναι ευθυγραμμισμένο
Πάρτε 198.51.100.64 έως 198.51.100.127. Η πρώτη διεύθυνση είναι ευθυγραμμισμένη σε όριο 64 διευθύνσεων και το διάστημα είναι ακριβώς 64 διευθύνσεις, οπότε ένα μόνο /26 το περιγράφει χωρίς κανένα υπόλοιπο.
Αυτή είναι η εύκολη περίπτωση και αξίζει να την αναγνωρίζετε, γιατί σημαίνει ότι η απαίτηση γράφτηκε μάλλον από κάποιον που σκεφτόταν ήδη με προθέματα. Σημαίνει επίσης ότι ο έλεγχος είναι σύντομος: επιβεβαιώστε ότι το μέγεθος είναι δύναμη του δύο και ότι η αρχή είναι πολλαπλάσιο αυτού του μεγέθους.
Τα εύρη τεκμηρίωσης δίνουν καλά παραδείγματα ακριβώς επειδή κανείς δεν τα κατέχει. Μην εγκαθιστάτε αυτές τις διευθύνσεις σε πραγματική σήραγγα και μην υποθέτετε ότι ένα εύρος που σας δόθηκε είναι χώρος τεκμηρίωσης μόνο επειδή φαίνεται ασυνήθιστο.
Δεύτερη περίπτωση: δεν είναι, οπότε χωρίστε το
Τώρα πάρτε 198.51.100.100 έως 198.51.100.107. Αυτές είναι οκτώ διευθύνσεις, που είναι δύναμη του δύο, αλλά το 100 δεν είναι πολλαπλάσιο του οκτώ. Ένα μόνο μπλοκ αυτού του μεγέθους δεν μπορεί να ξεκινήσει εκεί, οπότε το διάστημα πρέπει να καλυφθεί από περισσότερα από ένα.
Η ακριβής κάλυψη είναι δύο μπλοκ /30: το 198.51.100.100/30 καλύπτει το 100 έως το 103, και το 198.51.100.104/30 καλύπτει το 104 έως το 107. Οκτώ διευθύνσεις συνολικά, τίποτα έξω από το διάστημα, και η διάσπαση είναι μοναδική για ένα δεδομένο διάστημα.
python3 -c "from ipaddress import ip_address, summarize_address_range as s; print(*s(ip_address('198.51.100.100'), ip_address('198.51.100.107')), sep='\n')"
Η συνάρτηση της τυπικής βιβλιοθήκης κάνει την αριθμητική για εσάς, και η τεκμηρίωση του ipaddress ορίζει τι επιστρέφει. Αυτό που δεν κάνει είναι να επιλέξει πύλη, να αποφασίσει ποιος κατέχει τις διευθύνσεις ή να παραχωρήσει πρόσβαση σε οποιαδήποτε υπηρεσία πίσω από αυτές.
Μετρήστε τι θα είχε πιάσει το ευρύτερο πρόθεμα
Πριν δεχτείτε μια συντόμευση, υπολογίστε πόσο κοστίζει. Ένα /28 που ξεκινά στο 198.51.100.96 καλύπτει το 96 έως το 111, δηλαδή δεκαέξι διευθύνσεις αντί για οκτώ. Οι επιπλέον οκτώ είναι το 96 έως το 99 και το 108 έως το 111, και καθεμία από αυτές θα κληρονομούσε τη διαδρομή.
python3 -c "from ipaddress import ip_network as n; w=set(n('198.51.100.96/28')); t=set(n('198.51.100.100/30'))|set(n('198.51.100.104/30')); print(len(w), len(t), sorted(w-t))"
Οκτώ επιπλέον προορισμοί είναι ένα συγκεκριμένο νούμερο που μπορείτε να βάλετε σε ένα αίτημα αλλαγής. Είναι επίσης το νούμερο που αποφασίζει αν η συντόμευση είναι αποδεκτή, και αυτό είναι ζήτημα πολιτικής και όχι αριθμητικής.
Κρατήστε την αριθμητική και την ανακάλυψη χωριστά. Ένα διάστημα που παρέχει ο διαχειριστής δικτύου μετατρέπεται ακριβώς. Μία απάντηση DNS από μια μεταβαλλόμενη υπηρεσία δεν καθορίζει το πλήρες ή μόνιμο εύρος αυτής της υπηρεσίας, και άσχετα ονόματα μπορούν να μοιράζονται μια διεύθυνση.
Εγκαταστήστε το ακριβές σύνολο και επαληθεύστε τα άκρα
Δώστε κάθε πρόθεμα που προκύπτει σε όποιον κατέχει τη διαμόρφωση VPN και αφήστε τον να το εγκαταστήσει μέσω του υποστηριζόμενου μηχανισμού. Αν η απαίτηση χρειάζεται δύο καταχωρίσεις, κρατήστε δύο καταχωρίσεις αντί να διευρύνετε μία για να κάνετε μια φόρμα πιο σύντομη.
sudo ip route add 198.51.100.100/30 via 10.90.0.1 dev tun0 sudo ip route add 198.51.100.104/30 via 10.90.0.1 dev tun0 ip route get 198.51.100.101 ip route get 198.51.100.97
Οι δύο τελευταίες εντολές είναι αυτές που παραλείπουν οι άνθρωποι. Η πρώτη εσωτερική διεύθυνση πρέπει να ακολουθεί τη νέα διαδρομή, και η διεύθυνση ακριβώς έξω από το διάστημα δεν πρέπει. Αν και οι δύο πάνε με τον ίδιο τρόπο, το διάστημα διευρύνθηκε κάπου ανάμεσα στην απαίτηση και τη διαμόρφωση.
Καταγράψτε την πρώτη διεύθυνση, την τελευταία διεύθυνση και τα προθέματα που τις εκφράζουν. Το επόμενο άτομο που θα ελέγξει τον κανόνα μπορεί τότε να αντιπαραβάλει την απαίτηση με τη διαμόρφωση χωρίς να ξανακάνει την αριθμητική, και η διαφορά ανάμεσα σε μια ακριβή και μια βολική διαδρομή παραμένει ορατή.