无法远程调试应用程序 - 端口无法从外部访问

Posted

技术标签:

【中文标题】无法远程调试应用程序 - 端口无法从外部访问【英文标题】:Unable to debug app remotely - port isn't accessible externally 【发布时间】:2016-04-01 12:10:53 【问题描述】:

我需要远程调试我的应用,但由于以下错误,我无法这样做:

Unable to open debugger port (X.X.X.X:8000): java.net.ConnectException "Connection timed out: connect"

我有:

    在远程服务器 (Debian) 上的 Tomcat 中运行的 Java 应用程序 在本地运行的 IntelliJ Idea (Windows)

我得出的结论是,问题的原因是 用于远程调试的端口 8000 无法通过外部 ip 访问,只能通过“localhost”访问。以下是原因,为什么我这么认为:

远程调试正在预期的端口上工作:

root@victor-app-server:/opt/tomcat-home/bin# netstat -tulpn | grep 8000
tcp  0  0  0.0.0.0:8000  0.0.0.0:*  LISTEN  3773/java

我可以通过 'localhost' 远程登录到它:

root@victor-app-server:/opt/tomcat-home/bin# telnet localhost 8000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

但无法通过外部 ip 远程登录:

root@victor-app-server:/opt/tomcat-home/bin# telnet X.X.X.X 8000
Trying X.X.X.X...
telnet: Unable to connect to remote host: Connection timed out

这是 iptables 的输出:

root@victor-app-server:/opt/tomcat-home/bin# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

如何解决 8000 端口的这个问题?或者也许我的主要问题还有其他原因?

【问题讨论】:

我假设你的 debian 服务器上的防火墙不允许连接到端口 8000。 @Heri,我认为由于 iptables 不包含规则,防火墙不会引起问题。如果不是这样,请解释一下,如何检查防火墙? 服务器在哪里?在局域网还是在外部?如果服务器在另一个局域网,服务器所连接的局域网中路由器的配置是否正确? 【参考方案1】:

尝试“iptables -F”来解除防火墙的阻塞

【讨论】:

【参考方案2】:

这是对我有用的命令:

sudo ufw allow <debug_port>

【讨论】:

【参考方案3】:

我通过 Java 11 和地址属性(例如这些 JVM 参数)遇到了同样的问题:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6565

但是我的问题是通过更改地址属性的值来解决的,例如这个示例:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:6565

现在 6565 端口可以从外部访问了。

【讨论】:

以上是关于无法远程调试应用程序 - 端口无法从外部访问的主要内容,如果未能解决你的问题,请参考以下文章

跟踪特定的 IP 和端口

如何建立远程桌面服务Web访问端口

Namenode 无法从 Docker 容器外部访问

远程调试无法连接

linux下tomcat无法远程访问(开放8080端口)

eclipse:远程调试防火墙后面的tomcat服务器