JBoss 中的 JMS,如何穿透防火墙?

本文涉及的产品
云防火墙,500元 1000GB
简介:
JBoss 中可穿透防火墙的 JMS 承载方式有 RMI、HTTP 和 UIL2。RMI 和 HTTP 太慢了,所以 UIL2 是可以接受的选择。

然而,在 JBOSS 的所有版本中,默认情况下,都存在 UIL2 不能穿透防火墙的问题。

以 JBoss 3.2.4 为分界点,本文给出了前后两种解决方法。

环境描述

见下图,JBoss Server 部署在内网上,主机名为 myserver,通过防火墙 Firewall-B 连接到公网上。公网外有一台客户端机器 hostA,上面运行了 JMS 客户端程序。

拓扑结构示意图



问题描述

JMS 客户端连接不上 myserver 上的 JMS 服务器,通常是:


Code:

[Ctrl+A Select All]



问题分析

太长了,省略……

解决方法

一、针对 JBoss 3.2.4(不含)以前的版本

我在 JBoss 3.2.3 上打了一个 patch,可从此处下载,下载后把 rar 改成 jar 即可:
 
[url]http://blog.51cto.com/attachment/200611/59583_1162519435.rar[/url]
(如果此链接不能下载,则到文章的最底下找链接,那是博客自动加的)

操作步骤:

1、用所下载的 jbossmq.jar 替换 JBoss 服务器端的 jbossmq.jar,通常位于:jboss/server/default/lib 目录下;

2、修改 JBoss 的启动脚本 run.sh,在 JAVA_OPTS 变量里面加上“-DSERVER_NAME=<服务器的主机名>”,如:
JAVA_OPTS="$JAVA_OPTS -Dprogram.name=$PROGNAME -DSERVER_NAME=myserver"
3、启动 JBoss 服务器;

4、把所下载的 jbossmq.jar 加入到 JMS 客户端的 Classpath 中,注意:一定要加在 jbossall-client.jar 的前面

5、在客户端的机器的 hosts 文件中加入 myserver 与公网 IP 的映射,例如:210.0.0.1     myserver

hosts 文件通常是 windows\system32\drivers\etc\hosts 或 /etc/hosts;

6、在客户端 JMS 程序的启动脚本中,也加上“-DSERVER_NAME=myserver”选项;

7、恭喜你,可以启动 JMS 客户端了。

二、针对 JBoss 3.2.4(含)以后的版本

JBoss 3.2.4 起修改了这个 BUG,只要在 JMS 客户端的启动脚本中加上如下选项即可:
“-Dorg.jboss.mq.il.uil2.useServerHost=true”

自己编写补丁

对于 3.2.3 以前的版本,请自己动手打 patch,步骤如下:

1、修改 org\jboss\mq\il\uil2\UILServerIL.java 的 createConnection() 方法,在如下代码前:


Code:

[Ctrl+A Select All]


加上代码:


Code:

[Ctrl+A Select All]


最终结果是:


Code:

[Ctrl+A Select All]


把这个类编译,并替换旧的 jbossmq.jar 中的同名文件。然后打 patch,方法见上文。









本文转自 豪客 51CTO博客,原文链接:http://blog.51cto.com/wakan/7214,如需转载请自行联系原作者
目录
相关文章
|
应用服务中间件 网络安全 nginx
docker 映射端口穿透内置防火墙
docker 映射端口穿透内置防火墙
477 0
|
消息中间件 XML 应用服务中间件
|
存储 网络安全 网络虚拟化
感觉差不多了。CLOUDSTACK的NAT,端口转发和防火墙结合穿透
构架差不多OK啦。 测试也近尾声啦。 感觉它适合私有云,或是混合云,但结合了SDN的网络,真的很安全。 如果是纯公有云,也是更适合特定方案。或是要第二次开发,毕竟让ACCOUNT登陆到后台,结合GUEST调整网络和主机,更像是企业IT作的事,而不是自动化拎包入住的简单方法。
1121 0
|
网络安全
HttpTunnel防火墙穿透指南
局域网穿透防火墙,可以使用HTTPTUNNEL,这个软件需要服务端做配合,要运行httptunnel的服务端,这种方法对局域网端口限制很有效。
1176 0