本文介紹如何進行排查能ping通ECS執行個體但連接埠不通的問題。
操作環境
通過用戶端訪問目標ECS執行個體時,如果能ping通ECS執行個體但業務連接埠無法訪問,則可能是鏈路中相關節點對相應連接埠做了攔截所致。您可以參考以下步驟進行排查處理。
步驟一:檢查ECS執行個體安全性群組規則
目標ECS執行個體連接埠不通時,可能是安全性群組規則中未允許存取該連接埠(如80連接埠),您可以參考以下步驟,檢查ECS執行個體安全性群組規則。
登入ECS管理主控台。
在左側導覽列,選擇 。
在頁面左側頂部,選擇目標資源所在的資源群組和地區。
在ECS執行個體列表頁面,單擊目標ECS執行個體ID。
在ECS執行個體詳情頁面,單擊安全性群組頁簽。
在安全性群組列表頁簽下,單擊安全性群組ID。
在安全性群組規則頁面,查看入方向規則是否開放目標連接埠(如80)。
未開放目標連接埠,請添加入方向為目標連接埠的安全性群組規則。具體操作,請參見添加安全性群組規則。
已開放目標連接埠,請執行步驟三:檢查ECS防火牆設定。
步驟二:檢查連接埠監聽狀態及相關服務
目標ECS執行個體連接埠不通時,可能是該服務連接埠未被正常監聽(服務未啟動),您可以參考以下步驟,檢查ECS執行個體安全性群組規則。
Linux執行個體
本操作以CentOS 7.9為例,其他版本的Linux系統操作可能有所差異。
遠端連線Linux執行個體。
具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體。
執行如下命令,查看連接埠是否正常被監聽。
netstat -an | grep [$Port] # [$Port]請替換為實際的連接埠號碼
如果返回如下資訊,則說明80連接埠被正常監聽,請繼續執行步驟三:檢查ECS防火牆設定。
如果返回的不是以上資訊,表示80連接埠未處於監聽狀態(服務未啟動)。您需要重啟該服務,若服務重啟還是未解決問題,請繼續執行步驟三:檢查ECS防火牆設定。
Windows執行個體
本操作以Windows Server 2012為例,其他版本的Windows Server系統操作類似。
遠端連線Windows執行個體。
具體操作,請參見使用Workbench工具以RDP協議登入Windows執行個體。
在Windows PowerShell中執行如下命令,查看連接埠是否正常被監聽。
netstat -ano | findstr "[$Port]" # [$Port]請替換為實際的連接埠號碼
如果返回如下資訊,則說明80連接埠被正常監聽,請繼續執行檢查ECS防火牆設定。
如果返回的不是以上資訊,表示80連接埠未處於監聽狀態(服務未啟動)。您需要重啟該服務,若服務重啟還是未解決問題,請繼續執行檢查ECS防火牆設定。
步驟三:檢查ECS防火牆設定
目標ECS執行個體連接埠不通時,可能是ECS防火牆攔截了該連接埠,您可以參考以下步驟,檢查ECS執行個體防火牆設定。
Linux執行個體
本操作以CentOS 7.9為例,其他版本的Linux系統操作可能有所差異。
遠端連線Linux執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
執行如下命令,查看防火牆狀態。
systemctl status firewalld
如果回顯中出現
Active: inactive (dead)
資訊,說明防火牆處於關閉狀態,無需再進行任何操作。如果回顯中出現
Active: active (running)
資訊,說明防火牆已開啟,請繼續執行步驟3。
執行如下命令,查看防火牆中已開放的連接埠。
firewall-cmd --list-all
如果回顯中出現ports: 80/tcp資訊,說明防火牆規則中已允許存取80連接埠,無需再進行任何操作。
如果回顯中沒有ports: 80/tcp資訊,請執行如下命令,允許存取80連接埠。
firewall-cmd --zone=public --add-port=80/tcp --permanent
若返回結果為
success
,表示已經允許存取TCP 80連接埠。
Windows執行個體
本操作以Windows Server 2012為例,其他版本的Windows Server系統操作類似。
遠端連線Windows執行個體。
具體操作,請參見通過密碼或密鑰認證登入Windows執行個體。
單擊左下角的
表徵圖,開啟伺服器管理。
選擇右上方的工具(T)>進階安全 Windows防火牆。
查看防火牆狀態。
如果防火牆處於關閉狀態,無需進行任何操作。
如果防火牆狀態為已啟用,請繼續以下操作。
在進階安全 Windows防火牆頁面,單擊入站規則。
查看Windows 遠端管理-相容模式(HTTP-In)的狀態。
如果協議已啟動,無需進行任何操作。
如果該規則未啟用,請按右鍵該規則,然後單擊啟用規則(E)。
步驟四:通過探測工具進行檢查
本地用戶端無法訪問連接埠可能是鏈路中的相關節點攔截了連接埠所致,請利用連接埠可用性探測工具進行測試,驗證是否有節點攔截了連接埠。
使用連接埠可用性探測工具
本地用戶端為Linux系統
Linux系統中,通常可以通過traceroute來進行連接埠可用性探測。traceroute用於跟蹤Internet協議(IP)資料包傳送到目標地址時經過的路由,通過發送TCP資料包向目標連接埠進行探測,以檢測從資料包源到目標伺服器的整個鏈路上相應連接埠的連通性情況。
安裝traceroute
sudo yum install -y traceroute
traceroute命令
常用traceroute命令格式如下所示。
traceroute [-n] -T -p <目標連接埠號碼> <Host>
-n:直接使用IP地址而非主機名稱(禁用DNS反查)。
-T:通過TCP探測。
-p:設定探測的連接埠號碼。
<目標連接埠號碼>:需要探測的連接埠號碼,比如80。
<Host>:需要探測的目標伺服器地址,比如
192.168.XXX.XXX
。
測試樣本
traceroute的樣本命令和返回結果如下:
[test@centos~]# traceroute -n -T -p 22 223.5.XXX.XXX
traceroute to 223.5.XXX.XXX (223.5.XXX.XXX), 30 hops max, 60 byte packets
1 5X.X.X.X 0.431 ms 0.538 ms 0.702 ms
2 10.88.XXX.XXX 0.997 ms 1.030 ms 10.88.XXX.XXX 1.309 ms
3 58.96.XXX.XXX 0.393 ms 0.390 ms 58.96.XXX.XXX 0.423 ms
4 202.123.XXX.XXX 1.110 ms 202.123.XXX.XXX 0.440 ms 0.440 ms
5 63.218.XXX.XXX 1.744 ms 63.218.XXX.XXX 1.076 ms 1.232 ms
6 63.223.XXX.XXX 1.832 ms 63.223.XXX.XXX 1.663 ms 63.223.XXX.XXX 1.616 ms
7 63.223.XXX.XXX 2.776 ms 63.223.XXX.XXX 1.585 ms 1.606 ms
8 * * 202.97.XXX.XXX 2.537 ms
9 202.97.XXX.XXX 6.856 ms * *
10 * * *
11 * * *
12 * * 119.147.XXX.XXX 8.738 ms
13 119.147.XXX.XXX 8.248 ms 8.231 ms *
14 * 42.120.XXX.XXX 32.305 ms 42.120.XXX.XXX 29.877 ms
15 42.120.XXX.XXX 11.950 ms 42.120.XXX.XXX 23.853 ms 42.120.XXX.XXX 29.831 ms
16 42.120.XXX.XXX 11.007 ms 42.120.XXX.XXX 13.615 ms 42.120.XXX.XXX 11.956 ms
17 42.120.XXX.XXX 21.578 ms 42.120.XXX.XXX 13.236 ms *
18 * * 223.5.XXX.XXX 12.070 ms !X
本地用戶端為Windows系統
在Windows系統中,您可通過tracetcp進行連接埠可用性探測。tracetcp同樣通過發送TCP資料包進行鏈路探測,以分析鏈路是否存在中間節點對目標連接埠做了阻斷。
安裝tracetcp
在WinPcap官網下載並安裝WinPcap library。
在tracetcp官網下載tracetcp。
將下載的tracetcp解壓到
C:\Windows
目錄下。重要如果解壓到非系統目錄,則需要手動修改系統內容變數,以確保指令可以直接調用。
使用方法
在Windows PowerShell或cmd命令列中輸入tracetcp命令,常用tracetcp命令格式如下所示。
tracetcp <IP>:<Port>
<IP>:指目標伺服器的IP地址或者網域名稱。
<Port>:指需要探測的目標連接埠。
關於更多tracetcp參數說明,您可以通過tracetcp -?
命令查看協助。
測試樣本
tracetcp的樣本命令和返回結果如下:
C:\ >tracetcp www.aliyun.com:80
Tracing route to 140.205.XX.8 on port 80
Over a maximum of 30 hops.
1 3 ms 4 ms 3 ms 10.102.XXX.XXX
2 13 ms 3 ms 4 ms 10.102.XXX.XXX
3 3 ms 3 ms 2 ms 140.205.XXX.XXX
4 4 ms 3 ms 3 ms 180.163.XXX.XXX
5 5 ms 4 ms 7 ms 101.95.XXX.XXX
6 6 ms 5 ms 7 ms 124.74.XXX.XXX
7 8 ms 8 ms 8 ms 124.74.XXX.XXX
8 10 ms 10 ms 8 ms 114.80.XXX.XXX
9 9 ms 9 ms 11 ms 42.120.XXX.XXX
10 * * * Request timed out.
11 Destination Reached in 8 ms. Connection established to 140.205.XXX.XXX
Trace Complete.
探測結果的案例分析
當相關連接埠在某一跳被阻斷,則之後各跳均不會有返回資料,據此就可以判斷出異常節點。您可以根據相應節點資訊,在淘寶IP地址庫查詢歸屬電訊廠商進行問題反饋。
案例一:
探測結果:目標連接埠在第3跳之後就沒有資料返回,說明相應連接埠在該節點被阻斷。
探測結果分析:經查詢該節點為內網IP,所以推斷是本網相關安全性原則所致,需要聯絡本網管理部門做進一步排查分析。
C:\> tracetcp www.aliyun.com:135
Tracing route to 115.102.XXX.XXX on port 135
Over a maximum of 30 hops.
1 3 ms 3 ms 3 ms 10.102.XXX.XXX
2 4 ms 3 ms 3 ms 10.102.XXX.XXX
3 3 ms 3 ms 3 ms 140.205.XXX.XXX
4 * * * Request timed out.
5 * * * Request timed out.
6 * * * Request timed out.
7 * * * Request timed out.
8 * * * Request timed out.
9 * * * Request timed out.
10 * * * Request timed out.
11 * * * Request timed out.
12 * * * Request timed out.
Trace Complete.
案例二
探測結果:探測結果如下,目標連接埠在第11跳之後就沒有資料返回,說明相應連接埠在該節點被阻斷。
探測結果分析:經查詢該節點歸屬北京移動,需要您自行向電訊廠商反饋。
[root@mycentos ~]# traceroute -T -p 135 www.baidu.com
traceroute to www.baidu.com (111.13.XXX.XXX), 30 hops max, 60 byte packets
1 * * *
2 111.13.XXX.XXX (111.13.XXX.XXX) 4.115 ms 4.397 ms 4.679 ms
3 112.15.XXX.XXX (112.15.XXX.XXX) 901.921 ms 902.762 ms 902.338 ms
4 200.35.XXX.XXX (200.35.XXX.XXX) 2.187 ms 1.392 ms 2.266 ms
5 * * *
6 58.200.XXX.XXX (58.200X.XXX.XXX) 1.688 ms 1.465 ms 1.475 ms
7 63.128.XXX.XXX (63.128.XXX.XXX) 27.729 ms 27.708 ms 27.636 ms
8 * * *
9 * * *
10 200.38.XXX.XXX (200.38.XXX.XXX) 28.922 ms 200.38.XXX.XXX (200.38.XXX.XXX) 29.030 ms 28.916 ms
11 204.35.XXX.XXX (204.35.XXX.XXX) 29.169 ms 28.893 ms 204.35.XXX.XXX (204.35.XXX.XXX) 30.986 ms
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *