【问题标题】:Communication between 2 VMs in a Virtual Network on AzureAzure 上虚拟网络中的 2 个 VM 之间的通信
【发布时间】:2021-12-18 19:08:07
【问题描述】:

我在位于同一虚拟网络中的两个资源之间存在访问问题。

具体来说,我在 VNet“Common”内的 SubNet“Data”上有一个带有 SQL 实例的 VM。

我在“前端”子网上有另一个带有报告服务实例的虚拟机,也在“通用”VNet 内。

这两个虚拟机因此在同一个 VNet 下,但在两个不同的子网下。

当我尝试从 Reporting 实例连接到 SQL 数据库时,我收到一条错误消息,告诉我无法访问它。

我通过在我的子网“数据”的 NSG 中手动添加一条规则来解决该问题,以允许来自 SQL 端口上“报告”VM 的 IP 的通信。

只要我这样做,它就会起作用。我可以从子网“前端”的报告中连接到子网“数据”上的 SQL 数据库。

但我不明白的是,我的子网“数据”已经在其 NSG 上包含一个入站规则,如果呼叫来自虚拟网络,则允许所有入站连接(在所有端口上)。这是默认存在的规则(称为 AllowVnetInBound)。

通常,我不必为我的 VM 报告添加特定规则。特别是因为我的虚拟机有一个动态 IP,所以这个解决方案是不可行的。

我错过了什么?

为什么以“VirtualNetwork”为源的“AllowVnetInBound”规则不够用?

编辑: 这是“数据”子网的 NSG 入站规则。我已经用绿色概述了我必须添加的规则才能使通信正常工作。没有这条规则,沟通就无法进行。

【问题讨论】:

  • 你使用的是私网还是公网ip?
  • 能否分享您的 NSG 规则截图?
  • @Jul_DW : 我用截图更新了原帖:)
  • 能否检查一下虚拟机内部的防火墙是否关闭?
  • 您能否在两个虚拟机之间进行 ping 操作或在它们之间调用任何其他协议?还是只有 SQL 无法访问?此外,您可以启用 NSG 流日志来准确分析正在发生的事情。

标签: azure azure-virtual-machine azure-virtual-network


【解决方案1】:

在默认的“AllowVnetInbound”规则之上是否还有其他自定义的低优先级规则?

当您在默认规则之上添加了较低优先级的自定义规则(如“AllowVnetInbound”)时,通常会发生这种情况,这在逻辑上会阻止默认规则。

如果这不能回答您的问题,请在手动设置自定义规则之前分享早期状态的 NSG 规则的屏幕截图。

如果这回答了您的问题,请将解释标记为已接受。

【讨论】:

  • 我用截图更新了原帖:)
  • 请删除优先级为 130 的规则,并将优先级为 100、110、120 的规则移至优先级 65002、65003、65004。请尝试。
【解决方案2】:

一个虚拟网络中的子网无需任何额外配置即可相互通信

【讨论】:

    【解决方案3】:

    默认情况下,子网“Data”中的 VM 应该能够与子网“Front”中的 VM 通信,因为这两个子网都在同一个虚拟网络中。我们不需要创建任何额外的入站或出站规则 有时,即使虚拟机在同一个虚拟网络中,它们也可能由于虚拟机内部的防火墙设置而无法相互通信

    因此,需要关闭两个虚拟机内部的防火墙,以便两个虚拟机能够相互通信

    关闭两个虚拟机内的防火墙后,您就可以从报告实例连接到 SQL 数据库

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 2021-03-26
      相关资源
      最近更新 更多