JConsole се повезује са регистром, а затим RMI је шаље на друго место
То што порт регистра одговара само је први скок. Удаљени JMX сервер може објавити други хост и други порт конектора, а тунел мора да достигне оба.
Повежите се са портом регистра кроз тунел, посматрајте како почиње руковање и затим видите како JConsole ипак истиче по времену. То се дешава зато што прва TCP веза није управљачка веза: она је претрага. Регистар RMI одговара референцом која наводи хост и други порт, и JConsole затим иде тамо где јој је речено. Ако тунел стиже само до првог порта сервера или референца наводи адресу која постоји само у сопственој локалној мрежи сервера, клијент застаје после привидног успеха.
Мит: један отворен порт је једна веза
Удаљени JMX преко RMI укључује најмање две крајње тачке и њих бирају различити делови система. Порт регистра је онај који уносите у клијент и постоји да изда заглавље које описује стварни конектор. Ако први успешни сокет узмете као доказ да је путања управљања отворена, дијагноза од два минута претвара се у цело поподне захтева за firewall.
Гледајте грешку самог клијента, а не списак слушалаца на серверу. Грешка после почетка руковања каже вам да није завршена друга веза, а не прва.
Шта регистар враћа
Заглавље садржи адресу и порт, серијализоване у тренутку када је конектор створен. На серверу са више интерфејса стек је можда изабрао адресу доступну из локалне мреже и недоступну из ваше. Клијент не зна разлику; он једноставно бира добијену вредност, и пакет иде маршрутом који постоји за ту адресу, а на VPN клијенту често га нема уопште. Тада се покушава друга веза.
Зато је грешка нестабилна међу окружењима: исти сервер може да се понаша другачије за корисника у локалној мрежи и за корисника у тунелу, без икакве промене у JMX конфигурацији.
Два порта и два својства која их фиксирају
Порт регистра долази из com.sun.management.jmxremote.port, а конектор се може фиксирати са com.sun.management.jmxremote.rmi.port уместо да се препусти стеку. Подесите оба експлицитно када између клијента и сервера постоји firewall или безбедносна група, јер непредвидљив други порт не може да се дозволи унапред, а широк опсег отворен због њега гори је од једног фиксног порта.
Затим потврдите помоћу ss -ltn или netstat -an на серверу да оба порта слушају и на којим адресама. Слушалац везан за loopback исправан је за распоређивање само на локалној машини и бескористан за овај случај.
Када је објављено име погрешно
Име хоста у удаљеној референци подешава java.rmi.server.hostname. Оно утиче на то шта заглавље објављује; само по себи није упутство да се сваки слушалац веже за један интерфејс, зато његово подешавање не даје увек очекивано понашање са једним портом. Подесите га, поново покрените процес и затим проверите шта заглавље заиста садржи. Изаберите име или адресу коју клијент може да разреши и достигне кроз тунел, и поново покрените процес да се заглавље поново изгради.
Мреже контејнера погоршавају ово, јер адреса коју процес види може бити унутрашња и недостижна за рутирање споља. Објавите жељено име хоста експлицитно уместо да платформи препустите избор.
Ако тунел правите преко SSH уместо VPN, исти проблем се појављује у другом руху: прослеђивање само порта регистра оставља другу крајњу тачку усмерену на адресу коју ваш клијент не може да достигне. Проследите оба порта и учините да се објављено име разрешава у нешто што клијент може да достигне локално.
Не искључујте безбедност управљања да бисте поједноставили
Исечци који искључују аутентикацију и TLS лако се налазе и терају везу да ради на начин који ћете касније морати да поништите. Удаљени JMX је интерфејс за управљање са истим привилегијама као процес који прегледа; задржите контроле приступа и ако клијент не може да приложи акредитиве, поправите управо то.
Када су крајње тачке исправне, сачувајте следећу грешку коју видите. Одбијање од truststore-а или налога је каснија фаза од недоступног конектора и значи да је посао са мрежом завршен.