Skip to main content

nat会话数60万对hyper-v服务器及路由器进行的优化操作

#从你贴出的结果来看,这些配置都已经生效了,而且从 问题根因总结Windows **NAT在前端两台路由器做端口映射NAT,单台路由器硬件NAT上限40万会话;晚高峰总NAT≈60万,两台负载不均,其中一台路由器NAT会话触达40万硬件上限,新连接被丢弃、存量连接老化断开,造成外网上传大量丢连接。**Server >2025 60万总会话>单台40万阈值,负载不均衡时单路由打满上限,就是断连元凶,+ Hyper-V侧是流量承载端,次要优化。V ##+ 一、路由器侧核心整改(优先做,根治瓶颈)万兆网络 ###+ 大量虚拟机通信 的场景来看,总体是合理的。

当前状态分析

1. 两台路由器做NAT负载分担(必做)TCP 当前60万NAT会话,**两台路由均分:每台30万<40万单台上限**,彻底避开硬件NAT阈值。动态端口范围

1.

修改前:

组网现状:路由器做端口映射(目的NAT
49152-65535
DNAT)+外网源IP共16384个端口
SNAT,两台上联汇聚到锐捷交换机,下联Hyper-V宿主机。

修改后:

1025-65535
共64511个端口

验证:

netsh int ipv4 show dynamicport tcp

结果:

启动端口 : 1025
端口数   : 64511

说明已生效。

