Το JConsole συνδέεται στο μητρώο και μετά το RMI το στέλνει αλλού
Το ότι απαντά η θύρα του μητρώου είναι μόνο το πρώτο άλμα. Ένας απομακρυσμένος διακομιστής JMX μπορεί να διαφημίσει άλλον κεντρικό υπολογιστή και άλλη θύρα συνδετήρα, και η σήραγγα πρέπει να φτάνει και στα δύο.
Συνδέσου στη θύρα του μητρώου μέσω της σήραγγας, παρακολούθησε την έναρξη της χειραψίας και μετά δες το JConsole να λήγει σε χρονικό όριο παρ' όλα αυτά. Αυτό συμβαίνει επειδή η πρώτη σύνδεση TCP δεν είναι η σύνδεση διαχείρισης: είναι μια αναζήτηση. Το μητρώο RMI απαντά με μια αναφορά που ονομάζει έναν κεντρικό υπολογιστή και μια δεύτερη θύρα, και το JConsole πηγαίνει έπειτα όπου του είπαν. Αν η σήραγγα φτάνει μόνο στην πρώτη θύρα του διακομιστή ή αν η αναφορά ονομάζει μια διεύθυνση που υπάρχει μόνο στο τοπικό δίκτυο του ίδιου του διακομιστή, ο πελάτης κολλάει μετά από μια φαινομενική επιτυχία.
Ο μύθος: μία ανοιχτή θύρα είναι μία σύνδεση
Το απομακρυσμένο JMX μέσω RMI περιλαμβάνει τουλάχιστον δύο τελικά σημεία και τα επιλέγουν διαφορετικά μέρη του συστήματος. Η θύρα του μητρώου είναι αυτή που πληκτρολογείς στον πελάτη και υπάρχει για να παραδώσει το stub που περιγράφει τον πραγματικό συνδετήρα. Αν πάρεις το πρώτο επιτυχημένο socket ως απόδειξη ότι η διαδρομή διαχείρισης είναι ανοιχτή, μια διάγνωση δύο λεπτών μετατρέπεται σε ένα απόγευμα αιτημάτων firewall.
Κοίτα το σφάλμα του ίδιου του πελάτη και όχι τη λίστα ακροατών του διακομιστή. Ένα σφάλμα μετά την έναρξη της χειραψίας σου λέει ότι δεν ολοκληρώθηκε η δεύτερη σύνδεση, όχι η πρώτη.
Τι επιστρέφει το μητρώο
Το stub περιέχει μια διεύθυνση και μια θύρα, σειριοποιημένες τη στιγμή που δημιουργήθηκε ο συνδετήρας. Σε διακομιστή με πολλές διεπαφές, η στοίβα μπορεί να επέλεξε μια διεύθυνση προσβάσιμη από το τοπικό δίκτυο και μη προσβάσιμη από το δικό σου. Ο πελάτης δεν γνωρίζει τη διαφορά· απλώς καλεί την τιμή που έλαβε, και το πακέτο ακολουθεί τη διαδρομή που υπάρχει για αυτή τη διεύθυνση, η οποία σε έναν πελάτη VPN συχνά δεν είναι καμία. Εκείνη τη στιγμή επιχειρείται η δεύτερη σύνδεση.
Αυτός είναι και ο λόγος που το σφάλμα εμφανίζεται ακανόνιστα μεταξύ περιβαλλόντων: ο ίδιος διακομιστής μπορεί να συμπεριφέρεται διαφορετικά για έναν χρήστη στο τοπικό δίκτυο και για έναν χρήστη στη σήραγγα, χωρίς καμία αλλαγή στη διαμόρφωση JMX.
Δύο θύρες και δύο ιδιότητες που τις καρφώνουν
Η θύρα του μητρώου προέρχεται από το com.sun.management.jmxremote.port, και ο συνδετήρας μπορεί να καρφωθεί με το com.sun.management.jmxremote.rmi.port αντί να αφεθεί σε ό,τι εκχωρεί η στοίβα. Όρισέ τα και τα δύο ρητά όταν υπάρχει firewall ή ομάδα ασφαλείας ανάμεσα στον πελάτη και τον διακομιστή, γιατί μια απρόβλεπτη δεύτερη θύρα δεν μπορεί να επιτραπεί εκ των προτέρων, και ένα ευρύ εύρος που ανοίγει γι' αυτήν είναι χειρότερο από το καρφίτσωμα μιας τιμής.
Στη συνέχεια επιβεβαίωσε με το ss -ltn ή το netstat -an στον διακομιστή ότι και οι δύο θύρες ακούν και σε ποιες διευθύνσεις. Ένας ακροατής δεσμευμένος στο loopback είναι σωστός για μια καθαρά τοπική εγκατάσταση και άχρηστος για αυτήν.
Όταν το διαφημιζόμενο όνομα είναι λάθος
Το όνομα κεντρικού υπολογιστή που εμφανίζεται στην απομακρυσμένη αναφορά ορίζεται από το java.rmi.server.hostname. Επηρεάζει το τι διαφημίζει το stub· δεν είναι από μόνο του οδηγία να δεσμευτεί κάθε ακροατής σε μία διεπαφή, γι' αυτό ο ορισμός του δεν παράγει πάντα τη συμπεριφορά μιας θύρας που περιμένουν οι άνθρωποι. Όρισέ το, επανεκκίνησε τη διεργασία και μετά επαλήθευσε τι περιέχει πραγματικά το stub. Διάλεξε ένα όνομα ή μια διεύθυνση που ο πελάτης μπορεί να επιλύσει και να φτάσει μέσω της σήραγγας, και επανεκκίνησε τη διεργασία ώστε το stub να ξαναχτιστεί.
Τα δίκτυα κοντέινερ το χειροτερεύουν, γιατί η διεύθυνση που βλέπει η διεργασία μπορεί να είναι εσωτερική και μη δρομολογήσιμη από έξω από το κοντέινερ. Δημοσίευσε ρητά το επιθυμητό όνομα κεντρικού υπολογιστή αντί να αφήνεις την πλατφόρμα να διαλέξει.
Αν κάνεις τη σήραγγα με SSH αντί για VPN, το ίδιο πρόβλημα εμφανίζεται με άλλο ένδυμα: η προώθηση μόνο της θύρας του μητρώου αφήνει το δεύτερο τελικό σημείο να δείχνει σε μια διεύθυνση που ο πελάτης σου δεν μπορεί να φτάσει. Προώθησε και τις δύο θύρες και κάνε το διαφημιζόμενο όνομα να επιλύεται σε κάτι που ο πελάτης μπορεί να φτάσει τοπικά.
Μην απενεργοποιείς την ασφάλεια διαχείρισης για ευκολία
Τα αποσπάσματα που απενεργοποιούν τον έλεγχο ταυτότητας και το TLS βρίσκονται εύκολα και κάνουν τη σύνδεση να λειτουργεί με τρόπο που θα πρέπει να αναιρέσεις αργότερα. Το απομακρυσμένο JMX είναι μια διεπαφή διαχείρισης με τα ίδια προνόμια με τη διεργασία που επιθεωρεί· διατήρησε τους ελέγχους πρόσβασής του, και αν ο πελάτης δεν μπορεί να παρουσιάσει διαπιστευτήρια, διόρθωσε αυτό.
Όταν τα τελικά σημεία είναι σωστά, φύλαξε το επόμενο σφάλμα που θα δεις. Μια απόρριψη από το truststore ή τον λογαριασμό είναι μεταγενέστερο στάδιο από έναν μη προσβάσιμο συνδετήρα και σημαίνει ότι η δουλειά δικτύου τελείωσε.