我正在通过SSH隧道隧道传输cajo rmi流量。通过SSH隧道传输所有RMI流量
为此,我有一台运行SSH deamon(apache Mina)的服务器和一台运行SSH客户端(Trilead SSH)的客户端。
可以建立这些机器之间的shh连接,并通过应用本地和远程端口转发我可以隧道rmi流量,但是这只适用于延长(到服务器)方向。
的设置:
主动SSH连接(端口22)
客户端:转发本地端口4000,远程主机端口第1198(此流量实际上去trhough隧道) 服务器:转发服务器端口4000到客户端端口1198(隧道的这部分没有被使用cajo)
服务器出口使用对象:
Remote.config(null, 1198, null, 0);
ItemServer.bind(new SomeObject(), "someobject");
客户端不会使用对象查找:
ObjectType someObject = (ObjectType)TransparentItemProxy.getItem(
"//localhost:4000/someobject",
new Class[] { ObjectType.class });
logger.info(someObject.getName());
端口转发是使用在客户端的三铅SSH库调用:
conn.createLocalPortForwarder(4000, "Server-IP", 1198);
conn.requestRemotePortForwarding("localhost" 4000, "Client-IP", 1198);
当使用Wireshark分析两个机器之间的IP通信,我发现通过隧道将查询重定向,但回应不是。 负责人通常发送到客户端的1198端口。
如何强制服务器将远程调用的响应发送到本地端口,以便将其传回客户端?
UPDATE:这里的问题是,对RMI对象的端口不同,那么注册表端口,因此还需要进行转发。
简而言之,客户端10.0.0.1会查找到//10.0.0.1:4000,并将其转发到服务器上的RMI端口(通过隧道)。 随后,服务器响应10.0.0.1:1198,我希望服务器将其流量发送到其本地端口4000,以便使用隧道。
我试图摆弄cajo Remote.config(ServerAddress,ServerPort,ClientAddress,ClientPort)设置,但是当我将clientaddress设置为10.0.0.1或127.0.0.1这个方法时,我无法获取响应回来,我没有看到任何响应的交通...
将响应发送回请求发送到的相同连接。你在谈论一个*回调*? – EJP
他在这里回答了答案中的细节吗? http://stackoverflow.com/questions/1734558/java-rmi-via-ssh-v2-protocol - 好像他可能错过了至少一次转移 – Petesh
谢谢Petesh和EJP,我正在重新思考我的设计。 RMI注册表可能运行在与RMI服务器不同的端口上。定制RMI服务器端口我想我需要实现一个自定义套接字facktory,如下所述:http://www.javaranch.com/journal/2003/10/rmi-ssh_p1.html –