为虚拟 WAN 站点到站点 VPN 配置数据包捕获:PowerShell

本文介绍如何使用 Azure PowerShell 为 Azure 虚拟 WAN 站点到站点 VPN 网关创建数据包捕获。 数据包捕获有助于将问题范围缩小到网络的特定部分。 它还可以帮助你确定问题是出在本地端还是 Azure 端。 缩小问题范围可以实现更有效地调试并采取补救措施。

虽然存在一些常用的数据包捕获工具,但使用这些工具实现相关的数据包捕获可能很麻烦,尤其是在高流量场景中。 主要区别在于虚拟 WAN 数据包捕获提供有筛选功能。 可以将虚拟 WAN 数据包捕获与常用数据包捕获工具一起使用。

先决条件

验证环境中是否设置了以下配置:

  • 虚拟 WAN 和虚拟中心。
  • 虚拟中心中部署有站点到站点 VPN 网关。
  • 还可以将 VPN 站点连接到你的站点到站点 VPN 网关。

设置环境

使用以下命令验证你使用的是否是正确的订阅,以及你是否已作为有权在站点到站点 VPN 网关上执行数据包捕获的用户身份登录

$subid = "<insert Virtual WAN subscription ID here>"
Set-AzContext -SubscriptionId $subid

创建存储帐户和容器

存储帐户用于存储数据包捕获结果。

  1. 创建存储帐户。 有关详细步骤,请参阅创建存储帐户
  2. 在存储帐户中创建容器对象。 有关详细步骤,请参阅创建容器

生成 SAS URL

在停止数据包捕获时,必须提供所创建的存储容器的 SAS URL。 将通过此 URL 存储数据包捕获的结果。

运行以下命令以生成共享访问签名 (SAS) URL:

$rg = "<resource group name containing storage account>" 
$storeName = "<name of storage account> "
$containerName = "<name of container you want to store packet capture in>
$key = Get-AzStorageAccountKey -ResourceGroupName $rg -Name $storeName
$context = New-AzStorageContext -StorageAccountName  $storeName -StorageAccountKey $key[0].value
New-AzStorageContainer -Name $containerName -Context $context
$container = Get-AzStorageContainer -Name $containerName  -Context $context
$now = get-date
$sasurl = New-AzStorageContainerSASToken -Name $containerName -Context $context -Permission "rwd" -StartTime $now.AddHours(-1) -ExpiryTime $now.AddDays(1) -FullUri

启动数据包捕获

本部分介绍如何为站点到站点 VPN 网关(所有连接)启动数据包捕获。

  1. 若要运行数据包捕获,需要站点到站点 VPN 网关的“-Name”值。 若要查找“-Name”值,请在 Azure 门户中,导航到虚拟中心,然后在“连接”下,单击“VPN (站点到站点)” 。

    Image of Virtual WAN gateway name.

  2. 若要启动数据包捕获,请运行以下命令:

    Start-AzVpnGatewayPacketCapture -ResourceGroupName $rg -Name "<name of the Gateway>"
    

可选:指定筛选器

若要简化数据包捕获,可以在数据包捕获上指定筛选器,以侧重于特定行为。

注意

对于 TracingFlags 和 TCPFlags,可以指定多个协议,方法是将要捕获的协议的数值相加(与逻辑 OR 相同)。 例如,如果只想捕获 ESP 和 OPVN 数据包,请将 TracingFlag 值指定为 8+1 = 9。

参数 说明 默认值 可用值
TracingFlags 用于确定捕获的数据包类型的整数 11(ESP、IKE、OVPN) ESP = 1 IKE = 2 OPVN = 8
TCPFlags 用于确定捕获的 TCP 数据包类型的整数 0(无) FIN = 1,SYN = 2,RST = 4,PSH = 8,ACK = 16,URG = 32,ECE = 64,CWR = 128
MaxPacketBufferSize 捕获的数据包的最大大小(字节)。 如果数据包大于提供的值,会将数据包截断。 120 任意
MaxFileSize 最大捕获文件大小(Mb)。 捕获的内容存储在一个循环缓冲区中,以便以先进先出 (FIFO) 方式处理溢出(先删除较旧的数据包) 100 任意
SourceSubnets 捕获指定 CIDR 范围的数据包。 指定为数组。 [](所有 IPv4 地址) 逗号分隔的 IPV4 子网的数组
DestinationSubnets 捕获以指定 CIDR 范围为目标的数据包。 指定为数组。 [](所有 IPv4 地址) 逗号分隔的 IPV4 子网的数组
SourcePort 捕获其源位于指定范围内的数据包。 指定为数组。 [](所有端口) 逗号分隔的端口的数组
DestinationPort 捕获其目标位于指定范围内的数据包。 指定为数组。 [](所有端口) 逗号分隔的端口的数组
CaptureSingleDirectionTrafficOnly 如果为 true,数据包捕获中只会显示双向流的一个方向。 这将捕获 IP 和端口的所有可能组合。 正确 True、False
协议 对应于 IANA 协议的整数的数组。 [](所有协议) 此处找到的任何协议

以下示例展示了使用筛选器字符串的数据包捕获。 可以按需更改相关参数。

$filter="{`"TracingFlags`":11,`"MaxPacketBufferSize`":120,`"MaxFileSize`":500,`"Filters`":[{`"SourceSubnets`":[`"10.19.0.4/32`",`"10.20.0.4/32`"],`"DestinationSubnets`":[`"10.20.0.4/32`",`"10.19.0.4/32`"],`"TcpFlags`":9,`"CaptureSingleDirectionTrafficOnly`":true}]}"
Start-AzVpnConnectionPacketCapture -ResourceGroupName $rg -Name "<name of the VPN connection>" -ParentResourceName "<name of the Gateway>" -LinkConnection "<comma separated list of links>" -SasUrl $sasurl -FilterData $filter

Start-AzVpnGatewayPacketCapture -ResourceGroupName $rg -Name "<name of the Gateway>" -FilterData $filter

停止数据包捕获

建议在停止之前让数据包捕获至少运行 600 秒。 停止数据包捕获时,使用的参数类似于启动数据包捕获部分中的参数。 在命令中,SAS URL 值是在创建存储帐户部分中生成的。 如果未正确配置 SasUrl 参数,捕获可能会失败,出现存储错误。

在准备好停止数据包捕获时,请运行以下命令:

Stop-AzVpnGatewayPacketCapture -ResourceGroupName $rg -Name <GatewayName> -SasUrl $sasurl

查看数据包捕获

本部分介绍如何下载要查看的数据包捕获 PCAP 文件。

  1. 在 Azure 门户中,导航到所创建的存储帐户。

  2. 单击“容器”查看存储帐户的容器。

  3. 单击所创建的容器。

  4. 浏览文件夹结构以找到你的 PCAP 文件。 文件夹名称和结构基于日期和 UTC 时间。 找到 PCAP 文件后,单击“下载”。

    Graphic showing how to download file.

  5. 数据包捕获数据文件以 PCAP 格式生成。 可以使用 Wireshark 或其他常用应用程序打开 PCAP 文件。

后续步骤

接下来,若要详细了解虚拟 WAN,请参阅虚拟 WAN 常见问题解答