无法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网络七层模型简明教程

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