無法telnet通windows服務器80端口的解決辦法

背景

問題症狀:

測試線上域名david.domain.com對應的服務器(Nginx1.12實現, 111.111.111.111) 通過中轉機(111.111.111.112), 調用線下機器(192.201.4.53)上部署的微服務接口SpringCloud體系, 含Zuul Gateway, Eureka, MicroService)時.
發現對於中轉機,無法ping通, 也無法telnet通.

機器信息

類型 功能 IP
線上Nginx 反向代理 111.111.111.111
中轉機 部署了nginx服務(80端口對外服務), 中轉線上微服務請求至線下微服務體系中,win08服務器 111.111.111.112
微服務 線下提供微服務API 192.201.4.53

逐步排查

①. 檢查線下微服務是否正常

MicroService訪問方式 樣例
直接訪問 http://192.201.4.53:8005/personalRcommend/getHotSaleTest
通過Gateway 訪問 http://192.201.4.53:8900/ds/rec/personalRcommend/getHotSaleTest 或http://192.201.4.53:8900/ds/rec/info(僅獲取微服務簡短服務可用與否的信息)

測試下來,沒有問題, 說明底層微服務狀態良好, 排除線上微服務服務異常問題.

②. 檢查中轉機至線下機器是否正常

在瀏覽器中輸入, 走中轉機服務器路徑的如下接口URL:

http://111.111.111.112/ds/rec/info

發現服務異常, 說明中轉機至線下的http請求(底層爲tcp協議)有問題. 但通過ping(底層爲icmp協議)命令,如下, 可以ping通線下機器.

G:\Software\nginx-1.14.2>ping 192.201.4.53

正在 Ping 192.201.4.53 具有 32 字節的數據:
來自 192.201.4.53 的回覆: 字節=32 時間<1ms TTL=61
來自 192.201.4.53 的回覆: 字節=32 時間<1ms TTL=61
來自 192.201.4.53 的回覆: 字節=32 時間=1ms TTL=61
來自 192.201.4.53 的回覆: 字節=32 時間<1ms TTL=61

192.201.4.53 的 Ping 統計信息:
    數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒爲單位):
    最短 = 0ms,最長 = 1ms,平均 = 0ms

說明, 中轉機可以訪問到測試機器, 但通過中轉機的nginx服務(入站規則:80端口)無法訪問到線下資源.

中轉機nginx(windows版本)配置:

	upstream micro_service_server {
		server 192.201.4.53:8900;
    }

    server {
        #......
		location /ds/rec/ {
			proxy_pass http://micro_service_server/ds/rec/;
        }
		#......
    }

③. 檢查線上至中轉機是否正常

線上服務器上, 執行telnet到中轉機nginx服務的操作:

[david_admin@server111-111 ~]$ telnet 111.111.111.112 80
Trying 111.111.111.112...
telnet: connect to address 111.111.111.112: Connection timed out

telnet(底層爲tcp協議)失敗, 說明線上連接至跳板機的80端口有異常.

線上Nginx(Linux版本)配置:

location /ds/rec/ {
	proxy_pass  http://111.111.111.112/ds/rec/;
}

④. 總結

②/③等排查步驟, 都說明了中轉機在使用tcp服務(連接 或 端口)提供承上啓下的中繼服務時,出現異常. 考慮到中轉機在nginx上使用80端口對外提供服務, 故猜想是否可以在中轉機側配置防火牆入站規則, 使得使用80端口的http請求可以被放行.

解決方案:
Windows防火牆設置端口白名單
詳見文末"參考列表".

配置之後測試, 發現問題得以解決, 線上telnet 中轉機的 80端口 已正常, 但還是無法ping通 中轉機.

注意:
由於telnet 和 ping 走了不同的網絡協議, 本例中出現不能ping通中轉機, 但能telnet通中轉機的80端口的情況是正常的.

附錄:

①. 不同軟件的協議使用情況
ping / telnet / tracert 命令使用的協議棧, 如下 :

協議名 使用協議類型 使用樣例
telnet tcp telnet 192.168.1.100 80
ping icmp ping www.csdn.net 或ping 192.168.1.101
tracert icmp tracert 192.168.1.102

Tips:
ICMP全稱Internet Control Message Protocol,中文名爲因特網控制報文協議。它工作在OSI的網絡層,向數據通訊中的源主機報告錯誤。

②. TCP在網絡模型層中的位置

OSI 模型把網絡通信的工作分爲 7 層,從下到上分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。

OSI 只是存在於概念和理論上的一種模型,它的缺點是分層太多,增加了網絡工作的複雜性,所以沒有大規模應用。後來人們對 OSI 進行了簡化,合併了一些層,最終只保留了 4 層,從下到上分別是接口層、網絡層、傳輸層和應用層,這就是大名鼎鼎的 TCP/IP 模型。

如下圖所示, TCP協議均位於兩種模型中的<傳輸層>.
在這裏插入圖片描述

參考列表
-Windows2008防火牆怎麼設置端口例外
-OSI網絡七層模型簡明教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章