gpt4 book ai didi

java - 如何将位于 NAT 后面的 ActiveMQ 客户端连接到不在 NAT 后面的服务器?

转载 作者:行者123 更新时间:2023-12-01 09:56:02 26 4
gpt4 key购买 nike

我在网上查了一下,我发现的所有内容都显示了如何创建一个单独的服务器来连接到位于 nat 或防火墙后面的主服务器。

但在我的例子中,客户端位于 NAT 后面,服务器位于本地网络上。

所以它的设置有点像下面:

Client Actual:10.0.0.1 -> Client NAT:100.0.0.2:1111 <--> Server 10.0.0.0:1099

我用来连接服务器的Java代码如下:

String serviceUrl = "service:jmx:rmi:///jndi/rmi://10.0.0.0:1099/jmxrmi"; 
String[] credentials = new String[] {"username", "password"};
String objectName = "org.apache.activemq:type=Broker,brokerName=test";
JMXServiceURL url = new JMXServiceURL(serviceUrl);

Map<String, String[]> env = new HashMap<String, String[]>();
env.put(JMXConnector.CREDENTIALS, credentials);

JMXConnector jmxc = JMXConnectorFactory.connect(url, env);
conn = jmxc.getMBeanServerConnection();

broker = MBeanServerInvocationHandler.newProxyInstance(conn, new ObjectName(objectName), BrokerViewMBean.class, true);

它抛出的错误是:

java.rmi.ConnectException: Connection refused to host: 10.0.0.0; nested exception is: 
java.net.ConnectException: Connection timed out: connect

所以我的问题是,如何使 NAT 连接后面的客户端正常工作?

最佳答案

首先:ActiveMQ 工作的网络配置没有什么特别的。 ActiveMQ 的协议(protocol)是单端口,并且可以像大多数其他 TCP/IP 协议(protocol)一样轻松路由。

因此,假设服务器正在正确监听其 TCP 端口,并且客户端可以在本地成功连接到它,则可以像分析任何其他与网络相关的问题一样分析此问题。

客户端能否 ping 通服务器?从您提供的 IP 地址方案中很难正确理解您的网络,但正如现在提供的那样,客户端计算机将简单地假设服务器位于本地网络上,因此发送 ARP 请求,询问 MAC 地址“10.0.0.0”(这将超时,因为没有这样的机器来应答请求),而不是将请求转发到其 NAT 网关。如果这确实是您遇到的问题,那么存在三种可能的解决方案:a) 修改网络布局(让客户端使用不同的 IP 方案),b) 在客户端计算机上为服务器的 IP 设置静态路由,以强制其通过网关进行路由,或 c) 在网关上添加端口重定向并让客户端连接到网关的 IP 地址。现在,解决方案 a 不太实用,除非您的设置只是实验室配置。解决方案b是一种可能性,但非常糟糕。解决方案C,即在网关上设置端口重定向,是此类问题最常见的解决方案。

关于java - 如何将位于 NAT 后面的 ActiveMQ 客户端连接到不在 NAT 后面的服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37208170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com