如何對 VPN 連線上的封包遺失問題進行疑難排解?

7 分的閱讀內容
0

VPN 連線出現連續或間歇性的封包遺失和高延遲問題。

解決方法

檢查資源使用率

高 CPU、記憶體或網路頻寬使用率會導致封包遺失。監控 CPUUtilizationNetworkInNetworkOutNetworkPacketsInNetworkPacketsOut Amazon CloudWatch 指標。檢查來源主機和目的地主機上的資源使用率。

檢查網路問題

若要檢查 ICMP 或 TCP 封包遺失或延遲情形,請在本機內部部署機器上安裝 mtr 網路工具。同時,請在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上安裝 mtr

請針對 Amazon Linux 執行下列命令:

sudo yum install mtr

請針對 Ubuntu 執行下列命令:

sudo apt-get install mtr

請針對 Windows 使用 SourceForge 的 WinMTR。

**注意:**WinMTR 不支援 TCP 型 MTR。

檢查 AWS VPN 通道內是否存在封包遺失問題。測試使用通道之內部部署主機到 Amazon EC2 執行個體私有 IP 位址的連線。此外,請測試從內部部署客戶閘道到每個通道之公用 IP 位址的連線。如果您無法在客戶閘道裝置上使用 mtr,請使用與客戶閘道裝置相同網際網路連線的主機。

**重要:**在兩個方向取得 mtr 結果。當您反轉方向時,TCP 和 IP 位址網路上節點之間的路徑可能會變更。

在使用 ICMP 的私有 IP 位址上執行下列測試:

mtr -b -c 50 -rw Host_Instance_Private_IP

在使用 TCP 的私有 IP 位址上執行下列測試:

mtr -b -c 50 -rw -T -P 443 Host_Instance_Private_IP

**注意:**在上述命令中,使用 EC2 執行個體或內部部署主機的私有 IP 位址取代 Host_instance_private_IP,並使用您的連接埠取代 443

在使用 ICMP 的公用 IP 位址上執行下列測試:

mtr -b -c 50 -rw AWS_Tunnel_Public_IP

在使用 UDP 的公用 IP 位址上執行下列測試:

mtr -b -c 50 -rw -u -P 500 AWS_Tunnel_Public_IP
mtr -b -c 50 -rw -u -P 4500 AWS_Tunnel_Public_IP

**注意:**在上述命令中,使用通道的公用 IP 位址取代 AWS_Tunnel_Public_IP,並使用您的 UDP 連接埠取代 5004500

單一躍點上預期會出現封包遺失並往返時間 (RTT) 增加的情形。只有您在每個躍點上加以檢視時,封包遺失和 RTT 增加才會構成問題。下列範例輸出顯示一致的遺失情形,該情形從躍點 3 開始,並持續至最終躍點為止:

HOST: localhost                      Loss%   Snt   Last  Avg  Best  Wrst   StDev
   1. 63.247.74.43                   0.0%    10    0.3   0.6   0.3   1.2   0.3
   2. 63.247.64.157                  0.0%    10    0.4   1.0   0.4   6.1   1.8
   3. 209.51.130.213                60.0%    10    0.8   2.7   0.8  19.0   5.7
   4. aix.pr1.atl.google.com        60.0%    10    6.7   6.8   6.7   6.9   0.1
   5. 72.14.233.56                  50.0%    10    7.2   8.3   7.1  16.4   2.9
   6. 209.85.254.247                40.0%    10   39.1  39.4  39.1  39.7   0.2
   7. 64.233.174.46                 40.0%    10   39.6  40.4  39.4  46.9   2.3
   8. gw-in-f147.1e100.net          40.0%    10   39.6  40.5  39.5  46.7   2.2

下列範例顯示了使用 UDP 連接埠 500 之通道公用 IP 位址的測試情形。在躍點 1 和 4 之間,Loss% 列會顯示遺失的百分比。但是,因為躍點 5 和 13 之間不存在封包遺失,所以此遺失不屬於重大的封包遺失情形。躍點 14 和最終躍點之間的遺失狀況顯示出重大的封包遺失情形,因為這是一種持續性遺失,最終會導致 100% 的遺失率。此範例中的問題發生在躍點 14。

