windows服务器网络正常,无法访问外站(动态端口耗尽)

问题描述

Windows服务器网络配置正常,外部可正常访问,但服务器内部无法上网或连接外部主机。Ping外部IP可达,但Telnet外部IP指定端口不通。防火墙和安全组均未限制相关通信,重启服务器后问题可缓解。image

问题原因

说明

Windows Vista开始,Windows不再限制TCP连接数。因此,当无法访问Windows时,无需考虑连接数的问题。

动态端口耗尽会导致服务器在访问外部主机时出现问题,但不会影响外部主机访问该服务器。例如,远程连接到Windows仍然正常,但Windows激活可能会受到影响(无法访问KMS)。这种情况通常会在Windows系统日志中出现与TCP/IP相关的记录。

排查步骤

  1. Windows系统里查看事件查看器的系统日志,系统日志可以看到如下记录,是因为Windows系统本地端口耗尽,导致无法建立TCP连接,无法访问外部网络。image

  2. 为了遵守Internet 分配的号码授权机构 (IANA)建议, Microsoft 增加了传出连接的动态客户端端口范围。 新的默认起始端口为49152, 新的默认结束端口为65535。 这是从使用默认端口范围10255000的较早版本的Windows的配置的更改。

    可以使用以下netsh命令查看计算机上的动态端口范围:

    netsh int ipv4 show dynamicport tcp
    netsh int ipv4 show dynamicport udp
    netsh int ipv6 show dynamicport tcp
    netsh int ipv6 show dynamicport udp

    image

  3. 可以通过netstat -q命令查看系统连接情况。image

解决方案

CMD命令窗口中,使用下面命令设置 TCP 的动态端口范围。 可以设置的最小端口范围为255。 可以设置的最小起始端口为1025。 最大结束端口(基于配置的范围)不能超过65535。

netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range

示例命令将动态端口范围设置为从端口10000开始,到端口10999(1000 端口)结束。

netsh int ipv4 set dynamicport tcp start=10000 num=1000
netsh int ipv4 set dynamicport udp start=10000 num=1000
netsh int ipv6 set dynamicport tcp start=10000 num=1000
netsh int ipv6 set dynamicport udp start=10000 num=1000

更多信息