Skip to main content

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

从你贴出的结果来看,这些配置都已经生效了,而且从 Windows Server 2025 + Hyper-V + 万兆网络 + 大量虚拟机通信 的场景来看,总体是合理的。

当前状态分析

1. TCP 动态端口范围

修改前:

49152-65535
共16384个端口

修改后:

1025-65535
共64511个端口

验证:

netsh int ipv4 show dynamicport tcp

结果:

启动端口 : 1025
端口数   : 64511

说明已生效。

适用于:

  • Hyper-V主机

  • 数据同步服务器

  • 大量TCP短连接

  • IIS/Nginx反向代理

  • RabbitMQ

  • MongoDB/MySQL同步

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


2. UDP 动态端口范围

你又执行了:

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 /c "TIME_WAIT"

如果经常超过:

10000+

甚至:

30000+

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


针对你的 Hyper-V 宿主机

我建议最终配置如下:

netsh int tcp set global autotuninglevel=normal

netsh int ipv4 set dynamicport tcp start=1025 num=64511

netsh int ipv4 set dynamicport udp start=1025 num=64511

netsh int tcp set global timestamps=enabled

或者保持当前:

RFC1323 时间戳 : allowed

即可。

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

Get-NetAdapterRss
Get-NetAdapterRsc
Get-NetAdapterAdvancedProperty

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

  • RSS(Receive Side Scaling)

  • VMQ(Virtual Machine Queue)

  • VMMQ(Virtual Machine Multi Queue)

  • RSC(Receive Segment Coalescing)

这些优化对 Hyper-V 的收益往往比修改 TCP 参数更明显。

从你提供的数据来看,这台 Windows Server 2025 Hyper-V 宿主机 的网络配置整体比较健康,没有发现明显异常。

一、当前TCP连接数

Get-NetTCPConnection | Measure-Object

Count : 203

只有:

203个TCP连接

对于:

  • Hyper-V宿主机

  • 20多个虚拟机

  • 万兆网络

来说非常低。

因此:

netsh int ipv4 set dynamicport tcp start=1025 num=64511

实际上暂时用不上,但保留也没有问题。


二、82599万兆网卡RSS状态

你最重要的网卡:

Intel 82599 10G #1
Intel 82599 10G #2

其中:

SLOT 4 端口 2

显示:

Enabled : True
NumberOfReceiveQueues : 128
Profile : NUMAStatic

说明:

RSS 已开启

这是好的。


但有个异常

SLOT 4 端口1

显示:

NumberOfReceiveQueues : 8

但是:

RssProcessorArray :
IndirectionTable :

为空。

这通常意味着:

RSS未真正工作
或驱动异常
或网卡未承载流量

建议检查:

Get-NetAdapterStatistics -Name "SLOT 4 端口 1"

Get-NetAdapterStatistics -Name "SLOT 4 端口 2"

看看哪个接口真正有流量。


三、Hyper-V虚拟交换机

你有:

vEthernet (10.1.1.104-nic1)

vEthernet (10.2.2.4-slot4_2)

均显示:

NumberOfReceiveQueues : 16

说明:

vRSS 已开启

这是正确配置。


四、RSC状态

你执行:

Get-NetAdapterRsc

结果:

IPv4Enabled      : True
IPv4Operational  : False
FailureReason    : ForwardingEnabled

这是正常现象。

原因:

Hyper-V Virtual Switch
开启转发模式

RSC会自动失效。

微软设计如此。

因此:

False

不是故障。


五、建议检查VMQ

Hyper-V性能最关键的是:

Get-NetAdapterVmq

如果看到:

Enabled : True

则正常。

如果:

Enabled : False

建议开启:

Enable-NetAdapterVmq -Name "SLOT 4 端口 2"

六、建议检查VMMQ

Windows Server 2022/2025非常重要。

执行:

Get-NetAdapterVmq

和:

Get-VMSwitch

以及:

Get-VMSwitchTeam

看看是否启用了:

VMMQ
Virtual Machine Multi Queue

对于:

20台以上虚拟机
10G以上网卡

收益很大。


七、82599网卡的特殊优化

Intel 82599 是老牌但非常稳定的万兆芯片。

推荐检查:

Get-NetAdapterAdvancedProperty -Name "SLOT 4 端口 2"

