JConsole opretter forbindelse til registry-porten, og så sender RMI den et andet sted hen
At registry-porten svarer, er kun det første spring. En fjern JMX-server kan annoncere en anden vært og en anden connector-port, og tunnelen skal nå begge.
Opret forbindelse til registry-porten gennem tunnelen, se håndtrykket begynde, og se så JConsole få timeout alligevel. Det sker, fordi den første TCP-forbindelse ikke er administrationsforbindelsen: den er et opslag. RMI-registret svarer med en reference, der angiver en vært og en anden port, og JConsole går derefter derhen, hvor den blev sendt hen. Hvis tunnelen kun når serverens første port, eller referencen angiver en adresse, der kun findes på serverens eget LAN, går klienten i stå efter tilsyneladende at være lykkedes.
Myten: én åben port er én forbindelse
Fjern-JMX over RMI involverer mindst to endepunkter, og de vælges af forskellige dele af systemet. Registry-porten er den, du taster ind i klienten, og den findes for at udlevere den stub, der beskriver den egentlige connector. At tage den første vellykkede socket som bevis på, at administrationsvejen er åben, forvandler en to-minutters diagnose til en eftermiddag med firewall-sager.
Se på klientens egen fejl i stedet for serverens lytterliste. En fejl, efter at håndtrykket er begyndt, fortæller dig, at den anden forbindelse, ikke den første, ikke blev fuldført.
Hvad registret giver tilbage
Stubben indeholder en adresse og en port, serialiseret i det øjeblik connectoren blev oprettet. På en server med flere grænseflader kan stakken have valgt en adresse, der kan nås fra det lokale netværk og ikke fra dit. Klienten kender ikke forskellen; den ringer blot til den værdi, den fik, og pakken følger den rute, der findes for den adresse, hvilket på en VPN-klient ofte er ingen. Det er i det øjeblik, den anden forbindelse forsøges.
Det er også derfor, fejlen er periodisk forskellig mellem miljøer: den samme server kan opføre sig anderledes for en bruger på LAN og en bruger på tunnelen, uden at JMX-konfigurationen ændres overhovedet.
To porte og to egenskaber, der fastlåser dem
Registry-porten kommer fra com.sun.management.jmxremote.port, og connectoren kan fastlåses med com.sun.management.jmxremote.rmi.port i stedet for at overlades til, hvad stakken tildeler. Angiv begge udtrykkeligt, når der er en firewall eller sikkerhedsgruppe mellem klienten og serveren, for en uforudsigelig anden port kan ikke tillades på forhånd, og et bredt interval åbnet for at rumme den er værre end at fastlåse én værdi.
Bekræft derefter med ss -ltn eller netstat -an på serveren, at begge porte lytter, og på hvilke adresser. En lytter bundet til loopback er korrekt til en helt lokal udrulning og ubrugelig til denne.
Når det annoncerede navn er forkert
Værtsnavnet, der optræder i fjernreferencen, sættes af java.rmi.server.hostname. Det påvirker, hvad stubben annoncerer; det er ikke i sig selv en instruktion om at binde hver lytter til én grænseflade, og derfor giver det ikke altid den forventede adfærd med én port. Sæt det, genstart processen, og kontrollér derefter, hvad stubben faktisk indeholder. Vælg et navn eller en adresse, som klienten kan slå op og nå gennem tunnelen, og genstart processen, så stubben genopbygges.
Container-netværk gør det værre, fordi den adresse, processen ser, kan være en intern en, som intet uden for containeren kan route. Udgiv det tilsigtede værtsnavn udtrykkeligt i stedet for at lade platformen vælge.
Hvis du tunnelerer med SSH i stedet for en VPN, dukker samme problem op i en anden klædning: at videresende registry-porten alene lader det andet endepunkt pege på en adresse, din klient ikke kan nå. Videresend begge porte, og sørg for, at det annoncerede navn slår op til noget, klienten kan nå lokalt.
Slå ikke administrationssikkerheden fra for at forenkle det
Snippets, der slår godkendelse og TLS fra, er nemme at finde og får forbindelsen til at virke på en måde, du senere skal rulle tilbage. Fjern-JMX er en administrationsgrænseflade med samme rettigheder som den proces, den inspicerer; behold dens adgangskontroller, og hvis klienten ikke kan fremvise legitimationsoplysninger, så ret det i stedet.
Når endepunkterne er korrekte, så gem den næste fejl, du ser. En afvisning fra et truststore eller en konto er et senere trin end en uopnåelig connector og betyder, at netværksarbejdet er færdigt.