Πρωτόκολλο 47 ή θύρα TCP 47: δύο κεφαλίδες, δύο κανόνες
Ένας αριθμός πρωτοκόλλου και μια θύρα ζουν σε διαφορετικές κεφαλίδες, οπότε ένας κανόνας δεν μπορεί να αντικαταστήσει τον άλλο. Το PPTP χωρίζει τα δύο, και ένα πεδίο θύρας δεν μπορεί να εκφράσει το GRE.
Τα δίκτυα ξενοδοχείων και τα τείχη προστασίας συνεδρίων συχνά εμφανίζουν ένα προσαρμοσμένο πεδίο άδειας, και κάποιος πληκτρολογεί 47 σε αυτό περιμένοντας να δουλέψει το PPTP. Ο κανόνας δημιουργείται, η σήραγγα εξακολουθεί να αποτυγχάνει, και η επόμενη προσπάθεια χρησιμοποιεί άλλον αριθμό. Το λάθος βρίσκεται στο ίδιο το πακέτο: το IPv4 έχει πεδίο πρωτοκόλλου που ονομάζει τι ακολουθεί την κεφαλίδα IP, ενώ το TCP και το UDP έχουν πεδία θύρας που υπάρχουν μόνο όταν βρίσκεσαι μέσα σε μία από αυτές τις κεφαλίδες. Δεν είναι δύο γραφές της ίδιας άδειας.
Η κεφαλίδα IPv4 ονομάζει το επόμενο πρωτόκολλο
Το πεδίο πρωτοκόλλου είναι ένα byte στην κεφαλίδα IPv4 και περιέχει έναν αριθμό που περιγράφει το ωφέλιμο φορτίο: 6 για το TCP, 17 για το UDP, 47 για το GRE, 50 για το ESP. Οτιδήποτε φιλτράρει πακέτα διαβάζει αυτή την τιμή πριν κοιτάξει βαθύτερα, γιατί η βαθύτερη κεφαλίδα έχει νόημα μόνο αφού γίνει γνωστός ο τύπος. Αλλάξτε αργότερα στη συνομιλία μια θύρα και αυτό το πεδίο δεν έχει κουνηθεί.
Επομένως ένας κανόνας γραμμένος για το πρωτόκολλο 47 περιγράφει το επίπεδο IP. Καμία θύρα δεν συμμετέχει καθόλου στην απόφαση.
Οι θύρες υπάρχουν μέσα στο TCP και το UDP, πουθενά αλλού
Οι θύρες είναι αναγνωριστικά δεκαέξι bit μέσα στις κεφαλίδες TCP και UDP, και το έργο τους είναι να χωρίζουν συνομιλίες που μοιράζονται μία διεύθυνση. Μια κεφαλίδα GRE μεταφέρει μια τιμή τύπου πρωτοκόλλου, συχνά EtherType, συν προαιρετικά κλειδιά για πολυπλεξία. Άρα η φράση θύρα 47 δεν ονομάζει τίποτα με το οποίο θα μπορούσε να ταιριάξει ένα πακέτο GRE.
Οι διεπαφές των τειχών προστασίας διαφέρουν ως προς το πόσο από αυτό εκθέτουν. Μερικές δέχονται αριθμό πρωτοκόλλου, μερικές προσφέρουν ονομαστική λίστα, και λίγες δέχονται μόνο TCP ή UDP με θύρες.
Το PPTP χρησιμοποιεί και τα δύο επίπεδα ταυτόχρονα
Το PPTP είναι το πιο καθαρό παράδειγμα γιατί χωρίζει σκόπιμα την εργασία του στα δύο. Η σύνδεση ελέγχου είναι συνεδρία TCP προς τη θύρα 1723, και η διαδρομή δεδομένων είναι GRE, πρωτόκολλο 47, χωρίς θύρα πουθενά. Ένα τείχος προστασίας που επιτρέπει 1723 και τίποτα άλλο αφήνει τη διαπραγμάτευση να ξεκινήσει και μετά πετάει το ωφέλιμο φορτίο. Η σήραγγα φαίνεται να κολλάει μετά την ταυτοποίηση αντί να αποτυγχάνει να συνδεθεί, και γι' αυτό το σύμπτωμα αναφέρεται συχνά ως πρόβλημα κωδικού.
| Path | Outer protocol | Port |
|---|---|---|
| Control channel | TCP, protocol 6 | 1723 |
| Data channel | GRE, protocol 47 | None |
Διαβάστε τις δύο γραμμές χωριστά όταν γράφετε τον κανόνα, και ελέγξτε την καθεμία με το συντακτικό του κατασκευαστή. Η μία γραμμή χρειάζεται θύρα, η άλλη χρειάζεται αριθμό πρωτοκόλλου, και καμία μεμονωμένη καταχώριση δεν καλύπτει και τα δύο.
Γιατί μια σελίδα προώθησης θυρών δεν μπορεί να εκφράσει το GRE
Μια φόρμα προώθησης που δέχεται μόνο TCP και UDP δεν μπορεί να περιγράψει το GRE, όπως κι αν ονομάζεται η φόρμα. Η μετάφραση διευθύνσεων προσθέτει μια δεύτερη δυσκολία, γιατί το GRE δεν έχει θύρες και ο μεταφραστής πρέπει να ακολουθεί αντ' αυτού το αναγνωριστικό κλήσης. Μερικά οικιακά δρομολογητές διαθέτουν βοηθό που το χειρίζεται· πολλά όχι, και καμία πρόσθετη καταχώριση άδειας TCP δεν θα δημιουργήσει αυτή τη συμπεριφορά.
Όπου η πραγματική απαίτηση είναι μια σύγχρονη σήραγγα, επιλέξτε σχεδιασμό που χρησιμοποιεί σκόπιμα TCP ή UDP αντί να ελπίζετε ότι ο μεταφραστής θα μαντέψει σωστά.
Η ενσωμάτωση καθορίζει τι βλέπει το φίλτρο
Η ενσωμάτωση αλλάζει το εξωτερικό πακέτο, και το εξωτερικό πακέτο είναι αυτό με το οποίο ταιριάζει ένας κανόνας. Το γνήσιο ESP είναι πρωτόκολλο 50, ενώ η διέλευση NAT τυλίγει το ESP μέσα σε UDP 4500 για να επιβιώσει της μετάφρασης διευθύνσεων. Ένα φίλτρο που επιτρέπει UDP 4500 δεν βλέπει ποτέ το πρωτόκολλο 50, και ένα φίλτρο γραμμένο για το πρωτόκολλο 50 δεν ταιριάζει ποτέ με την τυλιγμένη μορφή.
Ρωτήστε σε ποια ενσωμάτωση συμφώνησαν ο πελάτης και η πύλη, και μετά γράψτε τον κανόνα για αυτή την εξωτερική μορφή και τίποτα παραπάνω.
Γράψτε τον κανόνα ώστε κάποιος να μπορεί να τον ελέγξει
Εκφράστε κάθε κανόνα ως οικογένεια διευθύνσεων, εξωτερικό πρωτόκολλο, θύρες μεταφοράς αν υπάρχουν, κατεύθυνση και τα δύο άκρα. Ένας ελεγκτής μπορεί να συγκρίνει αυτή την πρόταση με μια καταγραφή πακέτων και να καταλήξει σε ετυμηγορία. Μια οδηγία να ανοίξει το 47 δεν μπορεί να την ελέγξει κανείς, και έτσι επιβιώνει για χρόνια στα εγχειρίδια διαδικασιών.
Προσθέστε το τεστ που το αποδεικνύει: συνδεθείτε ενώ καταγράφετε στην εξωτερική διεπαφή, και επιβεβαιώστε το εξωτερικό πρωτόκολλο και τη θύρα που εμφανίζονται πραγματικά στο ίχνος.