設定 VPN 閘道的封包擷取
連線能力和效能相關問題通常很複雜。 這可能需要花費很多時間和精力來縮小問題範圍的原因。 封包擷取可協助您將問題範圍縮小至網路的特定部分。 此方法可協助您判斷問題是在網路的用戶端、網路的 Azure 端,還是介於其中的某個位置。 在您縮小問題的範圍之後,就可以更有效率地進行偵錯並採取補救動作。
有一些常用的封包擷取工具可供使用。 使用這些工具取得相關的封包擷取可能會很麻煩,尤其是在高流量的案例中。 Azure VPN 閘道封包擷取提供的篩選功能是一項主要的區別。 您可以使用 VPN 閘道封包擷取搭配常用的封包擷取工具。
關於 VPN 閘道的封包擷取
您可以根據需求,在閘道或特定連線上執行 VPN 閘道封包擷取。 您也可以同時在多個通道上執行封包擷取。 您可以擷取單向或雙向流量、IKE 和 ESP 流量與內部封包,以及 VPN 閘道上的篩選。
當您隔離高流量中的問題時,使用五元組篩選條件 (來源子網路、目的地子網路、來源連接埠、目的地連接埠、通訊協定) 和 TCP 旗標 (SYN、ACK、FIN、URG、PSH、RST) 會很有幫助。
下列 JSON 範例和 JSON 結構描述會提供每個屬性的說明。 以下是當您執行封包擷取時,要記住的一些限制:
- 在此處顯示的結構描述中,篩選條件是一個陣列,但目前每次只能使用一個篩選條件。
- 您無法同時執行多個閘道範圍的封包擷取。
- 您無法同時在單一連線上執行多個封包擷取。 您可以同時在單一連線上執行不同的封包擷取。
- 每個閘道最多可以平行執行五個封包擷取。 這些封包擷取可以是閘道範圍的封包擷取和每個連線封包擷取的組合。
- MaxPacketBufferSize 的單位是位元組,MaxFileSize 是 MB
注意
如果您想要同時擷取內部和外部封包,請將 CaptureSingleDirectionTrafficOnly 選項設定為 false。
範例 JSON
{
"TracingFlags": 11,
"MaxPacketBufferSize": 120,
"MaxFileSize": 200,
"Filters": [
{
"SourceSubnets": [
"10.1.0.0/24"
],
"DestinationSubnets": [
"10.1.1.0/24"
],
"SourcePort": [
500
],
"DestinationPort": [
4500
],
"Protocol": [
6
],
"TcpFlags": 16,
"CaptureSingleDirectionTrafficOnly": true
}
]
}
JSON 結構描述
{
"type": "object",
"title": "The Root Schema",
"description": "The root schema input JSON filter for packet capture",
"default": {},
"additionalProperties": true,
"required": [
"TracingFlags",
"MaxPacketBufferSize",
"MaxFileSize",
"Filters"
],
"properties": {
"TracingFlags": {
"$id": "#/properties/TracingFlags",
"type": "integer",
"title": "The Tracingflags Schema",
"description": "Tracing flags that customer can pass to define which packets are to be captured. Supported values are CaptureESP = 1, CaptureIKE = 2, CaptureOVPN = 8. The final value is OR of the bits.",
"default": 11,
"examples": [
11
]
},
"MaxPacketBufferSize": {
"$id": "#/properties/MaxPacketBufferSize",
"type": "integer",
"title": "The Maxpacketbuffersize Schema",
"description": "Maximum buffer size of each packet. The capture will only contain contents of each packet truncated to this size.",
"default": 120,
"examples": [
120
]
},
"MaxFileSize": {
"$id": "#/properties/MaxFileSize",
"type": "integer",
"title": "The Maxfilesize Schema",
"description": "Maximum file size of the packet capture file. It is a circular buffer.",
"default": 100,
"examples": [
100
]
},
"Filters": {
"$id": "#/properties/Filters",
"type": "array",
"title": "The Filters Schema",
"description": "An array of filters that can be passed to filter inner ESP traffic.",
"default": [],
"examples": [
[
{
"Protocol": [
6
],
"CaptureSingleDirectionTrafficOnly": true,
"SourcePort": [
500
],
"DestinationPort": [
4500
],
"TcpFlags": 16,
"SourceSubnets": [
"10.1.0.0/24"
],
"DestinationSubnets": [
"10.1.1.0/24"
]
}
]
],
"additionalItems": true,
"items": {
"$id": "#/properties/Filters/items",
"type": "object",
"title": "The Items Schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"examples": [
{
"SourcePort": [
500
],
"DestinationPort": [
4500
],
"TcpFlags": 16,
"SourceSubnets": [
"10.1.0.0/24"
],
"DestinationSubnets": [
"10.1.1.0/24"
],
"Protocol": [
6
],
"CaptureSingleDirectionTrafficOnly": true
}
],
"additionalProperties": true,
"required": [
"SourceSubnets",
"DestinationSubnets",
"SourcePort",
"DestinationPort",
"Protocol",
"TcpFlags",
"CaptureSingleDirectionTrafficOnly"
],
"properties": {
"SourceSubnets": {
"$id": "#/properties/Filters/items/properties/SourceSubnets",
"type": "array",
"title": "The Sourcesubnets Schema",
"description": "An array of source subnets that need to match the Source IP address of a packet. Packet can match any one value in the array of inputs.",
"default": [],
"examples": [
[
"10.1.0.0/24"
]
],
"additionalItems": true,
"items": {
"$id": "#/properties/Filters/items/properties/SourceSubnets/items",
"type": "string",
"title": "The Items Schema",
"description": "An explanation about the purpose of this instance.",
"default": "",
"examples": [
"10.1.0.0/24"
]
}
},
"DestinationSubnets": {
"$id": "#/properties/Filters/items/properties/DestinationSubnets",
"type": "array",
"title": "The Destinationsubnets Schema",
"description": "An array of destination subnets that need to match the Destination IP address of a packet. Packet can match any one value in the array of inputs.",
"default": [],
"examples": [
[
"10.1.1.0/24"
]
],
"additionalItems": true,
"items": {
"$id": "#/properties/Filters/items/properties/DestinationSubnets/items",
"type": "string",
"title": "The Items Schema",
"description": "An explanation about the purpose of this instance.",
"default": "",
"examples": [
"10.1.1.0/24"
]
}
},
"SourcePort": {
"$id": "#/properties/Filters/items/properties/SourcePort",
"type": "array",
"title": "The Sourceport Schema",
"description": "An array of source ports that need to match the Source port of a packet. Packet can match any one value in the array of inputs.",
"default": [],
"examples": [
[
500
]
],
"additionalItems": true,
"items": {
"$id": "#/properties/Filters/items/properties/SourcePort/items",
"type": "integer",
"title": "The Items Schema",
"description": "An explanation about the purpose of this instance.",
"default": 0,
"examples": [
500
]
}
},
"DestinationPort": {
"$id": "#/properties/Filters/items/properties/DestinationPort",
"type": "array",
"title": "The Destinationport Schema",
"description": "An array of destination ports that need to match the Destination port of a packet. Packet can match any one value in the array of inputs.",
"default": [],
"examples": [
[
4500
]
],
"additionalItems": true,
"items": {
"$id": "#/properties/Filters/items/properties/DestinationPort/items",
"type": "integer",
"title": "The Items Schema",
"description": "An explanation about the purpose of this instance.",
"default": 0,
"examples": [
4500
]
}
},
"Protocol": {
"$id": "#/properties/Filters/items/properties/Protocol",
"type": "array",
"title": "The Protocol Schema",
"description": "An array of protocols that need to match the Protocol of a packet. Packet can match any one value in the array of inputs.",
"default": [],
"examples": [
[
6
]
],
"additionalItems": true,
"items": {
"$id": "#/properties/Filters/items/properties/Protocol/items",
"type": "integer",
"title": "The Items Schema",
"description": "An explanation about the purpose of this instance.",
"default": 0,
"examples": [
6
]
}
},
"TcpFlags": {
"$id": "#/properties/Filters/items/properties/TcpFlags",
"type": "integer",
"title": "The Tcpflags Schema",
"description": "A list of TCP flags. The TCP flags set on the packet must match any flag in the list of flags provided. FIN = 0x01,SYN = 0x02,RST = 0x04,PSH = 0x08,ACK = 0x10,URG = 0x20,ECE = 0x40,CWR = 0x80. An OR of flags can be provided.",
"default": 0,
"examples": [
16
]
},
"CaptureSingleDirectionTrafficOnly": {
"$id": "#/properties/Filters/items/properties/CaptureSingleDirectionTrafficOnly",
"type": "boolean",
"title": "The Capturesingledirectiontrafficonly Schema",
"description": "A flags which when set captures reverse traffic also.",
"default": false,
"examples": [
true
]
}
}
}
}
}
}
主要考量
- 執行封包擷取可能會影響效能。 如果您不需要封包擷取,請記得將其停止。
- 建議的最小封包擷取持續時間為 600 秒。 由於路徑上多個元件之間的同步問題,較短的封包擷取可能無法提供完整的資料。
- 封包擷取資料檔案會以 PCAP 格式產生。 使用 Wireshark 或其他常用的應用程式來開啟 PCAP 檔案。
- 原則式閘道不支援封包擷取。
- 封包擷取資料檔案的大小上限為 500 MB。
- 如果
SASurl
未正確設定參數,則追蹤可能會失敗,並出現儲存體錯誤。 如需如何正確產生SASurl
參數的範例,請參閱 Stop-AzVirtualNetworkGatewayPacketCapture。 - 如果您要設定使用者委派 SAS,請確定使用者帳戶已獲取儲存體帳戶的適當 RBAC 權限,例如儲存體 Blob 資料擁有者。
封包擷取 - 入口網站
本節可協助您使用 Azure 入口網站啟動和停止封包擷取。
啟動封包擷取 - 入口網站
您可以在 Azure 入口網站中設定封包擷取。
移至 Azure 入口網站中的 VPN 閘道。
在左側選取 [VPN 閘道封包擷取],以開啟 [VPN 閘道封包擷取] 頁面。
選取 [啟動封包擷取]。
在 [啟動封包擷取] 頁面上,進行任何必要的調整。 如果您想要同時擷取外部和內部封包,請勿選取 [僅擷取單一方向流量] 選項。
完成設定之後,請按一下 [啟動封包擷取] 。
停止封包擷取 - 入口網站
需要具有讀取/寫入權限的有效 SAS (或共用存取簽章) URI,才能完成封包擷取。 當封包擷取停止時,封包擷取的輸出會寫入 SAS URL 所參考的容器。
若要取得 SAS URL,請移至儲存體帳戶。
移至您想要使用的容器,然後以滑鼠右鍵按一下以顯示下拉式清單。 選取 [產生 SAS] 以開啟 [產生 SAS] 頁面。
在 [產生 SAS] 頁面上完成您的設定。 請確定您已授與讀取和寫入存取權。
按一下 [產生 SAS 權杖與 URL]。
SAS 權杖和 SAS URL 會產生並立即出現在按鈕下方。 複製 [Blob SAS URL]。
返回 Azure 入口網站中的 [VPN 閘道封包擷取] 頁面,然後按一下 [停止封包擷取] 按鈕。
在 [輸出 SAS URI] 文字方塊中,貼上 SAS URL (來自上一個步驟),然後按一下 [停止封包擷取]。
封包擷取 (PCAP) 檔案將儲存在指定的帳戶中。
注意
避免使用 Azure 產生的容器,例如 $logs
。 開頭 $
的容器通常是內部容器,而且只有建立容器的服務才應該使用這些容器。 例如,$logs
Azure 儲存體 帳戶會用來寫入記憶體帳戶相關記錄。
封包擷取 - PowerShell
下列範例顯示啟動和停止封包擷取的 PowerShell 命令。 如需參數選項的詳細資訊,請參閱 Start-AzVirtualnetworkGatewayPacketCapture。
先決條件
封包擷取資料必須登入您訂用帳戶上的儲存體帳戶。 請參閱建立儲存體帳戶。
若要停止封包擷取,您必須為儲存體帳戶產生
SASUrl
。 請參閱建立使用者委派 SAS。
啟動 VPN 閘道的封包擷取
Start-AzVirtualnetworkGatewayPacketCapture -ResourceGroupName "YourResourceGroupName" -Name "YourVPNGatewayName"
您可以使用選擇性參數 -FilterData
來套用篩選條件。
停止 VPN 閘道的封包擷取
Stop-AzVirtualNetworkGatewayPacketCapture -ResourceGroupName "YourResourceGroupName" -Name "YourVPNGatewayName" -SasUrl "YourSASURL"
如需參數選項的詳細資訊,請參閱 Stop-AzVirtualNetworkGatewayPacketCapture。
啟動 VPN 閘道連線的封包擷取
Start-AzVirtualNetworkGatewayConnectionPacketCapture -ResourceGroupName "YourResourceGroupName" -Name "YourVPNGatewayConnectionName"
您可以使用選擇性參數 -FilterData
來套用篩選條件。
停止 VPN 閘道連線的封包擷取
Stop-AzVirtualNetworkGatewayConnectionPacketCapture -ResourceGroupName "YourResourceGroupName" -Name "YourVPNGatewayConnectionName" -SasUrl "YourSASURL"
如需參數選項的詳細資訊,請參閱 Stop-AzVirtualNetworkGatewayConnectionPacketCapture。
下一步
如需 VPN 閘道的詳細資訊,請參閱什麼是 VPN 閘道?