터널을 통해 레지스트리 포트에 연결하고, 핸드셰이크가 시작되는 것을 지켜본 다음, JConsole이 결국 시간 초과로 멈추는 것을 보십시오. 이렇게 되는 이유는 첫 번째 TCP 연결이 관리 연결이 아니라 조회이기 때문입니다. RMI 레지스트리는 호스트와 두 번째 포트를 지정하는 참조로 응답하고, JConsole은 안내받은 곳으로 갑니다. 터널이 서버의 첫 번째 포트까지만 닿거나, 참조가 서버 자체의 LAN에만 존재하는 주소를 가리키면, 클라이언트는 성공한 것처럼 보인 뒤 멈춥니다.

신화: 열린 포트 하나가 연결 하나

RMI를 통한 원격 JMX는 최소 두 개의 엔드포인트를 포함하며, 그것들은 시스템의 서로 다른 부분이 고릅니다. 레지스트리 포트는 클라이언트에 입력하는 값이고, 실제 커넥터를 설명하는 스텁을 넘겨주기 위해 존재합니다. 첫 번째 성공한 소켓을 관리 경로가 열렸다는 증거로 삼는 것이 두 분 진단을 방화벽 티켓으로 가득한 반나절로 바꿉니다.

서버의 리스너 목록이 아니라 클라이언트 자체의 오류를 보십시오. 핸드셰이크가 시작된 뒤의 실패는 첫 번째가 아니라 두 번째 연결이 완료되지 않았다고 말해 줍니다.

레지스트리가 돌려주는 것

스텁에는 주소와 포트가 들어 있고, 커넥터가 만들어진 순간 직렬화됩니다. 인터페이스가 여러 개인 서버에서는 스택이 로컬 네트워크에서는 닿고 당신 쪽에서는 닿지 않는 주소를 골랐을 수 있습니다. 클라이언트는 차이를 모르고, 주어진 값을 그대로 호출하며, 패킷은 그 주소에 존재하는 경로를 따르는데, VPN 클라이언트에서는 그런 경로가 아예 없는 경우가 많습니다. 두 번째 연결이 시도되는 순간이 바로 그때입니다.

같은 서버가 JMX 설정을 전혀 바꾸지 않았는데도 LAN의 사용자와 터널의 사용자에게 다르게 동작할 수 있는 이유도 이것입니다.

두 개의 포트와 그것을 고정하는 두 속성

레지스트리 포트는 com.sun.management.jmxremote.port에서 오고, 커넥터는 스택이 할당하는 값에 맡기는 대신 com.sun.management.jmxremote.rmi.port로 고정할 수 있습니다. 클라이언트와 서버 사이에 방화벽이나 보안 그룹이 있으면 둘 다 명시적으로 설정하십시오, 예측할 수 없는 두 번째 포트는 미리 허용할 수 없고, 그것을 받아들이려고 넓은 범위를 여는 것은 값 하나를 고정하는 것보다 나쁩니다.

그다음 서버에서 ss -ltn 또는 netstat -an로 두 포트가 모두 수신 중인지, 어느 주소에서 수신 중인지 확인하십시오. loopback에 묶인 리스너는 로컬 전용 배포에는 맞고 이 경우에는 쓸모가 없습니다.

알려진 이름이 틀렸을 때

원격 참조에 나타나는 호스트 이름은 java.rmi.server.hostname가 설정합니다. 이것은 스텁이 무엇을 알리는지에 영향을 주지만, 그 자체로 모든 리스너를 하나의 인터페이스에 묶으라는 지시는 아니므로 설정해도 기대하는 단일 포트 동작이 항상 나오지는 않습니다. 설정한 뒤 프로세스를 다시 시작하고 스텁에 실제로 무엇이 들어 있는지 확인하십시오. 클라이언트가 확인할 수 있고 터널을 통해 도달할 수 있는 이름이나 주소를 고르고, 스텁이 다시 만들어지도록 프로세스를 재시작하십시오.

컨테이너 네트워크는 프로세스가 보는 주소가 내부 주소여서 컨테이너 밖에서는 아무것도 라우팅할 수 없을 수 있기 때문에 이 문제를 더 악화시킵니다. 플랫폼이 고르게 두지 말고 의도한 호스트 이름을 명시적으로 게시하십시오.

VPN 대신 SSH로 터널을 만든다면 레지스트리 포트만 전달할 때 두 번째 엔드포인트가 클라이언트가 도달할 수 없는 주소를 가리킨 채 남는 같은 문제가 다른 옷을 입고 나타납니다. 두 포트를 모두 전달하고, 알려진 이름이 클라이언트가 로컬에서 도달할 수 있는 것으로 해석되게 하십시오.

간단하게 하려고 관리 보안을 끄지 마십시오

인증과 TLS를 끄는 스니펫은 쉽게 찾을 수 있고, 나중에 되돌려야 하는 방식으로 연결을 동작시키며, 원격 JMX는 그것이 검사하는 프로세스와 같은 권한을 가진 관리 인터페이스입니다. 접근 제어를 유지하고, 클라이언트가 자격 증명을 제시할 수 없다면 그쪽을 고치십시오.

엔드포인트가 올바르게 되면, 다음에 보게 되는 오류를 보관하십시오. 트러스트 스토어나 계정에 의한 거부는 도달할 수 없는 커넥터보다 뒤 단계이며 네트워크 작업이 끝났다는 뜻입니다.

관련 글