sudo mtr -b -c 30 -rw -u -P 500 185.156.137.215
Start: 2024-08-28T18:59:49+0000
HOST: ip-10-100-20-25                       Loss% Snt Last Avg Best Wrst StDev
1. |-- ???                                   100.0 30 0.0  0.0  0.0  0.0   0.0
2. |-- 240.1.84.6                            73.3% 30 0.5  0.5  0.5  0.5   0.0
3. |-- 242.3.160.33                          63.3% 30 1.4  1.0  0.6  1.4   0.3
4. |-- 241.0.6.67                            63.3% 30 0.5  6.7  0.5  12.4  5.9
5. |-- 100.100.6.39                          0.0%  30 0.5  3.1  0.5  27.7  6.2
6. |-- 100.100.72.6                          0.0%  30 1.1  9.9  0.5  96.0  17.6
7. |-- 100.91.209.81                         0.0%  30 11.5 20.6 11.1 127.3 24.3
8. |-- 100.100.6.107                         0.0%  30 12.8 19.9 11.6 127.8 22.6
9. |-- 99.83.70.223                          0.0%  30 12.3 18.1 11.7 117.0 19.2
10.|-- 100.100.92.209                        0.0%  30 11.9 13.7 11.6 50.6  7.0
11.|-- 100.100.16.88                         0.0%  30 13.2 14.0 11.9 33.1  3.8
12.|-- gw-as249.retn.net (87.245.240.41)     0.0%  30 13.2 13.2 11.8 19.9  1.5
13.|-- thw.sw01.loudltd.net (185.156.136.14) 0.0%  30 11.4 12.5 11.4 14.2  1.0
14.|-- no-ptr.pckear.com (185.116.108.124)   20.0% 30 14.8 13.2 12.5 14.8  0.5
15.|-- thw.sw01.loudltd.net (185.156.136.14) 40.0% 30 14.1 13.6 12.5 15.5  0.8
16.|-- thw.sw01.loudltd.net (185.156.136.14) 40.0% 30 16.5 14.5 13.3 16.5  0.8
17.|-- ???                                  100.0% 30 0.0  0.0  0.0  0.0   0.0

檢查延遲和路由問題

traceroute 工具會顯示資料在網路中傳輸的路徑。使用此資訊來識別發生延遲的位置。

若要在Amazon Linux 上安裝 traceroute,請執行下列命令:

sudo yum install traceroute

若要在 Ubuntu 上安裝 traceroute,請執行下列命令:

sudo apt-get install traceroute

請針對 Windows 使用 tracert 工具而不是 traceroute。此工具預設會安裝在所有 Windows 電腦上。請注意,tracert 不允許 TCP 追蹤。如需完整功能,您可以安裝 tracetcp 工具。

請在 Amazon EC2 執行個體與內部部署主機的私有和公用 IP 位址之間執行下列測試。

**重要:**在兩個方向獲得結果。當您反轉方向時,TCP 和 IP 位址網路上節點之間的路徑可能會變更。

對於 Linux,請執行下列命令:

sudo traceroute -T -p 80 Host_IP

**注意:**使用 EC2 執行個體或內部部署主機的私有 IP 位址取代 Host_IP,並使用您的連接埠取代 80。為了提高準確度,先前的範例使用 TCP 型追蹤 (T) 來測試通道內流量的路徑。若要測試網際網路流量的路徑,請使用通道的公用 IP 位址取代 Host_IP

您會收到類似下列範例的輸出:

traceroute -T -p 443 aws.com
traceroute to aws.com (3.161.213.43), 30 hops max, 60 byte packets
1 SEA-1801842641.mshome.net (172.28.96.1)  0.363 ms  0.346 ms  0.362 ms
2  192.168.50.1 (192.168.50.1)              5.514 ms  5.508 ms  5.501 ms
3  172.27.232.1 (172.27.232.1)             45.179 ms 52.879 ms 52.871 ms
4                                                  *         *         *
5                                                  *         *         *
6                                                  *         *         *
7                                                  *         *         *
8                                                  *         *         *
9 server.yul62.r.ct.net (3.161.213.43)     57.452 ms 57.741 ms 62.604 ms

