"Unable to connect to remote host: Connection refused" 尝试让两个 Azure VM 在不同端口上通信时出错

"Unable to connect to remote host: Connection refused" error when trying to get two Azure VMs to communicate on different ports

我设置了两个 Azure VM 来测试我制作的程序。该程序将在两个 VM 上运行 运行,其中执行同步操作,要求 VM 使用 TCP 协议在不同端口上相互通信。为了访问我的 Azure VM,我在本地计算机上使用 Putty 通过 SSH 连接到端口 22。虚拟机位于同一子网上,我试图让它们通过 public IP 相互通信。我已经设置了两个 VM 入站规则,以使用任何协议 here is an example of this.

在任何端口上接受来自彼此的消息

在我的程序执行过程中,遇到以下错误“无法连接到远程主机:连接被拒绝”。在此之后,我做了一些调查。首先,我让两个虚拟机互相 ping 通,他们成功地做到了。然后,在两个虚拟机上,我 运行 命令“telnet other.ip 22”,其中 other.ip 是其他虚拟机 public IP。这似乎有效,如 image 所示。当我 运行 “telnet other.ip 6000” 或除 22 之外的任何其他端口时,我得到相同的错误“无法连接到远程主机:连接被拒绝”。我的理由是,如果我可以在任何端口上获得“telnet”命令 运行ning,我的程序也可能会工作。

我不太确定此时我的问题可能是什么,我的互联网搜索也没有帮助我。考虑到我当前的入站规则,我怀疑是否存在端口积压通信请求的问题。此外,我确实尝试更改我的入站规则,以便我的 VM 可以使用任何协议在任何端口上接收来自 any 源的消息,这导致了相同的错误(然后我更改了它出于安全目的,从 'any source' 返回到我的其他虚拟机 public IP。

根据您的描述,您可以检查两点:

  • 如果虚拟机内部有防火墙阻止了6000端口的外网连接。比如你使用的是Ubuntu虚拟机,可以参考How to Set Up a Firewall with UFW on Ubuntu 18.04。然后使用命令 sudo ufw disable 禁用防火墙或添加防火墙规则来验证这一点。
  • 运行 Linux 上的命令以查看打开的端口。 sudo netstat -tulpn | grep LISTEN。您应该在输出中看到端口 6000。如果没有,可能是你的程序没有启动好。

如果您有任何疑虑,请告诉我。

检查您的防火墙规则。如果您的组织倾向于使用防火墙,则在入站和出站链中添加端口 6000。

只有在监听状态下才能连接到端口号的远程主机

须藤 netstat -tulpn | grep LISTEN.