Удаленная работа JVisualVM, когда пункт назначения находится за NAT?

Я нахожусь в сети разработчиков, а JBoss, за которым нужно следить с помощью JVisualVM, находится за клиентским брандмауэром в отдельной сети. JBoss открыт для нас через NAT. Открытый порт JMX работает при использовании telnet из нашей сети разработчиков, но JVisualVM по-прежнему не находит удаленный JMX. По-видимому, это может быть связано с двумя причинами: 1) необходимо получить доступ к одному или нескольким динамическим сокетам RMI или 2) не определено «java.rmi.server.hostname». Моя проблема может быть как в пунктах 1, так и в пунктах 2, но, видимо, поскольку у нас есть доступ по SSH, это можно решить в соответствии с этим сайтом:

http://rafaelsteil.com/setting-up-jmx-for-jconsole-visualvm-on-ec2-plus-jetty-configuration/

«java.rmi.server.hostname» — общедоступное имя хоста (например, example.com) вашего сервера без HTTP или чего-либо еще. Нельзя использовать внутренний адрес, иначе вы не сможете получить удаленный доступ к сервису.

Однако у меня есть один вопрос о «java.rmi.server.hostname», должен ли определенный IP-адрес быть внутренним IP-адресом сервера или IP-адресом NAT, который общедоступен для нашей сети разработчиков?


person user1340582    schedule 26.09.2014    source источник


Ответы (1)


Я на самом деле только что решил эту проблему сам и понял это.

Могу поспорить, что проблема заключается в соединениях RMI - вы не можете предсказать, какие порты он будет использовать, и поэтому вы не можете заставить его работать с брандмауэром.

Обходной путь — использовать прокси-сервер SSH:

  1. SSH к ящику, где работает ваше приложение, но используйте параметр -D следующим образом:

    ssh пользователь @ удаленный хост -D 9999

    Это запустит прокси-сервер socks на вашем локальном компьютере через порт 9999.

  2. Откройте JVisualVM и в настройках в разделе «сеть» настройте его на использование прокси-сервера socks на локальном хосте через порт 9999.

Если вы сделаете вышеописанное, вы сможете подключиться к удаленной машине как обычно, и, поскольку весь трафик RMI теперь проходит через прокси-сервер SSH, он проходит через брандмауэр и работает хорошо.

Удачи :-)

person kabadisha    schedule 31.12.2014
comment
Да, я также реализовал случайные соединения RMI, а также решил проблему с помощью SSH-туннелирования. Как будто изобретатели не знали о существовании брандмауэров :) - person user1340582; 01.01.2015
comment
Хороший совет! К вашему сведению, для меня настройки прокси-сервера JVisualVM не работали. Пришлось запускать так: jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=9999 - person zeratul021; 23.11.2015