重点关注:

Jumbo Frame

建议:

9014

或:

9000

前提:

  • 交换机支持

  • 对端支持


Interrupt Moderation

建议:

Enabled

Receive Side Scaling

建议:

Enabled

Flow Control

如果用于Hyper-V内部同步:

建议:

Rx & Tx Enabled

八、根据你目前输出的结论

项目 状态
TCP动态端口 ✅ 正常
UDP动态端口 ✅ 正常
Auto Tuning ✅ 正常
RSS ✅ 已开启
vRSS ✅ 已开启
RSC ✅ 正常(Hyper-V导致)
TCP连接数 ✅ 极低
TIME_WAIT风险 ✅ 几乎没有
82599万兆网卡 ✅ 工作正常
Hyper-V交换机 ✅ 正常

目前看不到需要进一步调整 TCP 参数的地方。

下一步最值得检查的是:

Get-NetAdapterVmq

Get-NetAdapterAdvancedProperty -Name "SLOT 4 端口 2"

Get-NetAdapterStatistics -Name "SLOT 4 端口 2"

尤其是 VMQ 和 Jumbo Frame 配置,它们对 Hyper-V 虚拟机间的大流量传输影响比前面那几条 netsh 命令更大。

 

不准确,或者更准确地说:

Get-NetTCPConnection | Measure-Object

只能统计 当前 Windows 宿主机 TCP/IP 协议栈中的连接,并不能统计 Hyper-V 虚拟机内部的连接。

你的结果:

Count : 203

表示:

宿主机自身只有203个TCP连接

包括:

  • RDP

  • SMB

  • DNS

  • Hyper-V管理流量

  • 宿主机运行的服务

而不包括:

VM内部的TCP连接
VM内部的NAT会话
VM内部的Docker连接
VM内部的应用连接

你的网络结构大概率是

Internet
    │
    ▼
路由器/防火墙
    │
    ▼
Hyper-V宿主机
    │
    ▼
虚拟交换机
    │
 ┌──┼──────────┐
 │  │          │
VM1 VM2      VM20

如果 NAT 服务运行在某个 VM 里面:

OpenClash
Linux NAT
软路由
RouterOS
pfSense
OpenWRT

那么:

Get-NetTCPConnection

看到的仍然可能只有:

100~500个连接

因为 60 万 NAT 会话全部存在于 VM 内部。


如何确认 NAT 在哪里

查看宿主机是否存在 NAT:

Get-NetNat

如果返回:

No MSFT_NetNat objects found

说明:

宿主机没有承担NAT

查看宿主机连接跟踪:

Get-NetTCPConnection | Group-Object State

例如:

Established : 150
TimeWait    : 30
Listen      : 20

说明宿主机压力很小。


如果 NAT 在 OpenWrt VM

例如:

OpenWrt VM
192.168.1.1

查看:

cat /proc/sys/net/netfilter/nf_conntrack_count

或者:

conntrack -C

才能看到:

600000

这样的会话数。


如果 NAT 在 Windows VM

查看:

Get-NetNatSession | Measure-Object

或者:

Get-NetNatSession

对于你的环境

你之前描述:

  • Hyper-V

  • 40个虚拟机

  • OpenClash

  • 大量代理流量

  • 万兆交换机

我判断:

60万 NAT 会话

极有可能在:

  • OpenWrt VM

  • Linux VM

  • RouterOS VM

  • pfSense VM

里面,而不是宿主机。

因此:

Get-NetTCPConnection | Measure-Object

得到的:

203

只是宿主机自身连接数,不能反映整体业务流量。


如果你想评估 Hyper-V 宿主机是否会因为 60 万 NAT 会话受到影响,更有价值的是查看:

Get-Counter '\Network Interface(*)\Bytes Total/sec'

Get-Counter '\Hyper-V Virtual Switch(*)\Bytes/sec'

Get-Counter '\Hyper-V Virtual Network Adapter(*)\Bytes/sec'

以及:

Get-NetAdapterStatistics

这样可以看到:

  • 实际吞吐量(Gbps)

  • PPS(每秒包数)

  • 丢包

  • 队列压力

这些指标比 Get-NetTCPConnection 更能反映 Hyper-V 宿主机在高峰期是否接近瓶颈。