Падключыцеся да порта рэестра праз тунель, паназірайце за пачаткам рукапаціскання і потым убачце, што JConsole усё роўна завяршаецца па тайм-ауце. Так адбываецца таму, што першае TCP-злучэнне — не кіравальнае злучэнне, а пошук. Рэестр RMI адказвае спасылкай, у якой указаны вузел і другі порт, і JConsole потым ідзе туды, куды ёй сказалі. Калі тунель дастае толькі да першага порта сервера або спасылка ўказвае на адрас, які існуе толькі ва ўласнай лакальнай сетцы сервера, кліент завісае пасля ўяўнага поспеху.

Міф: адзін адкрыты порт — гэта адно злучэнне

Аддалены JMX праз RMI задзейнічае як мінімум дзве канцавыя кропкі, і іх выбіраюць розныя часткі сістэмы. Порт рэестра — гэта тое, што вы ўводзіце ў кліенце, і ён існуе, каб выдаць заглушку, якая апісвае сапраўдны канэктар. Калі прымаць першы паспяховы сокет за доказ таго, што шлях кіравання адкрыты, дыягностыка на дзве хвіліны ператвараецца ў цэлы дзень заявак у firewall.

Глядзіце на памылку самога кліента, а не на спіс слухачоў сервера. Збой пасля пачатку рукапаціскання кажа пра тое, што не завяршылася другое злучэнне, а не першае.

Што вяртае рэестр

Заглушка змяшчае адрас і порт, серыялізаваныя ў момант стварэння канэктара. На серверы з некалькімі інтэрфейсамі стек мог выбраць адрас, даступны з лакальнай сеткі і недаступны з вашай. Кліент не ведае розніцы; ён проста набірае атрыманае значэнне, і пакет ідзе па маршруце, які існуе для гэтага адраса, а на VPN-кліенце яго часта няма зусім. Менавіта ў гэты момант робіцца другая спроба злучэння.

Менавіта таму збой праяўляецца нестабільна ў розных асяроддзях: той самы сервер можа паводзіць сябе па-рознаму для карыстальніка ў лакальнай сетцы і для карыстальніка ў тунелі, хаця канфігурацыя JMX не мяняецца зусім.

Два порты і дзве ўласцівасці, якія іх фіксуюць

Порт рэестра задаецца ў com.sun.management.jmxremote.port, а канэктар можна зафіксаваць з дапамогай com.sun.management.jmxremote.rmi.port, а не пакідаць на меркаванне стэка. Задайце абодва яўна, калі паміж кліентам і серверам ёсць міжсеткавы экран або група бяспекі, бо непрадказальны другі порт нельга дазволіць загадзя, а шырокі дыяпазон, адкрыты дзеля яго, горш за адзін фіксаваны порт.

Потым праверце з дапамогай ss -ltn або netstat -an на серверы, што абодва порты слухаюцца і на якіх адрасах. Слухач, прывязаны да loopback, правільны для разгортвання толькі на лакальнай машыне і бескарысны для гэтага выпадку.

Калі абвешчанае імя памылковае

Імя вузла ў аддаленай спасылцы задаецца java.rmi.server.hostname. Яно ўплывае на тое, што абвяшчае заглушка; само па сабе яно не загадвае прывязаць кожнага слухача да аднаго інтэрфейса, таму яго ўсталяванне не заўсёды дае чаканыя паводзіны з адным портам. Задайце яго, перазапусціце працэс і потым праверце, што заглушка сапраўды змяшчае. Выберыце імя або адрас, які кліент можа развязаць і дасягнуць праз тунель, і перазапусціце працэс, каб заглушка была пабудавана нанова.

Сеткі кантэйнераў пагаршаюць гэта, бо адрас, які бачыць працэс, можа быць унутраным і недасягальным па маршруце звонку кантэйнера. Публікуйце патрэбнае імя вузла яўна, а не дазваляйце платформе выбіраць.

Калі вы будуеце тунель праз SSH, а не VPN, тая самая праблема паўстае ў іншым убранні: пераадрасацыя толькі порта рэестра пакідае другую канцавую кропку такой, што ўказвае на адрас, якога ваш кліент не можа дасягнуць. Пераадрасуйце абодва порты і дабіцеся, каб абвешчанае імя развязвалася ў нешта, даступнае кліенту лакальна.

Не адключайце бяспеку кіравання дзеля прастаты

Фрагменты, якія адключаюць аўтэнтыфікацыю і TLS, лёгка знайсці, і яны прымушаюць злучэнне працаваць так, што потым давядзецца ўсё адмяняць. Аддалены JMX — гэта інтэрфейс кіравання з тымі ж правамі, што і працэс, які ён правярае; захоўвайце яго сродкі кантролю доступу, а калі кліент не можа прад'явіць уліковыя даныя, выпраўляйце менавіта гэта.

Калі канцавыя кропкі правільныя, захавайце наступную памылку, якую ўбачыце. Адмова сховішча даверу або ўліковага запісу — гэта больш позні этап, чым недасягальны канэктар, і яна азначае, што праца з сеткай завершана.

Падобныя артыкулы