此範例輸出會顯示沒有回應的中躍點。雖然裝置沒有在請求的 443 連接埠上回應,但因為目的地仍然正常回應,因此不存在問題。

對於 Windows,請執行 tracert。或者,如果您安裝了 tracetcp,請執行下列 PowerShell 命令:

tracetcp.exe Host_IP:80

**注意:**使用 EC2 執行個體或內部部署主機的私有 IP 位址取代 Host_IP,並使用您的連接埠取代 80。為了提高準確度,先前的範例使用 TCP 型追蹤 (T) 來測試通道內流量的路徑。若要測試網際網路流量的路徑,請使用通道的公用 IP 位址取代 Host_IP

您會收到類似下列範例的輸出:

PS C:\Users\UserA> tracetcp.exe aws.com:443

Tracing route to 18.239.168.29 [server-18-239-168-29.bos50.r.cloudfront.net] on port 443
Over a maximum of 30 hops.
1  5 ms  7 ms  6 ms  192.168.50.1
2  41 ms 42 ms 44 ms 172.27.232.1
3  *     *     *     Request timed out.
4  *     *     *     Request timed out.
5  *     *     *     Request timed out.
6  51 ms 43 ms 45 ms 241.0.11.143
7  62 ms 54 ms 43 ms 241.0.11.135
8  53 ms 53 ms 55 ms 240.4.8.24
9  52 ms 56 ms 53 ms 240.4.8.17
10 56 ms 59 ms 62 ms 240.64.239.162
11 57 ms 56 ms 61 ms 240.64.239.162
12 57 ms 55 ms 57 ms 240.64.239.162
13 58 ms Destination Reached in 54 ms. Connection established to 18.239.168.29
Trace Complete.

測試端對端 TCP 效能

使用 hping3 測試端對端 TCP 封包遺失和延遲。此工具可讓您直接評估主機之間的 TCP 效能。

若要在Amazon Linux 上安裝 hping3,請執行下列命令:

sudo yum --enablerepo=epel install hping3

若要在 Ubuntu 上安裝 hping3,請執行下列命令:

sudo apt-get install hping3

若要執行 hping3,請執行下列命令:

hping3 -S -c 50 -V Host_IP

**注意:**使用 EC2 執行個體或內部部署主機的私有 IP 位址取代 Host_IP,或使用通道的公用 IP 位址加以取代。

下列範例輸出顯示針對使用連接埠 TCP 8443 之 VPN 端點公用 IP 位址的測試:

sudo hping3 -S -c 3 -p 8443 -V 34.233.155.9
using eth0, addr: 172.28.100.111, MTU: 1500
HPING 34.233.155.9 (eth0 34.233.155.9): S set, 40 headers + 0 data bytes
len=44 ip=34.233.155.9 ttl=60 DF id=0 tos=0 iplen=44
sport=8443 flags=SA seq=0 win=26883 rtt=49.6 ms
seq=2996814187 ack=1585541078 sum=22f7 urp=0

len=44 ip=34.233.155.9 ttl=60 DF id=0 tos=0 iplen=44
sport=8443 flags=SA seq=1 win=26883 rtt=49.6 ms
seq=3555645549 ack=1207738370 sum=29a5 urp=0

len=44 ip=34.233.155.9 ttl=60 DF id=0 tos=0 iplen=44
sport=8443 flags=SA seq=2 win=26883 rtt=49.2 ms
seq=4045561197 ack=742863285 sum=f78c urp=0

識別網路或應用程式的問題

發生問題時,在 EC2 執行個體和內部部署主機上同時取得封包擷取。使用封包擷取來識別網路或應用程式的問題。

若要擷取 Linux 執行個體的封包,請使用 tcpdump

若要在 Amazon Linux 上安裝 tcpdump,請執行下列命令:

sudo yum install tcpdump

若要在 Ubuntu 上安裝 tcpdump,請執行下列命令:

