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

Για τι παραπονιέται πραγματικά ο αναλυτής

Ένας προορισμός γραμμένος ως διεύθυνση συν μάσκα πρέπει να περιγράφει δίκτυο, και ένα δίκτυο αρχίζει με μηδενισμένα bits υποδοχής. Όταν η διεύθυνση που δίνετε εξακολουθεί να φέρει τιμή στο τμήμα υποδοχής, το ζεύγος είναι εσωτερικά ασυνεπές: το 172.20.130.0 φαίνεται τακτοποιημένο επειδή τελειώνει σε μηδέν, αλλά το μηδέν στην τέταρτη οκτάδα δεν είναι το μόνο που μετράει. Η τρίτη οκτάδα είναι αυτή που κρατά εδώ περιπλανώμενα bits.

Τα εργαλεία χειρίζονται αυτή την ασυνέπεια διαφορετικά. Οι αυστηροί αναλυτές απορρίπτουν τη γραμμή και ονομάζουν τα bits υποδοχής. Οι επιεικείς αναλυτές καλύπτουν τη διεύθυνση με μάσκα και εγκαθιστούν κάτι που δεν ζητήσατε, το οποίο είναι χειρότερο, γιατί η διαμόρφωση τώρα δρομολογεί ένα εύρος που ποτέ δεν σκοπεύατε. Η ενότητα ipaddress της Python εκθέτει την επιλογή άμεσα: η αυστηρή ανάλυση δικτύου προκαλεί σφάλμα και το strict=False αφαιρεί τα bits υποδοχής με μάσκα. Ο πελάτης σας μπορεί να είναι αυστηρός, επιεικής ή ασυνεπής μεταξύ εκδόσεων, οπότε διαβάστε το μήνυμα αντί να εμπιστεύεστε μια συνήθεια.

Επεξεργαστείτε το παράδειγμα με το χέρι

Πάρτε μια σήραγγα που πρέπει να φτάσει στο 172.20.130.0 με μάσκα /20. Η /20 δανείζεται τέσσερα bits από την τρίτη οκτάδα, οπότε αυτή η οκτάδα μετράει μόνο σε βήματα του 16: 0, 16, 32 και μετά έως το 240. Η τιμή 130 πέφτει μεταξύ 128 και 143, που σημαίνει ότι το περιβάλλον δίκτυο ξεκινά στο 172.20.128.0, όχι στο 172.20.130.0 με την τελευταία οκτάδα καθαρισμένη.

Γραμμένο, το μπλοκ εκτείνεται από 172.20.128.0 έως 172.20.143.255 και περιέχει 4,096 διευθύνσεις. Η τροφοδοσία των ίδιων τιμών σε έναν μη αυστηρό αναλυτή δείχνει την αντικατάσταση που θα είχε κάνει για λογαριασμό σας:

$ python3 -c "import ipaddress; n=ipaddress.ip_network('172.20.130.0/20', strict=False); print(n, n.num_addresses)"
172.20.128.0/20 4096

Αποφασίστε ποιον προορισμό εννοούσατε πραγματικά

Η απορριφθείσα γραμμή κρύβει συνήθως μία από τρεις προθέσεις και μόνο εσείς μπορείτε να επιλέξετε. Αν η σήραγγα χρειάζεται όλο το μπλοκ, γράψτε 172.20.128.0/20, τη κανονική διεύθυνση δικτύου. Αν η σήραγγα χρειάζεται μόνο το τμήμα 130, η μάσκα ήταν λάθος και το 172.20.130.0/24 είναι η έντιμη μορφή. Αν ο στόχος είναι ένα μόνο μηχάνημα, μια διαδρομή υποδοχής IPv4 είναι /32 και δεν εμπλέκεται καμία αριθμητική μάσκας.

Κάθε μία επιτρέπει διαφορετική ποσότητα κίνησης, και αυτός είναι ο πραγματικός λόγος να μη διευρύνετε τη μάσκα μέχρι να σταματήσει το παράπονο. Μια /16 δέχεται τη γραμμή σχεδόν παντού και στέλνει κίνηση προς προορισμούς που ποτέ δεν θέλατε να δρομολογήσετε μέσω της σήραγγας. Γράψτε το στενότερο πρόθεμα που ταιριάζει με την πρόθεση και μετά επιβεβαιώστε το με το επόμενο άλμα που περιμένετε, όχι με τη σιωπή του αναλυτή.

Γιατί η προώθηση δεν ήταν ποτέ η λύση

Μια απορριφθείσα διαδρομή δεν φτάνει ποτέ στη διαδρομή προώθησης, οπότε η εναλλαγή του net.ipv4.ip_forward δεν μπορεί να αλλάξει το αποτέλεσμα. Αυτή η ρύθμιση μετράει αργότερα, όταν ο υποδοχέας πρέπει να περνά πακέτα μεταξύ διεπαφών, και η ενεργοποίησή της πριν ο πίνακας είναι σωστός αλλάζει μόνο ποιο στάδιο θα αποτύχει μετά.

Δύο άλλα πράγματα κατηγορούνται συχνά στο ίδιο σημείο. Η διαδρομή μπορεί να γίνει δεκτή και παρόλα αυτά να χάσει από μια πιο συγκεκριμένη διαδρομή, και ένας κανόνας τείχους προστασίας μπορεί να απορρίψει κίνηση μετά από σωστή αναζήτηση. Κρατήστε τα στάδια χωριστά: σύνταξη, εγκατάσταση, επιλογή, φιλτράρισμα. Η εργασία στο λάθος στάδιο φαίνεται παραγωγική γιατί κάθε αλλαγή επανεκκινεί κάτι.

Ελέγξτε την εγκατεστημένη διαδρομή και το μονοπάτι που κερδίζει

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

Ρωτήστε μια διεύθυνση μέλους καθώς και μία εκτός του μπλοκ, ώστε η σύγκριση να έχει νόημα αντί για μία μόνο καθησυχαστική γραμμή:

ip -4 route show 172.20.128.0/20
ip -4 route get 172.20.140.10
ip -4 route get 172.20.200.10

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

Σχετικά άρθρα