azure - 跨越 Azure VM 上的公共(public) VIP 时,出站 UDP 指定源端口发生更改

标签 azure azure-virtual-network

我们有一个 Azure VM,我们需要从该计算机的特定端口发送 UDP 消息。我们使用 .NET 类 UdpClient 进行通信。

如果我们尝试在同一虚拟网络中的计算机之间发送消息,接收方计算机将显示正确的源主机和端口。

如果我们跨公共(public) VIP(在不同虚拟网络中的虚拟机或本地监听器之间),源端口将显示 1024 及以上的端口,而不是所选的源端口。

发件人:1.2.3.4:5000

接收器:5.6.7.8:5001 -> 表示从 1.2.3.4:1025 收到的数据 -> 1025 源端口应为 5000

VB.NET 示例:

'Sending
Private Sub Send()
   Dim data() As Byte = System.Text.Encoding.Unicode.GetBytes("Data")
   Dim client As UdpClient = New UdpClient(5000)
   client.Send(data, data.Length, "5.6.7.8", "5001")
   client.Close()
End Sub

'Recieving
Private Sub Recieve()
   While True
      Dim remoteIPEndPoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 5001)
      Dim content() As Byte = udpClient.Receive(remoteIPEndPoint)
      If content.Length > 0 Then
         Dim message As String = Encoding.ASCII.GetString(content)
         message &= remoteIPEndPoint.Address.ToString & " " & remoteIPEndPoint.Port & " " & message & vbCrLf
      End If
   End While
End Sub

我读过一些有关 SNat(源 NAT)的文章,我想知道 Azure 网络是否始终在公共(public)网关之外的出站通信上转换源 UDP 端口。

我们确实需要在我们的平台中保留目的地的源端口信息,因为我们在互联网上有数千台设备仅监听指定的 IP:UDPPort 组合。

提前致谢,

安东尼奥·桑切斯

亚特兰蒂斯全局系统

最佳答案

我们一直在与 Azure 支持人员交谈,他们告诉我们,当您跨越虚拟网络边界时,源端口会被转换。

他们给我们的解决方案是在一台虚拟机中使用 PIP(实例级公共(public) IP 地址)。这样,源端口是使用 UDPClient 维护的,并且不应用 SourceNAT。这种公共(public) IP 处于预览状态,需要使用 powershell 才能配置它。

PIP信息和配置:PIP MSDN

谢谢!

安东尼奥·桑切斯

亚特兰蒂斯全局系统

关于azure - 跨越 Azure VM 上的公共(public) VIP 时,出站 UDP 指定源端口发生更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25681747/

相关文章:

azure - 跨云提供商运行 Kubernetes

azure - 如何访问 Azure 虚拟网络中的专用 VM

azure - 获取虚拟网络中的IP地址

azure - PowerShell 脚本 - 是否可以检索 Azure 租户中包含的 PowerApps 的信息?

尝试角色分配时,Azure DevOps 管道 terraform 错误 - 403

Azure 服务总线空闲时自动删除

azure - 从 Azure Devops 托管代理访问私有(private)存储帐户

azure - 由于“拒绝公共(public)网络访问”设置为"is",连接被拒绝

azure-logic-apps - 从 Azure 逻辑应用访问 Azure VNet

azure - Microsoft.WindowsAzure.Storage.dll 中发生类型 'System.StackOverflowException' 的未处理异常