1

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

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

如果我们跨公共 VIP(在不同虚拟网络中的 VM 或 onPremises 侦听器之间),源端口将显示 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 网络是否总是在公共网关之外的出站通信中转换源 UDP 端口。

我们确实需要在我们的平台中保存目的地的源端口信息,因为我们在 Internet 上有成千上万的设备只侦听指定的 IP:UDPPort 组合。

提前致谢,

安东尼奥·桑切斯

亚特兰蒂斯全球系统

4

1 回答 1

1

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

他们给我们的解决方案是在一个VM中使用PIP(Instance-Level Public IP Addresses)。这种方式源端口是使用 UDPClient 维护的,并且不应用 SourceNAT。这种公共 IP 处于预览状态,需要 powershell 才能对其进行配置。

PIP 信息和配置: PIP MSDN

谢谢!

安东尼奥·桑切斯

亚特兰蒂斯全球系统

于 2014-09-10T15:36:50.040 回答