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

Δείτε το αίτημα που στέλνει πραγματικά η εφαρμογή

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

env | grep -i proxy            # Linux/macOS
netsh winhttp show proxy       # Windows, machine-wide
curl -sv --noproxy '*' https://svc.internal/
nc -vz svc.internal 8080

Τρέξτε τα δύο τελευταία με τον ίδιο προορισμό και δείτε πού αποκλίνουν. Ένα πρόγραμμα περιήγησης που δουλεύει συν ένα curl που δουλεύει συν μια εφαρμογή που δεν δουλεύει περιορίζουν το πρόβλημα σε κάτι που προσθέτει η εφαρμογή: ένα proxy, ένα μεταφορικό μέσο ή ένα μέγεθος μηνύματος.

Η εφαρμογή κληρονόμησε ένα proxy που κανείς δεν διαμόρφωσε

Οι περισσότερες στοίβες HTTP διαβάζουν τη διαμόρφωση proxy από το λειτουργικό σύστημα εξ ορισμού. Ένας εταιρικός πελάτης VPN συχνά εγκαθιστά ένα ως μέρος του προφίλ πρόσβασής του, οπότε τα αιτήματα φεύγουν μέσα από ένα proxy που ο προγραμματιστής δεν ανέφερε ποτέ στον κώδικα. Στο .NET ο προεπιλεγμένος χειριστής διαβάζει από τις ρυθμίσεις IE/WinHTTP· η Java διαβάζει -Dhttp.proxyHost· το Node δεν έχει ενσωματωμένη υποστήριξη proxy μέχρι να την προσθέσει μια βιβλιοθήκη. Η αποτυχία σπάνια είναι καθαρή άρνηση, γι αυτό οι άνθρωποι αρχίζουν να κοιτούν τον διακομιστή.

Το τεστ κοστίζει ένα αίτημα: απενεργοποιήστε το proxy ρητά σε έναν χειριστή και συγκρίνετε.

var handler = new HttpClientHandler { UseProxy = false };
using var client = new HttpClient(handler);

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

Η θύρα που επιλέξατε δεν είναι η θύρα που επιτρέπει η πολιτική

Ένας δρομολογημένος κεντρικός υπολογιστής δεν είναι επιτρεπόμενη υπηρεσία. Η εταιρική πολιτική συνήθως επιτρέπει εξερχόμενες θύρες ιστού και απορρίπτει τις υπόλοιπες, οπότε μια υπηρεσία στο 8080 ή στο 1883 είναι απρόσιτη ενώ το 443 δουλεύει μια χαρά. Το πρόγραμμα περιήγησης δεν αποδεικνύει τίποτα εδώ: χρησιμοποιεί το 443 εξ ορισμού.

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

Ακατέργαστο TCP που η διαδρομή επαναφέρει

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

Αλλάξτε μεταφορικό μέσο, δοκιμάστε ξανά και μην αλλάξετε τίποτα άλλο στην ίδια εκτέλεση. Αυτό το τεστ μίας μεταβλητής σας λέει αν η επαναφορά ήρθε από τη διαδρομή ή από την υπηρεσία.

Συνδέσεις που κλείνουν μόνο με μεγάλα ωφέλιμα φορτία

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

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

Πώς να ξεχωρίσετε τα τέσσερα σε ένα πέρασμα

Τρεις παρατηρήσεις λύνουν τις περισσότερες περιπτώσεις. Συμβαίνει η αποτυχία αμέσως ή μόνο με μεγάλο σώμα; Πετυχαίνει το ίδιο αίτημα με το proxy απενεργοποιημένο; Αλλάζει το αποτέλεσμα όταν αλλάζετε θύρα ή μεταφορικό μέσο; Γράψτε τις απαντήσεις πριν από την επόμενη αλλαγή, γιατί ένα εταιρικό VPN συν ένα κληρονομημένο proxy συν μια προεπιλογή εφαρμογής σας δίνουν τρεις πιθανές αιτίες ταυτόχρονα.

Κρατήστε μία μεταβλητή ανά τεστ και καταγράψτε τον κεντρικό υπολογιστή προορισμού που χρησιμοποιήσατε. Χωρίς αυτή τη γραμμή βάσης, ο επόμενος επαναλαμβάνει και τα τέσσερα βήματα από την αρχή.

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