Λείπει το passthrough του PPTP: διόρθωση σφάλματος 807 σε Windows VPN
Η προώθηση του TCP 1723 δεν εξαλείφει από μόνη της το σφάλμα 807 του PPTP. Το GRE είναι πρωτόκολλο IP 47, οπότε ο δρομολογητής χρειάζεται passthrough ή ρητό κανόνα πρωτοκόλλου.
Η προώθηση του TCP 1723 ανοίγει συχνά το πρώτο μέρος του PPTP και αφήνει το υπόλοιπο σπασμένο, οπότε τα Windows εξακολουθούν να επιστρέφουν το σφάλμα 807 στην προσπάθεια. Η επόμενη παρόρμηση είναι να προστεθεί κανόνας για τη θύρα 47, και ακριβώς αυτό το βήμα κοστίζει ένα απόγευμα: το GRE είναι αριθμός πρωτοκόλλου στην κεφαλίδα IP, όχι θύρα που μπορεί να αντιστοιχίσει ένας πίνακας προώθησης. Μέχρι ο δρομολογητής να περάσει το πρωτόκολλο 47 και να το συνδέσει με την ίδια κλήση, η σήραγγα δεν μπορεί να ξεκινήσει. Οι επόμενες ενότητες διαχωρίζουν τα δύο κανάλια και μετά τα δοκιμάζουν ένα ένα.
Ένας πίνακας θυρών δεν έχει γραμμή για αριθμό πρωτοκόλλου
Το PPTP χρησιμοποιεί δύο συνομιλίες που αποτυγχάνουν με διαφορετικούς τρόπους. Αυτή στο TCP 1723 ξεκινά την κλήση, περνά πληροφορίες ζεύξης και την τερματίζει όταν ο χρήστης αποσυνδεθεί. Η πλευρά των δεδομένων τρέχει μέσα στο GRE, το οποίο η κεφαλίδα IP σημαίνει με αριθμό πρωτοκόλλου 47, και μέσα σε αυτή τη σήραγγα το PPP διαπραγματεύεται τη ζεύξη ενώ το MS-CHAPv2 ελέγχει τα διαπιστευτήρια.
Επειδή το GRE δεν φέρει κεφαλίδα μεταφοράς, δεν εκθέτει θύρες, άρα ένας κανόνας γραμμένος για θύρες δεν έχει τι να αντιστοιχίσει. Ένας δρομολογητής που προωθεί το 1723 δημιουργεί αντιστοίχιση για αυτή τη συνεδρία TCP και σταματά εκεί. Το λογισμικό που χειρίζεται το δεύτερο μισό ονομάζει τη λειτουργία passthrough PPTP ή PPTP ALG, και ορισμένα υλικολογισμικά δεν προσφέρουν κανένα από τα δύο και δεν αναφέρουν ποτέ το κενό. Η ετικέτα στο πλαίσιο ελέγχου έχει μικρότερη σημασία από το αν το πρωτόκολλο 47 αναγνωρίζεται καθόλου.
Τι αναφέρουν τα Windows όταν πεθαίνει η διαδρομή δεδομένων
Το σφάλμα 807 λέει ότι η σύνδεση δεν μπόρεσε να ολοκληρωθεί, που στην πράξη σημαίνει ότι η κλήση έφτασε στον διακομιστή και το κανάλι δεδομένων δεν σηκώθηκε. Είναι ετυμηγορία για τη μεταφορά, όχι για τον λογαριασμό. Το σφάλμα 691 είναι εκείνο που δείχνει σε διαπιστευτήρια ή σε αναντιστοιχία του πρωτοκόλλου πιστοποίησης, οπότε σας στέλνει κάπου εντελώς αλλού.
Δουλέψτε τη μεταφορά πριν αγγίξετε τον κωδικό πρόσβασης. Η αλλαγή διαπιστευτηρίων για να κυνηγήσετε το 807 αφήνει το πραγματικό σφάλμα στη θέση του και κάνει την επόμενη προσπάθεια δυσκολότερη στην ανάγνωση.
Γιατί ένας δεύτερος πελάτης χαλάει μια σήραγγα που δουλεύει
Χωρίς θύρες να τους ξεχωρίζουν, μια συσκευή NAT δεν μπορεί να διαχωρίσει δύο πελάτες PPTP όπως διαχωρίζει δύο συνεδρίες HTTPS. Γι' αυτό πολλές οικιακές συσκευές επιτρέπουν μία κλήση PPTP και την παρακολουθούν με βάση τη διεύθυνση προέλευσης. Ένας φορητός υπολογιστής που δούλευε μόνος σταματά να ολοκληρώνει μόλις καλέσει δεύτερο μηχάνημα, και από την πλευρά του πελάτη η αποτυχία φαίνεται τυχαία. Αυτό το μοτίβο ανήκει στο υλικολογισμικό, και καμία αλλαγή προφίλ δεν θα το αλλάξει.
Παρατηρήστε τον πίνακα συνδέσεων όσο καλούν και οι δύο πελάτες. Αν μόνο ο πρώτος υπολογιστής κρατά ποτέ αντιστοίχιση, ο δρομολογητής έφτασε στο όριο των δυνατοτήτων του και καμία ρύθμιση στην πλευρά του πελάτη δεν θα το μετακινήσει.
Αποδείξτε ποιο μισό αποτυγχάνει
Επιβεβαιώστε ότι φτάνει το TCP 1723 πριν αλλάξετε οτιδήποτε στον δρομολογητή, γιατί αυτή η απάντηση καθορίζει ποιο μισό δοκιμάζετε. Εκτελέστε τα παρακάτω από τον πελάτη Windows προς το δικό σας όνομα διακομιστή. Το πρώτο εκτυπώνει αν αποκρίθηκε η θύρα, και το δεύτερο καλεί χωρίς παράθυρο διαλόγου, που κάνει τις επαναλαμβανόμενες προσπάθειες συγκρίσιμες.
Test-NetConnection vpn.example.com -Port 1723
rasdial "Work VPN"
Ένα αληθές αποτέλεσμα στη δοκιμή θύρας σημαίνει ότι το κανάλι ελέγχου είναι ανοιχτό και το GRE είναι ο εναπομείνας ύποπτος. Ένα ψευδές αποτέλεσμα σημαίνει ότι η δρομολόγηση, ένα φίλτρο ή η προώθηση είναι χαλασμένα, και καμία αλλαγή στο GRE δεν θα το σώσει. Η πλευρά δεδομένων πρέπει να παρακολουθείται εκεί όπου φαίνεται, στον διακομιστή ή στον δρομολογητή.
tcpdump -ni any proto 47
Το αντίστοιχο στο Wireshark είναι το φίλτρο προβολής ip proto 47, που είναι ευκολότερο να δοθεί σε κάποιον που δεν νιώθει άνετα σε γραμμή εντολών. GRE που φτάνει χωρίς τίποτα να βγαίνει σε απάντηση σημαίνει ότι η διαδρομή επιστροφής χρειάζεται διόρθωση.
Τι διορθώνει πραγματικά το σφάλμα
Όπου ο δρομολογητής εκθέτει τη ρύθμιση, ενεργοποιήστε το passthrough PPTP ή επιτρέψτε ρητά το πρωτόκολλο 47 σε υλικολογισμικό που δέχεται κανόνες. Στο RouterOS ο κανόνας προώθησης αντιστοιχεί απευθείας το πρωτόκολλο, κάτι που μια προώθηση βασισμένη σε θύρες δεν θα μπορούσε ποτέ να κάνει. Το οικιακό υλικολογισμικό συνήθως κρύβει την ίδια απόφαση πίσω από ένα πλαίσιο ελέγχου, μερικές φορές στις ρυθμίσεις ασφαλείας και όχι στην προώθηση θυρών. Αν δεν υπάρχει τέτοιος έλεγχος, τίποτα στον πελάτη δεν θα το αναπληρώσει.
/ip firewall filter add chain=forward protocol=gre action=accept
/ip firewall filter print where protocol=gre
Η αντικατάσταση του PPTP είναι η άλλη επιλογή και συχνά η φθηνότερη. Ένας δρομολογητής που τερματίζει ο ίδιος το VPN αποφεύγει το διπλό NAT για εισερχόμενους πελάτες, και ένα πρωτόκολλο που το NAT βασισμένο σε θύρες ήδη χειρίζεται δεν χρειάζεται καθόλου passthrough: OpenVPN πάνω από UDP, SSTP πάνω από TCP 443 ή L2TP/IPsec με NAT-T που τυλίγει το ESP μέσα σε UDP 4500. Το PPTP εξαρτάται επίσης από το MS-CHAPv2, του οποίου οι τεκμηριωμένες αδυναμίες το κάνουν κακή επιλογή για νέα εγκατάσταση ακόμη και αφού υποχωρήσει το σφάλμα.
Σημειώστε ποιος κανόνας έκανε τη διαφορά, γιατί ο ίδιος χώρος θα συναντήσει το ίδιο όριο όταν ο δεύτερος χρήστης ζητήσει πρόσβαση. Η διόρθωση σε επίπεδο πρωτοκόλλου ανήκει στις σημειώσεις δικτύου, όπου θα κοιτάξει ο επόμενος μηχανικός.