VPN μπλοκαρισμένο σε δίκτυο μόνο για web; Δουλέψτε τα στρώματα
Το πρόγραμμα περιήγησης δουλεύει, η σήραγγα πεθαίνει. Διαβάστε τις φάσεις χρόνου του curl, δοκιμάστε τον διαμεσολαβητή, ελέγξτε αν το 443 επιτρέπεται πραγματικά και μετά καταγράψτε τι έφυγε από το μηχάνημα.
Ένα δίκτυο πανεπιστημιούπολης ή ξενοδοχείου όπου το πρόγραμμα περιήγησης δουλεύει και κάθε σήραγγα πεθαίνει δεν είναι ένα πρόβλημα, είναι τέσσερα στοιβαγμένα. Η διαδρομή μπορεί να επιτρέπει μόνο TCP 443, μπορεί να απαιτεί πιστοποιημένο διαμεσολαβητή, μπορεί να ελέγχει τη χειραψία και μπορεί απλώς να απαγορεύει την απομακρυσμένη πρόσβαση με πολιτική. Η σειριακή τους αντιμετώπιση σας γλιτώνει από την αγορά νέου πελάτη για να διορθώσετε έναν κανόνα δικτύου. Ο οδηγός παρακάτω διαρκεί περίπου δέκα λεπτά και τελειώνει με γραπτή απάντηση για το ποιο στρώμα σας αρνήθηκε.
Αποδείξτε ποιο στρώμα αρνείται τη σύνδεση
Μην ξεκινήσετε με τον πελάτη VPN. Ξεκινήστε με ένα απλό αίτημα HTTPS στον ίδιο κεντρικό υπολογιστή και διαβάστε τις φάσεις χρόνου, γιατί η φάση που αποτυγχάνει σας λέει ποια συσκευή ευθύνεται:
curl -sS -o /dev/null -w 'connect=%{time_connect} tls=%{time_appconnect} code=%{http_code}\n' \
--max-time 8 https://vpn.example.net/
Καμία απάντηση και κανένας χρόνος connect σημαίνει ότι το TCP δεν ολοκληρώθηκε ποτέ, άρα παίζουν τείχος προστασίας, απαίτηση διαμεσολαβητή ή λάθος προορισμός. Χρόνος connect χωρίς χρόνο tls σημαίνει ότι κάτι στη μέση δέχτηκε τη σύνδεση και μετά σταμάτησε τη χειραψία, και έτσι φαίνεται ένας διαμεσολαβητής επιθεώρησης από την πλευρά του πελάτη.
Τώρα εξετάστε το πιστοποιητικό που λαμβάνετε πραγματικά. Είναι ο ταχύτερος τρόπος να μάθετε αν μιλάτε με τον διακομιστή ή με ένα ενδιάμεσο κουτί που υπέγραψε ξανά τη συνεδρία:
openssl s_client -connect vpn.example.net:443 -servername vpn.example.net -brief </dev/null
Διαβάστε τη γραμμή εκδότη. Το δικό σας CA σημαίνει ότι φτάσατε στην υπηρεσία· εκδότης εταιρείας ή συσκευής σημαίνει ότι ένα φίλτρο τερμάτισε τη σύνδεση και αποφασίζει τι γίνεται μετά. Καταγράψτε και τις δύο εξόδους με χρονική σφραγίδα, γιατί το ίδιο τεστ μία ώρα αργότερα στο δίκτυο επισκεπτών μπορεί να δώσει άλλη απάντηση.
Ένας πελάτης που ξέρει διαμεσολαβητή αλλάζει το πρώτο πακέτο, όχι την πολιτική
Αν το δίκτυο απαιτεί CONNECT μέσω πιστοποιημένου διαμεσολαβητή, πρέπει να ενημερωθεί ο πελάτης VPN, αλλιώς θα προσπαθήσει να ανοίξει υποδοχή σε διεύθυνση που δεν μπορεί να δρομολογήσει. Δοκιμάστε τον διαμεσολαβητή χωριστά από τον πελάτη, ώστε μια αποτυχία να έχει μία εξήγηση:
https_proxy=http://proxy.example.edu:3128 curl -v -o /dev/null https://vpn.example.net/
sudo openvpn --config /etc/openvpn/corp.conf --proto tcp-client \
--remote vpn.example.net 443 --verb 4
Η πρώτη εντολή αποδεικνύει ότι ο διαμεσολαβητής θα μεταφέρει τον προορισμό. Η δεύτερη ζητά από τον πελάτη TCP στο 443, τη μόνη μεταφορά που τα περισσότερα μονοπάτια μόνο για web προωθούν καθόλου. Αν η πρώτη εντολή πετύχει και η δεύτερη ακόμη αποτυγχάνει, ο διαμεσολαβητής δεν είναι το εμπόδιο.
Μερικοί πελάτες διαβάζουν τον διαμεσολαβητή του λειτουργικού συστήματος αντί για παράκαμψη, και μερικοί δεν διαβάζουν κανέναν. Ελέγξτε την τεκμηρίωση της ίδιας της εφαρμογής πριν υποθέσετε ότι ισχύει μια ρύθμιση συστήματος. Ένας πελάτης που επιλύει το τελικό σημείο μέσω επιλυτή που ο διαμεσολαβητής δεν εξυπηρετεί θα αποτύχει κι εδώ, γι' αυτό μια αλλαγή DNS μπορεί να φαίνεται διόρθωση ενώ είναι μόνο παράκαμψη.
Προσέξτε και το μοτίβο κατεύθυνσης ενώ ασχολείστε. Ένα φιλτραρισμένο δίκτυο μπορεί να απαντήσει στο όνομα ανίχνευσης ενός προμηθευτή με κάτι δικό του, που αλλάζει ποιο προφίλ διαμεσολαβητή επιλέγει ο πελάτης. Μη χτίσετε διαδικασία γύρω από αυτή την ιδιορρυθμία. Διαφέρει ανά τοποθεσία, αλλάζει χωρίς ειδοποίηση και δεν είναι κάτι που μπορείτε να υποστηρίξετε για άλλον.
Η θύρα 443 είναι προσβάσιμη, όχι επιτρεπτή
Το τύλιγμα σήραγγας σε TLS στο 443 λύνει την προσβασιμότητα και τίποτε άλλο. Φίλτρο που ελέγχει τη θύρα θα το περάσει· φίλτρο που παίρνει αποτύπωμα της χειραψίας δεν θα το περάσει, και το κρυπτογραφημένο χαιρετισμό πελάτη κρύβει το όνομα διακομιστή μόνο όταν το υποστηρίζουν και οι δύο πλευρές. Τρέξτε το τεστ και μάθετε πίσω από τι φίλτρο είστε αντί να ελπίζετε.
Υπάρχει και κόστος απόδοσης που οι άνθρωποι ανακαλύπτουν αργότερα. Μια αξιόπιστη μεταφορά μέσα σε αξιόπιστη μεταφορά ενισχύει την απώλεια, γιατί η εσωτερική στοίβα ξαναστέλνει τμήματα που η εξωτερική έχει ήδη ξαναστείλει. Σε καθαρή ζεύξη κανείς δεν το προσέχει. Σε συμφορημένο ασύρματο δίκτυο πανεπιστημιούπολης η σήραγγα γίνεται άχρηστη ακριβώς όταν τη χρειάζεστε, και το γράφημα μοιάζει με απώλεια πακέτων αν και τίποτα δεν απορρίπτεται επίτηδες.
Το UDP είναι συνήθως το πρώτο θύμα, και αξίζει επιβεβαίωση αντί για εικασία. Αν το WireGuard ή το προεπιλεγμένο OpenVPN δεν ολοκληρώνει ποτέ χειραψία ενώ το TCP 443 δουλεύει, το δίκτυο ρίχνει UDP, και καμία αναγέννηση κλειδιών δεν το αλλάζει:
sudo wg show
dig +short vpn.example.net
dig +short vpn.example.net @1.1.1.1
Μια κενή χρονική σφραγίδα χειραψίας δίπλα σε έναν ομότιμο που δούλευε χθες είναι η απάντηση για UDP. Τα δύο ερωτήματα DNS απαντούν άλλο ερώτημα: αν ο τοπικός επιλυτής και ένας δημόσιος επιλυτής διαφωνούν για τη διεύθυνση του τελικού σημείου, σας κατευθύνουν και το επιχείρημα για τη μεταφορά είναι λάθος.
Επαληθεύστε τι πραγματικά έφυγε από το μηχάνημα
Τα αρχεία καταγραφής του πελάτη περιγράφουν τι πιστεύει ο πελάτης. Μια καταγραφή περιγράφει τι είδε το δίκτυο, και η διαφορά των δύο είναι εκεί όπου λύνονται οι περισσότερες τέτοιες υποθέσεις:
sudo tcpdump -ni any -c 20 'tcp port 443 and host 203.0.113.10'
sudo ss -tunp | grep -E ':(443|1194|51820)\b'
Αν βλέπετε πακέτα SYN και κανένα SYN-ACK, ο αποκλεισμός είναι ανάντη και ο πελάτης είναι αθώος. Αν βλέπετε ολοκληρωμένη χειραψία προς διεύθυνση που δεν είναι του διακομιστή, μιλάτε με διαμεσολαβητή ή υποκλοπέα. Αν δεν βλέπετε τίποτε, ελέγξτε ότι καταγράφατε στη σωστή διεπαφή πριν συμπεράνετε οτιδήποτε.
Η λίστα υποδοχών πιάνει πιο λεπτή περίπτωση: μια δεύτερη σήραγγα κρατά ήδη την προεπιλεγμένη διαδρομή. Δύο πελάτες που μαλώνουν για τον πίνακα δρομολόγησης παράγουν διαλείπουσες αστοχίες που μοιάζουν ακριβώς με αποκλεισμένο δίκτυο, και η καταγραφή θα δείξει κίνηση να βγαίνει από διεπαφή που δεν περιμένατε.
Επαναφορά και η σημείωση που αξίζει να κρατήσετε
Αναιρέστε τις αλλαγές με αντίστροφη σειρά από αυτή που τις κάνατε. Αφαιρέστε τις μεταβλητές διαμεσολαβητή, σταματήστε τον πελάτη που ξεκινήσατε με το χέρι και αφαιρέστε κάθε παράκαμψη διαδρομής ή επιλυτή που προσθέσατε:
unset https_proxy http_proxy
sudo systemctl stop openvpn-client@corp
sudo ip route show default
Το να μείνει ένας χειροκίνητος πελάτης σε λειτουργία είναι ο τρόπος που ένα φορητό καταλήγει με σπασμένο δίκτυο στην επόμενη επίσκεψη γραφείου. Μεταβλητές διαμεσολαβητή που μένουν σε προφίλ κελύφους σπάνε άσχετα εργαλεία εβδομάδες αργότερα, και όποιος τις αποσφαλματώνει δεν θα συνδέσει τα δύο γεγονότα.
Μετά γράψτε τέσσερις γραμμές: το δίκτυο, τη χρονική σφραγίδα, τη φάση που απέτυχε και τον εκδότη που είδατε. Μια διαδρομή που δουλεύει σε μια πανεπιστημιούπολη και αποτυγχάνει στην επόμενη είναι φυσιολογική, και ο επόμενος πρέπει να ξέρει αν η διαφορά ήταν ο διαμεσολαβητής, ο επιλυτής ή το φίλτρο. Αν η απάντηση είναι ότι το δίκτυο απαγορεύει την απομακρυσμένη πρόσβαση, σταματήστε εκεί και ζητήστε από τον διαχειριστή την υποστηριζόμενη διαδρομή αντί να κουβαλήσετε μια παράκαμψη σε πολιτική που δεν διαβάσατε.