适用于:

    Hyper-V主机

    数据同步服务器

    大量TCP短连接

    IIS/Nginx反向代理

    RabbitMQ

    MongoDB/MySQL同步

    可显著降低临时端口耗尽风险。


    2. 负载分担方案二选一:UDP ####动态端口范围

    方案A:基于源IP哈希分流(最省事,现有拓扑不改)

    你又执行了:

    前端两台路由做**等价路由ECMP**,外网回包、入方向上传流量根据外网源IP哈希,自动分摊DNAT/NAT会话到两台路由器。
    netsh int ipv4 set dynamicport udp start=1025 num=64511
    

    验证:

    启动端口 : 1025
    端口数   : 64511
    

    已生效。

    对于:

      DNS

      SIP

      SNMP

      VXLAN

      某些监控系统

      有帮助。


      3. TCP Auto-Tuning

      修改前:

      接收窗口自动调节级别 : disabled
      

      修改后:

      接收窗口自动调节级别 : normal
      

      对于万兆环境建议保持:

      normal
      

      不要改成:

      experimental
      

      微软官方也不推荐生产环境使用 experimental。


      4. RFC1323 Timestamp

      当前:

      RFC 1323 时间戳 : allowed
      

      这里不是 enabled,而是:

      allowed
      

      表示:

      可以协商使用
      但不会强制使用
      

      这是 Windows Server 2022/2025 的正常默认值。

      建议保持:

      allowed
      

      不要改 disabled。

      原因:

        SMB3

        Hyper-V Live Migration

        高带宽高延迟链路

        会受益于 Timestamp。


        5. ECN

        当前:

        ECN 功能 : enabled
        

        这个比较特殊。

        ECN(Explicit Congestion Notification)用于网络拥塞通知。

        优点:

        减少丢包
        提高吞吐
        

        缺点:

        某些旧交换机
        某些旧防火墙
        某些运营商设备
        兼容性不好
        

        如果你网络里有:

          老华为交换机

          老H3C交换机

          老防火墙

          建议改回:

          netsh int tcp set global ecncapability=disabled
          

          如果全是新设备,可以保持 enabled。


          关于 winnat

          你执行:

          net stop winnat
          

          返回:

          没有启动 Windows NAT Driver 服务
          

          这是正常的。

          说明当前主机没有使用:

          Hyper-V NAT
          Docker NAT
          Container NAT
          

          至少没有启用 WinNAT。

          无需处理。


          我建议你再检查两个关键项

          查看端口耗尽情况

          PowerShell:

          Get-NetTCPConnection | Measure-Object
          

          查看当前连接数。


          查看 TIME_WAIT 数量

          netstat -ano 交换机配置两条等价默认路由指向两台路由器,实现入向流量负载均衡;| -find 效果:60万会话自动打散,单路由承载30W左右,低于40W硬件上限。/c ####"TIME_WAIT"
          方案B:端口段拆分DNAT映射(固定分流)
          把外网端口段拆分:

          如果经常超过:

          -
          10000+
          路由器A:映射外网端口段1~30000

          甚至:

          30000+
          

          那么扩大动态端口范围就非常有价值。


          针对你的 Hyper-V内网业务V -宿主机

          路由器B:映射外网端口段30001~65535

          我建议最终配置如下:

          netsh Hyper-V内网业务int 流量天然按端口分到两台路由,会话天然均分。tcp ###set 2.global 路由器NAT老化优化(快速回收空闲会话,临时应急) 两台路由器统一缩短空闲NAT老化时间,快速释放僵尸空会话,腾出硬件表项: ```ios # 通用路由器命令参考(华为/锐捷/华三通用逻辑) ip nat translation timeout 300 # TCP空闲5分钟老化 ip nat translation udp-timeout 60 # UDP空闲1分钟老化 ``` 作用:避免无效连接长期占用NAT表,防止会话堆积快速碰40W上限。 ### 3. 路由器NAT超限保护配置 开启路由器NAT超限丢弃新连接保护,满40W后不再疯狂挤占存量会话: ```ios # 限制单设备NAT最大会话,防止单个恶意IP占满表项 ip nat limit per-host 8000 # 整机NAT告警阈值设35万,提前预警 ``` ## 二、Windows Hyper-V宿主机配套优化(解决内网侧次生瓶颈,你之前网卡+端口问题) ### 1. TCP动态端口扩容(已查到默认仅16384源端口,必须扩容) 管理员CMD执行,把TCP临时端口从1.6W扩容至6.4W,内网虚拟机大量出站不缺端口: ```cmdautotuninglevel=normal
          
          netsh int ipipv4 set dynamicport tcp start=1025 num=64511
          
          netsh int ipipv4 showset dynamicport udp start=1025 num=64511
          
          netsh int tcp ```set ###global 2.timestamps=enabled
          Intel
          82599万兆网卡高级参数固定配置(

          或者保持当前:

          RFC1323 时间戳 : allowed
          

          即可。

          如果你这台服务器承担 20 个以上 Hyper-V高并发最优)V |虚拟机,并且有 参数MySQL、MongoDB、RabbitMQ、文件同步等大量东西南北向流量,我还建议检查:

          |
          Get-NetAdapterRss
          配置值Get-NetAdapterRsc
          |Get-NetAdapterAdvancedProperty
          作用
          |

          看看万兆网卡是否开启了:

          |
          ---- | ---- | ---- | |

          RSS(Receive Side Scaling(RSS)Scaling)

          | Enabled | 开启多队列中断分流 | | RSS load balancing profile | **NUMAScalingStatic** | NUMA静态均分RSS队列,多核均衡,杜绝单核满载丢包 | |

          VMQ(Virtual Machine Queues(VMQ)Queue)

          | Enabled |

          VMMQ(Virtual Machine Multi Queue)

          RSC(Receive Segment Coalescing)

          这些优化对 Hyper-V虚拟机队列,vSwitch转发硬件分流,海量虚拟机互访不堵V |的收益往往比修改 |TCP RX/TX Receive/Transmit Buffers | 拉到最大值 | 加大网卡硬件缓存,突发上传报文不溢出丢弃 | | TCP/UDP Checksum Offload | 全部Enabled | 校验卸载下放网卡,节省宿主机CPU | > 改完网卡参数后,Hyper-V虚拟交换机属性勾选**启用虚拟机队列(VMQ)**,和网卡硬件配置联动。 ### 3. Windows系统连接跟踪优化(RRAS/防火墙conntrack) 注册表路径:`HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy` 新建DWORD:`MaxNATEntries`,十进制=**2000000(200万)**,放开Windows系统连接跟踪上限; PowerShell执行: ```powershell Set-NetNatGlobal -ConcurrentConnectionCountThreshold 2000000 ``` ## 三、临时应急&验证步骤 1. **应急:先改路由器NAT老化时间**,当晚高峰立刻减少存量会话堆积; 2. **短期:交换机配置ECMP等价路由实现NAT两台均分**,60W→每台30W<40W硬件上限,彻底解决超限断连; 3. **长期:Hyper-V主机优化端口+网卡RSS+注册表NAT上限**,消除内网侧次生瓶颈。 ## 补充关键说明 1. 断连**主瓶颈在前端路由器单台NAT硬件40万上限、负载不均**,Windows Hyper-V是次要瓶颈; 2. 外网上传流量是**DNAT目的地址转换**,会话全部占用前端路由器NAT表,和后端交换机、宿主机NAT无关; 3. 若两台路由现在负载差距极大(一台38W、一台22W),就是路由引流不均,ECMP分流是最优解。参数更明显。