Μεταφορά σταθερού εσωτερικού πακέτου 1,500 byte μέσα από VPN
Ένα σταθερό εσωτερικό πακέτο 1,500 byte δεν χωρά σε εξωτερική διαδρομή 1,500 byte. Μετρήστε την επιβάρυνση και μετά επιλέξτε μεγαλύτερο MTU υποκείμενου δικτύου ή υποστηριζόμενη κατάτμηση.
Έχετε μια απαίτηση που δεν λυγίζει: η απομακρυσμένη πλευρά πρέπει να λάβει το ίδιο πακέτο IP των 1,500 byte που εκπέμπει ο αποστολέας, μαζί με τις κεφαλίδες. Ένα τούνελ δεν μπορεί να τυλίξει αυτό το πακέτο μαζί με τη δική του πλαισίωση μέσα σε ένα δεύτερο πακέτο IP των 1,500 byte, άρα κάτι στον σχεδιασμό πρέπει να υποχωρήσει. Η σειρά παρακάτω είναι αυτή που χρησιμοποιώ σε ένα παράθυρο αλλαγών: γράψτε τον προϋπολογισμό byte, αποδείξτε τι μπορεί πραγματικά να μεταφέρει το υποκείμενο δίκτυο, μετά επιλέξτε ακριβώς έναν μηχανισμό μεταφοράς και επιβεβαιώστε το εσωτερικό πακέτο στην άλλη πλευρά.
Γράψτε τον προϋπολογισμό byte πριν επεξεργαστείτε ένα προφίλ
Η ενθυλάκωση προσθέτει byte σε πολλαπλά επίπεδα και το σύνολο είναι ιδιότητα του προφίλ σας και όχι σταθερά που μπορείτε να αναζητήσετε. Η οικογένεια διευθύνσεων, η επιλογή κρυπτογράφησης, το πρωτόκολλο μεταφοράς και κάθε επιλογή συμπίεσης ή πλαισίωσης μετακινούν τον αριθμό, γι’ αυτό μια αφαίρεση αντιγραμμένη από άλλη εγκατάσταση είναι άχρηστη ως προϋπολογισμός. Ξεκινήστε από την εσωτερική απαίτηση, προσθέστε τη μετρημένη επιβάρυνση ανά πακέτο της δικής σας διαμόρφωσης και γράψτε το προκύπτον εξωτερικό μέγεθος στο δελτίο αλλαγής πριν επεξεργαστεί κάποιος ένα αρχείο.
Δύο αριθμοί καθορίζουν τον σχεδιασμό: το μεγαλύτερο εξωτερικό πακέτο που μεταφέρει η διαδρομή χωρίς κατάτμηση και τα επιπλέον byte που χρειάζεται η ενθυλάκωσή σας. Όταν το πρώτο είναι μικρότερο από το δεύτερο συν 1,500, ένα από τα δύο πρέπει να αλλάξει. Η επιλογή είναι τότε στενή και όχι δημιουργική, γι’ αυτό γράφω και τους δύο αριθμούς πριν συζητήσουμε επιλογές. Τίποτα στο επίπεδο του τούνελ δεν συμπιέζει αυτά τα byte και κανένας ακέραιος MTU δεν αφαιρεί την απαίτηση που σας δόθηκε.
Δοκιμάστε το υποκείμενο δίκτυο με ping χωρίς κατάτμηση
Μετρήστε τη διαδρομή αντί να εμπιστεύεστε το MTU της διεπαφής, γιατί ο μικρότερος κρίκος στην εξωτερική διαδρομή είναι αυτός που μετράει. Στο Linux το -M do θέτει το bit απαγόρευσης κατάτμησης και το -s παίρνει το φορτίο ICMP, οπότε ένα πλαίσιο 1,500 byte απαντά στα 1,472 byte φορτίου αφού αφαιρεθούν η κεφαλίδα IP των 20 byte και η κεφαλίδα ICMP των 8 byte. Ανεβάστε το φορτίο μέχρι να αποτύχει η δοκιμή και μετά πηδήξτε σε μέγεθος jumbo για να δείτε αν η διαδρομή το μεταφέρει καθόλου.
ping -M do -s 1472 -c 2 198.51.100.10 ping -M do -s 8972 -c 2 198.51.100.10 tracepath -n 198.51.100.10
Μια διαδρομή που περνά 1,472 και αποτυγχάνει στα 8,972 δεν μπορεί να μεταφέρει ένα εσωτερικό πακέτο 1,500 byte συν την επιβάρυνση σε ένα μόνο εξωτερικό πακέτο. Αυτή είναι η απάντηση που χρειαζόσασταν πριν ανοίξετε τη διαμόρφωση VPN. Καθορίζει επίσης ποια από τις δύο επόμενες ενότητες σας αφορά, γι’ αυτό κρατήστε τα δύο αποτελέσματα της δοκιμής δίπλα στο δελτίο. Το να μαντέψετε εδώ κοστίζει ένα παράθυρο συντήρησης, γιατί ένα τούνελ που δηλώνει ενεργό δεν λέει τίποτα για το μεγαλύτερο πακέτο που θα δεχτεί η διαδρομή.
Αυξήστε το MTU της διαδρομής μόνο όπου συμφωνεί κάθε άλμα
Τα πλαίσια jumbo είναι ιδιότητα από άκρο σε άκρο, όχι ρύθμιση που ενεργοποιείτε στα δύο άκρα που τυχαίνει να ελέγχετε. Κάθε μεταγωγέας, δρομολογητής και σημείο παράδοσης παρόχου στην εξωτερική διαδρομή πρέπει να συμφωνήσει στο μεγαλύτερο μέγεθος και ένα μόνο άλμα 1,500 byte θα απορρίψει σιωπηλά το πακέτο που μόλις μεγαλώσατε. Το να ανεβάσετε μόνο την τοπική διεπαφή είναι η κλασική μισή αλλαγή που κάνει το τούνελ να φαίνεται χαλασμένο ενώ το υποκείμενο δίκτυο ρίχνει ήσυχα.
ip link set dev eth1 mtu 9000 ip link show dev eth1 ping -M do -s 8972 -c 2 198.51.100.10
Αλλάξτε τη διεπαφή και μετά δοκιμάστε ξανά την ίδια διαδρομή πριν αλλάξετε οτιδήποτε άλλο. Αν η δοκιμή αποτυγχάνει ακόμα, επαναφέρετε με ip link set dev eth1 mtu 1500 και προχωρήστε σε κατάτμηση αντί να μαλώνετε με έναν πάροχο για έναν κρίκο που δεν σας ανήκει.
Χρησιμοποιήστε κατάτμηση τούνελ όταν το υποκείμενο δίκτυο δεν μπορεί να μεγαλώσει
Ένας υποστηριζόμενος μηχανισμός κατάτμησης κάτω από το εσωτερικό πακέτο επιτρέπει σε πολλά εξωτερικά πακέτα να μεταφέρουν ένα εσωτερικό πακέτο και το απομακρυσμένο άκρο του τούνελ τα επανασυναρμολογεί πριν παραδώσει το αρχικό στη στοίβα. Η επιλογή κατάτμησης UDP του Community OpenVPN είναι μια υλοποίηση αυτής της ιδέας και δεν είναι το ίδιο με τη συνηθισμένη κατάτμηση IP του εξωτερικού πακέτου. Και τα δύο άκρα πρέπει να εκτελούν έκδοση που υποστηρίζει τη μορφή και η διαδρομή δεδομένων πρέπει να είναι αυτή που νομίζετε: οι πελάτες OpenVPN 3 και τα κανάλια δεδομένων με επιτάχυνση πυρήνα έχουν διαφορετικά όρια, οπότε ένα προφίλ που λειτουργεί σε έναν πελάτη μπορεί να αποτύχει σε άλλον.
openvpn --config client.ovpn --tun-mtu 1500 --fragment 1400 --verb 4
Η συνηθισμένη εξωτερική κατάτμηση είναι η άλλη επιλογή και είναι η ασθενέστερη. Οι δρομολογητές IPv6 δεν κατατμίζουν καθόλου ένα προωθούμενο πακέτο, οπότε ένα υπερμεγέθες εξωτερικό πακέτο απλώς πεθαίνει και ο αποστολέας το μαθαίνει μόνο αν το σχετικό μήνυμα ICMPv6 επιβιώσει στη διαδρομή. Τα θραύσματα επίσης προσκαλούν φιλτράρισμα και ενίσχυση απωλειών, γι’ αυτό το αντιμετωπίζω ως εφεδρικό και όχι ως σχέδιο.
Ένας εξωτερικός φορέας βασισμένος σε ροή παρακάμπτει το ζήτημα μεγέθους κατατμίζοντας τη δική του ροή byte και το ανακατασκευασμένο εσωτερικό πακέτο μπορεί να είναι ακόμα 1,500 byte. Είναι απόφαση μεταφοράς με δικό της κόστος, μαζί με τη γνωστή συμπεριφορά του TCP μέσα σε TCP, γι’ αυτό πάρτε την συνειδητά και όχι ως παρενέργεια μιας διαφωνίας για το MTU.
Επιβεβαιώστε ότι το εσωτερικό πακέτο φτάνει αμετάβλητο
Η επαλήθευση δεν είναι επιτυχής χειραψία. Καταγράψτε στη διεπαφή του τούνελ και στα δύο άκρα και συγκρίνετε το μέγεθος και το περιεχόμενο του πακέτου που έστειλε πραγματικά η εφαρμογή με αυτό που έλαβε η απομακρυσμένη πλευρά.
ip link show dev tun0 ping -M do -s 1472 -c 2 10.8.0.1 tcpdump -ni tun0 -c 5 'icmp and greater 1000'
Αν η καταγραφή δείχνει το εσωτερικό πακέτο πλήρους μεγέθους στο απομακρυσμένο άκρο, η επιλογή μεταφοράς λειτουργεί και απομένει να την καταγράψετε. Αν δεν δείχνει τίποτα ενώ το τούνελ δηλώνει ενεργό, το εξωτερικό πακέτο απορρίπτεται κάπου μεταξύ των άκρων, κάτι που σας στέλνει πίσω στη δοκιμή και όχι στις ρυθμίσεις κρυπτογράφησης.
Καταγράψτε τρία πράγματα στο δελτίο πριν το κλείσετε: τον μετρημένο εξωτερικό προϋπολογισμό, τον μηχανισμό που επιλέξατε και την εντολή που απέδειξε ότι το εσωτερικό πακέτο επιβίωσε. Το επόμενο άτομο που θα αγγίξει αυτό το τούνελ θα χρειαστεί και τα τρία και κανένα δεν μπορεί να ανακατασκευαστεί μόνο από το αρχείο διαμόρφωσης.