sudo apt-get install tcpdump

請針對 Windows 使用 Wireshark,而不是 tcpdump。若要下載工具,請參閱 Wireshark 網站上的下載 Wireshark

封包擷取與下列範例類似:

tcpdump -i any -nnvv port 500 and port 4500
tcpdump: listening on any, link-type EN10MB (Ethernet), capture size 65535 bytes
18:12:54.944933 IP (tos 0x0, ttl 63, id 43082, offset 0, flags [DF], proto UDP (17), length 212)
10.20.20.80.500 > 23.20.145.20.500: [udp sum ok] isakmp 1.0 msgid 00000000 cookie 19e7adeabfefca84→0000000000000000: phase 1 I ident:
(sa: doi=ipsec situation=identity
(p: #1 protoid=isakmp transform=1
(t: #1 id=ike (type=lifetype value=sec)(type=lifeduration value=7080)(type=enc value=aes)(type=keylen value=0080)(type=auth value=preshared)(type=hash value=sha1)(type=group desc value=modp1024))))
(vid: len=16)
(vid: len=16)
(vid: len=16)
(vid: len=16)
(vid: len=16) out slot1/tmm0 lis=$_ike_1061b_out_23.20.145.20 port=1.0 trunk=
18:12:54.946069 IP (tos 0x0, ttl 253, id 56278, offset 0, flags [none], proto UDP (17), length 152)
23.20.145.20.500 > 10.20.20.80.500: [udp sum ok] isakmp 1.0 msgid 00000000 cookie 19e7adeabfefca84→cfa493578af1f691: phase 1 R ident:
(sa: doi=ipsec situation=identity
(p: #1 protoid=isakmp transform=1
(t: #1 id=ike (type=enc value=aes)(type=keylen value=0080)(type=hash value=sha1)(type=group desc value=modp1024)(type=auth value=preshared)(type=lifetype value=sec)(type=lifedura tion value=7080))))
(vid: len=16)
(vid: len=16) in slot1/tmm0 lis= port=1.0 trunk=
18:12:54.949988 IP (tos 0x0, ttl 63, id 43084, offset 0, flags [DF], proto UDP (17), length 256)
10.20.20.80.500 > 23.20.145.20.500: [udp sum ok] isakmp 1.0 msgid 00000000 cookie 19e7adeabfefca84→cfa493578af1f691: phase 1 I ident:
(ke: key len=128)
(nonce: n len=16 data=(e84ae917994501b5b4f4...1a547b3cf720e35995f5b0c69198c9f796b5d9f9))
(pay20)
(pay20) out slot1/tmm0 lis=$_ike_1061a_in_10.20.20.80 port=1.0 trunk=
18:12:54.951858 IP (tos 0x0, ttl 253, id 56279, offset 0, flags [none], proto UDP (17), length 272)
23.20.145.20.500 > 10.20.20.80.500: [udp sum ok] isakmp 1.0 msgid 00000000 cookie 19e7adeabfefca84→cfa493578af1f691: phase 1 R ident:
(ke: key len=128)
(nonce: n len=32 data=(c5170686e88069e33323...4448aaf06cc37d4b32d67df97e275e5756a534d8))
(pay20)
(pay20) in slot1/tmm0 lis=$_ike_1061a_in_10.20.20.80 port=1.0 trunk=

(僅限 Windows) 關閉 ECN

如果您的 Windows 執行個體開啟顯式擁塞通知 (ECN) 功能,則可能會遇到封包遺失或效能問題。

若要檢查 ECN 是否開啟,請執行下列 PowerShell 命令:

netsh interface tcp show global

若要關閉 ECN,請執行下列 PowerShell 命令:

netsh interface tcp set global ecncapability=disabled

相關資訊

為什麼我在使用 Site-to-Site VPN 時,應用程式會出現延遲和效能問題?

Amazon EC2 執行個體層級網路效能指標能為您揭示全新見解

如何疑難排解 Site-to-Site VPN 的低傳輸速度問題?

AWS 官方
AWS 官方已更新 3 個月前