本文介绍Windows实例不能正常通过外部网络访问的处理方法。
阿里云提醒您:
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
用户从外部访问Windows实例时,发现无法ping
通、无法访问业务、或者无法telnet
到业务监听的端口。从公网客户端访问到阿里云ECS会经过多跳网络链路,此类网络不通有非常多的可能原因,此处介绍如下几种可能。
根据以上问题原因,此处分别介绍通过逐步排查和抓网络包分析两种处理方法。
请根据现场情况,选择以下合适的排查步骤。
ipconfig all
命令检查网卡配置是否正确。在 运行 中,输入ncpa.cpl
打开网络共享与管理中心,检查网卡状态是否正常收发。route print
命令检查Windows实例路由表,查看Active路由中是否配置正确。nslookup
或ping
命令检查是否有DNS解析问题。提示:关于PING命令检查,请参考 在ECS实例的Windows服务器PING外网提示一般故障处理方法。
提示:检查Windows实例性能问题,请参考 Windows系统内存分析工具的介绍。
netstat -ano | findstr [$Prot]
注:[$Prot]为需要查看的端口号。
提示:通过管理员权限打开Windows实例命令行。
netsh int tcp set global chimney=disabled
netsh int tcp set global RSS=disabled
netsh int ip set global taskoffload=disabled
netsh int tcp set global ecncapability=disabled #仅对Windows Server 2012操作系统版本有效
注:
- 上述命令执行的功能,只是为Windows实例的系统提高性能与网卡硬件协同提供的高级功能,禁用后不会对系统有影响,后无需重启实例或系统。如果需要恢复默认设置,请替换以上命令的
disabled
为enabled
,并再次执行即可。- Windows Server 2012引入的新功能ECN(Explicit Congestion Notification)根据RFC规定来减少网络包重传的机制,但是由于国内某些ISP封杀此类的SYN包,导致目标机器无法收到带有ECN标志的SYN包,Windows机器在发送2次ECN包没有得到响应后(第一次重传3秒,第二次重传6秒),会采用没有ECN标志位的SYN包,后续可以连接成功。如果遇到很久才能建立公网访问连接的情况,请禁用该功能后测试。更多ECN说明请参考文档Delays when you print from a server that's running Windows Server 2012。
Route Print
命令检查Windows实例的路由表,查看Active路由中是否配置正确,检查与网关通信是否正常。
通过Wireshark工具进行网络抓包分析,分别在客户端、阿里IDC入口处和Windows实例三个抓包点,进行抓取网络包,并提交全部抓取的网络包给阿里云技术支持分析,包括客户端MTR到Windows实例的输出结果和Windows实例MTR到客户端的输出结果,也一并提交阿里云技术支持。关于Wireshark工具的使用说明,请参考其官方文档。抓包点图例分析如下。