«Ο host χρησιμοποιεί αυτό το αρχείο PAC, άρα έβαλα το ίδιο URL στη VM» είναι μια λογική πρόταση και ένα ελλιπές σχέδιο. Ένα URL PAC δείχνει σε σενάριο πολιτικής, όχι σε μεσολαβητή. Μέχρι ο επισκέπτης να μπορεί να ανακτήσει αυτό το σενάριο, να το αξιολογήσει με τις δικές του διευθύνσεις και μετά να φτάσει στον μεσολαβητή που ονομάζει το σενάριο, το URL είναι απλώς μια συμβολοσειρά σε ένα πεδίο ρυθμίσεων. Το μεγαλύτερο μέρος της σύγχυσης γύρω από την πολιτική μεσολάβησης στις εικονικές μηχανές προκύπτει από το ότι αυτή η μία γραμμή αντιμετωπίζεται ως ολόκληρη η διαμόρφωση.

Ένα URL PAC είναι σενάριο, όχι μεσολαβητής

Το αρχείο περιέχει μια συνάρτηση που δέχεται ένα URL και έναν host και επιστρέφει μια περιγραφή μεσολαβητή ή τη λέξη DIRECT. Τίποτα στο URL δεν λέει στην εφαρμογή πού να στείλει την κίνηση· αυτή η απόφαση λαμβάνεται κατά την εκτέλεση, μέσα στο σενάριο, με δεδομένα που ζητά το σενάριο από την πλατφόρμα. Ένας διάλογος ρυθμίσεων που δέχεται URL PAC δέχεται δείκτη σε διαδικασία απόφασης.

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

Τα τέσσερα βήματα αποτυγχάνουν το καθένα με άλλον τρόπο

Μέσα στον επισκέπτη τέσσερα πράγματα πρέπει να συμβούν με σειρά και το καθένα έχει τη δική του υπογραφή σφάλματος. Ο επισκέπτης ανακτά το αρχείο PAC. Η εφαρμογή αξιολογεί το σενάριο για το ζητούμενο URL με τοπικές πληροφορίες. Ο επιλεγμένος μεσολαβητής επιλύεται και επιτυγχάνεται. Η πιστοποίηση συμβαίνει αν ο μεσολαβητής την απαιτεί.

Ξεκινήστε αποδεικνύοντας την ανάκτηση, γιατί χωρίς αυτήν όλα τα επόμενα είναι άνευ νοήματος. Ένα αρχείο PAC σε ιδιωτικό διακομιστή απαιτεί επιτρεπόμενη διαδρομή προς αυτόν τον διακομιστή προτού βοηθήσει οποιοσδήποτε κανόνας, και μια επιλογή μεσολαβητή μέσα σε απρόσιτο σενάριο δεν μπορεί να δημιουργήσει τη διαδρομή που θα το ανακτούσε:

curl -sS -o /dev/null -w '%{http_code}\n' http://pac.corp.example/proxy.pac
getent hosts pac.corp.example

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

Το ίδιο σενάριο αποφασίζει διαφορετικά μέσα σε μια VM

Οι συναρτήσεις PAC μπορούν να εξετάσουν τον ζητούμενο host και πληροφορίες για τη μηχανή που εκτελεί την αξιολόγηση. Ένας κανόνας χτισμένος στη διεύθυνση του ίδιου του πελάτη, για παράδειγμα ένας που ελέγχει διεύθυνση διασύνδεσης ή ιδιότητα μέλους υποδικτύου, θα δει τη διεύθυνση του επισκέπτη και όχι του φυσικού host. Πίσω από NAT στην πλευρά του host αυτές είναι διαφορετικές διευθύνσεις, και γι’ αυτό το ίδιο σενάριο μπορεί να επιλέξει άλλον μεσολαβητή ή να πέσει σε DIRECT μέσα στη VM.

Αυτό δεν είναι σφάλμα του σεναρίου. Είναι το σενάριο να κάνει ακριβώς αυτό για το οποίο γράφτηκε, με διαφορετική είσοδο, και αυτό εξηγεί την μπερδεμένη αναφορά όπου ο host χρησιμοποιεί τον μεσολαβητή και ο επισκέπτης συνδέεται απευθείας. Αναπαράγετε την απόφαση αντί να συλλογίζεστε γι’ αυτήν: ένας αξιολογητής PAC που δέχεται διεύθυνση και URL, αν η διανομή σας παρέχει έναν, λύνει το ζήτημα με μία εντολή. Διαφορετικά δοκιμάστε με την εφαρμογή που θα χρησιμοποιηθεί πραγματικά και διαβάστε το αρχείο καταγραφής μεσολάβησης αντί να μαντεύετε.

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

Εργαλεία που δεν διαβάζουν καθόλου PAC

Τα εργαλεία γραμμής εντολών είναι ξεχωριστό σύνορο και εδώ χάνεται πολύς χρόνος. Το curl δεν εκτελεί αρχεία PAC, όπως λέει καθαρά η τεκμηρίωση για μεσολαβητές του. Το να δείξετε μια μεταβλητή μεσολαβητή στο URL λήψης του PAC δεν μετατρέπει το σενάριο σε τελικό σημείο μεσολαβητή· το εργαλείο θα προσπαθήσει να μιλήσει HTTP με ένα αρχείο JavaScript και θα αποτύχει με τρόπο που μοιάζει με πρόβλημα δικτύου.

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

Για εφαρμογές επιφάνειας εργασίας στο Linux, η ρύθμιση συστήματος πρέπει να τεθεί σε αυτόματη λειτουργία και να της δοθεί και URL· ένα URL που αποθηκεύεται ενώ η λειτουργία είναι ακόμη χειροκίνητη δεν κάνει τίποτα. Ελέγξτε και τα δύο, και ελέγξτε τα μέσα στον επισκέπτη:

gsettings get org.gnome.system.proxy mode
gsettings get org.gnome.system.proxy autoconfig-url

Το DIRECT είναι κι αυτό απόφαση

Ένα αποτέλεσμα PAC με DIRECT σημαίνει ότι η εφαρμογή παρακάμπτει τον μεσολαβητή HTTP, όχι ότι ξέφυγε από το δίκτυο. Η σύνδεση που προκύπτει μπορεί ακόμη να ακολουθήσει διαδρομή του λειτουργικού συστήματος μέσα από σήραγγα, ή να αποτύχει για λόγους που δεν έχουν καμία σχέση με τη μεσολάβηση. Αντίστροφα, ένα αποτέλεσμα μεσολαβητή περιγράφει το αίτημα μιας εφαρμογής, όχι κάθε διεργασία στον επισκέπτη.

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

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

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