Problemas para conectarse a un servidor RMI que está detrás de un router
Pregunta
Digamos que la IP pública del router es 92.1.85.179
El IP local del equipo con el servidor es 192.168.0.2
El router está configurado para reenviar 92.1.85.179:5678 a 192.168.0.2:5678
En el servidor que tengo:
System.setProperty( "java.rmi.server.hostname" , "92.1.85.179" );
Registry registry = LocateRegistry.createRegistry( 5678 );
registry.rebind( "TheWebServer" , webServerInt );
El cliente tiene:
Registry registry = LocateRegistry.getRegistry( "92.1.85.179" , 5678 );
server = (WebServerInterface) registry.lookup( "TheWebServer" );
Cuando el cliente está en la red local al servidor que está bien. Cuando el cliente está fuera de la red local se pone java.rmi.ConnectException: Conexión rechazada al anfitrión: 192.168.0.2;
Es evidente que el servidor está dando al cliente la IP de 192.168.0.2, ya que no aparece en el código, por lo que pensé System.setProperty( "java.rmi.server.hostname" , "92.1.85.179" );
se suponía que el cambio.
Cualquier entrada sería muy apreciada.
Solución
Es necesario exportar los objetos remotos en el puerto 5678 también, y lo que necesita conjunto java.rmi.server.hostname antes de exportar objetos remotos.