本文介绍如何使用 Azure PowerShell 为 Azure 虚拟 WAN 站点到站点 VPN 网关创建数据包捕获。 数据包捕获有助于将问题范围缩小到网络的特定部分。 它还可以帮助你确定问题是出在本地端还是 Azure 端。 缩小问题范围可以实现更有效地调试并采取补救措施。
虽然存在一些常用的数据包捕获工具,但使用这些工具实现相关的数据包捕获可能很麻烦,尤其是在高流量场景中。 主要区别在于虚拟 WAN 数据包捕获提供有筛选功能。 可以将虚拟 WAN 数据包捕获与常用数据包捕获工具一起使用。
先决条件
验证环境中是否设置了以下配置:
- 虚拟 WAN 和虚拟中心。
- 虚拟中心中部署有站点到站点 VPN 网关。
- 还可以将 VPN 站点连接到你的站点到站点 VPN 网关。
设置环境
使用以下命令验证你使用的是否是正确的订阅,以及你是否已作为有权在站点到站点 VPN 网关上执行数据包捕获的用户身份登录
$subid = "<insert Virtual WAN subscription ID here>"
Set-AzContext -SubscriptionId $subid
创建存储帐户和容器
存储帐户用于存储数据包捕获结果。
生成 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 网关(所有连接)启动数据包捕获。
若要运行数据包捕获,需要站点到站点 VPN 网关的“-Name”值。 若要查找“-Name”值,请在 Azure 门户中,导航到虚拟中心,然后在“连接”下,单击“VPN (站点到站点)” 。
若要启动数据包捕获,请运行以下命令:
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 文件。
在 Azure 门户中,导航到所创建的存储帐户。
单击“容器”查看存储帐户的容器。
单击所创建的容器。
浏览文件夹结构以找到你的 PCAP 文件。 文件夹名称和结构基于日期和 UTC 时间。 找到 PCAP 文件后,单击“下载”。
数据包捕获数据文件以 PCAP 格式生成。 可以使用 Wireshark 或其他常用应用程序打开 PCAP 文件。
后续步骤
接下来,若要详细了解虚拟 WAN,请参阅虚拟 WAN 常见问题解答。