【推荐】 ECS Windows从外部访问网络不通的处理

  • A+
所属分类:Windows
高性能企业级服务器首台5折

问题现象


用户从外部访问ECS Windows 主机时,发现无法ping通、无法访问业务、或者无法telnet到业务监听的端口。

可能原因


考虑到从公网客户端访问到阿里云ECS会经过多跳网络链路,此类网络不通有非常多的可能原因:

  • 公网客户端的自身网络问题
  • 公网ISP运营商的劫持或者封堵
  • 公网客户端访问的异常行为、或者ECS Windows的安全原因导致阿里云安全策略封堵
  • ECS Windows安全组的错误配置
  • ECS 账号欠费
  • ECS Windows系统性能问题
  • ECS Windows上业务服务未监听或者服务状态异常
  • ECS Windows上防火墙的阻挡
  • ECS Windows安装的三方杀毒软件的阻挡
  • ECS Windows被病毒、木马影响
  • ECS Windows TCP/IP协议栈自身bug或者兼容性问题导致
  • ECS Windows 安装了路由与远程服务后,错误的配置可能影响网络通信
  • ECS Windows 路由表、网络配置错误

跟进方案


对于Windows ECS涉及到的网络问题,我们推荐采用如下2大步骤来排查:

1、最佳实践


根据如上的可能原因,通过对比测试来逐个排除。

<1> 检查仅仅是单个客户端有问题,还是多个客户端均有问题来排除问题是否与特定客户端有关联。
如果仅仅是特定网段客户端有问题,请检查云盾是否有拦截行为或者公网客户端的网络是否有问题。

<2> 检查是否仅仅是特定运营商的访问有问题,如果是,说明很可能跟运营商封堵劫持有关。

<3> 检查ECS Windows上运行的服务对应端口是否有在正确监听。
Linux 命令: netstat -npl |grep n(n为需要查看的端口号)
Windows命令: netstat -ano | findstr n(n为需要查看的端口号)

上图显示监听 IP 为0.0.0.0,说明所有网卡均监听在TCP 445端口上。
如果对应的服务端口没有监听,请检查对应的应用配置和运行状态。

<4> 检查ECS账号是否有欠费。

<5> 检查ECS 安全组是否有配置错误,更改安全组配置允许所有网络通信进行测试。

<6> 检查ECS Windows是否有性能问题,例如CPU高,内存耗尽,带宽占用满、网络动态端口耗尽。

<7> 尝试禁用ECS Windows的防火墙策略,检查是否可以通信。

<8> 尝试禁用或者卸载ECS Windows的三方杀毒软件,检查问题是否发生。
关于三方杀毒软件的影响,请参考知识点 ECS Windows三方杀毒防护软件的可能问题以及使用建议

<9> 请运行Windows Update,安装最新版本的补丁以排除操作系统TCP/IP协议栈自身问题。

<10 >在ECS Windows上运行如下命令来禁用Windows TCP Chimney,RSS, IP Offload等高级功能来排除网卡兼容性问题
使用管理员身份运行CMD

  1. 1
    2
    3
    4
    <span class="pln">netsh </span><span class="kwd">int</span><span class="pln"> tcp </span><span class="kwd"><span class="hljs-builtin-name">set</span></span> <span class="kwd">global</span><span class="pln"> <span class="hljs-attribute">chimney</span></span><span class="pun">=</span><span class="pln">disabled </span>
    <span class="pln">netsh </span><span class="kwd">int</span><span class="pln"> tcp </span><span class="kwd"><span class="hljs-builtin-name">set</span></span> <span class="kwd">global</span><span class="pln"> <span class="hljs-attribute">RSS</span></span><span class="pun">=</span><span class="pln">disabled </span>
    <span class="pln">netsh </span><span class="kwd">int</span><span class="pln"><span class="hljs-built_in"> ip </span></span><span class="kwd"><span class="hljs-builtin-name">set</span></span> <span class="kwd">global</span><span class="pln"> <span class="hljs-attribute">taskoffload</span></span><span class="pun">=</span><span class="pln">disabled </span>
    <span class="pln">netsh </span><span class="kwd">int</span><span class="pln"> tcp </span><span class="kwd"><span class="hljs-builtin-name">set</span></span> <span class="kwd">global</span><span class="pln"> <span class="hljs-attribute">ecncapability</span></span><span class="pun">=</span><span class="pln">disabled </span><span class="pun">(仅对</span><span class="typ">Windows</span> <span class="lit">2012</span> <span class="pun">有效)</span>

注:上述功能是Windows为了提高性能与网卡硬件协同提供的高级功能,禁用后不会对系统有影响,禁用后无需重启。

如果需要恢复默认设置,请运行

  1. 1
    2
    3
    4
    <span class="pln">netsh </span><span class="kwd">int</span><span class="pln"> tcp </span><span class="kwd"><span class="hljs-builtin-name">set</span></span> <span class="kwd">global</span><span class="pln"> <span class="hljs-attribute">chimney</span></span><span class="pun">=</span><span class="pln">enabled</span>
    <span class="pln">netsh </span><span class="kwd">int</span><span class="pln"> tcp </span><span class="kwd"><span class="hljs-builtin-name">set</span></span> <span class="kwd">global</span><span class="pln"> <span class="hljs-attribute">RSS</span></span><span class="pun">=</span><span class="pln">enabled</span>
    <span class="pln">netsh </span><span class="kwd">int</span><span class="pln"><span class="hljs-built_in"> ip </span></span><span class="kwd"><span class="hljs-builtin-name">set</span></span> <span class="kwd">global</span><span class="pln"> <span class="hljs-attribute">taskoffload</span></span><span class="pun">=</span><span class="pln">enabled</span>
    <span class="pln">netsh </span><span class="kwd">int</span><span class="pln"> tcp </span><span class="kwd"><span class="hljs-builtin-name">set</span></span> <span class="kwd">global</span><span class="pln"> <span class="hljs-attribute">ecncapability</span></span><span class="pun">=</span><span class="pln">enabled </span><span class="pun">(仅对</span><span class="typ">Windows</span> <span class="lit">2012</span> <span class="pun">有效)</span>

注:Windows 2012 引入的新功能ECN(Explicit Congestion Notification)根据RFC规定来减少网络包重传的机制,但是由于国内某些ISP封杀此类的SYN包,导致目标机器无法收到带有ECN标志的SYN包,Windows机器在发送2次ECN包没有得到响应后(第一次重传3秒,第二次重传6秒),会采用没有ECN标志位的SYN包,后续可以连接成功。如果遇到很久才能建立公网访问连接的情况,请禁用该功能后测试。

<11> 请使用Route Print命令检查ECS Windows的路由表,查看Active 路由中是否配置正确,检查与网关通信是否正常。

2、网络抓包分析


如果通过上述最佳实践仍然无法定位问题,或者需要证据来证明问题点,最好的方法是逐跳抓包来分析网络包的行为。
一般我们建议同时在3个点进行抓包来定位问题是在ISP链路侧还是阿里云IDC内部问题。

抓包点1:客户端
抓包点2:阿里IDC入口处(联系售后完成)
抓包点3: ECS上抓包
注:务必在如上3个点,在问题发生情况下同时抓包。

请将抓取到的网络包发送给我们排查分析,同时也请将从公网客户端MTR到ECS Windows的输出,以及ECS Windows MTR到公网客户端的输出发给我们参考。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: