Свържете се с порта на регистъра през тунела, наблюдавайте как започва ръкостискането и после вижте как 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 е интерфейс за управление със същите права като процеса, който инспектира; запазете контролите за достъп и ако клиентът не може да представи идентификационни данни, поправете точно това.

Когато крайните точки са правилни, запазете следващата грешка, която видите. Отказ от хранилище за доверие или от профил е по-късен етап от недостижим конектор и означава, че работата по мрежата е приключила.

Подобни статии