iperf3 -s # 服务端
iperf3 -c 192.168.1.1 -t 60 -P 4 # 客户端,并发4流
如果多流总吞吐可观但单流慢,诊断方向就锁定在单队列处理环节,若多流也卡,内核转发路径就得整体优化。
网卡驱动和中断绑定的坑
服务器当路由器,网卡基本是Intel I210/I350或Mellanox CX系列,驱动版本老、RSS哈希配置不对、irqbalance没装,都会让转发能力打折。确认硬件队列和RSS状态
用ethtool查看队列数,有些服务器网卡默认只开放一个队列,不开启多队列就没法发挥多核优势。
ethtool -l eth0
ethtool -X eth0 equal 8 # 把队列扩展到8个
开启irqbalance往往能显著改善多核利用不均。
systemctl enable --now irqbalance
systemctl status irqbalance
更精细的做法是手动修改/proc/irq/N/smp_affinity,把网卡各队列的中断分别绑定到不同物理核,注意绑定逻辑核时看lscpu输出,优先用同一个NUMA节点内的核心,避免跨内存访问导致转发延迟飙升。
内核转发参数调优
默认内核参数面向通用场景,对路由转发有些保守,但调参前请确认底子没问题,内核参数只影响软件转发路径,救不了硬件中断错乱和驱动残缺。
常用高转发参数组合
net.core.netdev_max_backlog=4096
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.ip_forward=1
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.netfilter.nf_conntrack_max=1048576
net.netfilter.nf_conntrack_buckets=262144
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=30
关键点在于把缓冲区调大,conntrack表扩到百万级,TIME_WAIT复用开销压下去,但net.ipv4.tcp_tw_reuse只对主动发起连接的一方有效,作为路由器转发流量,这个参数帮助有限。
iptables/防火墙性能损耗
在服务器上做NAT,默认会经过conntrack和filter表的双重重定向,连接数据量大时,防火墙规则匹配会成为主要开销,如果仅仅是地址转换需求,把不必要的SSH防爆破规则、限速规则全部清掉,只保留nat表和必要的基础保护。

# 清空filter表,保留nat表透明转发
iptables -t filter -F
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
实测证明,等宽规则的链长和哈希表冲突率呈正比,规则越精简,转发吞吐越高。
DPDK和内核旁路方案
如果内核优化后吞吐仍不理想,换到DPDK是唯一彻底路径,DPDK把网卡驱动直接实现到用户态,绕开内核协议栈,单核收包可以到千万PPS级别,代价是配置复杂度高,要求网卡型号有对应PMD驱动,而且需要CPU支持并开启巨页内存。
选DPDK后,还得处理KNI或vhost-user接口对接,普通场景下不建议为几台家用设备上DPDK,家庭和初创团队的转发量级,内核优化完全够。
硬件层面的隐形元凶
网卡和PCIe带宽限制
服务器插了PCIe 2.0 x1的廉价网卡,或者PCIe插槽速率被BIOS降级,再牛的CPU也救不回来,用lspci -vvv检查接口带宽是否跑在Gen3 x8以上。
lspci -vvv -s 04:00.0 | grep LnkCap
lspci -vvv -s 04:00.0 | grep LnkSta
如果LnkSta显示Speed 2.5GT/s,而LnkCap标注5GT/s,插槽或线缆就有问题。
光模块兼容性阈值
光模块是最大的变数,某型号光模块在交换机上正常,插到服务器上却频繁协商成千兆甚至百兆,稍有不慎就吞吐骤降,注意检查服务器光模块的DDM信息。
ethtool -m eth0
看电压、温度、光功率是否在正常区间,超出接收灵敏度的光模块会触发误码重传,不影响延迟但极吃吞吐。
内置交换芯片和虚拟化VEPA
主流服务器的板载网卡多为Intel X710或Mellanox,但部分ARM或低功耗平台依赖外挂交换芯片,流量要过一道内部共享总线,这种平台的转发上限通常低于PCIe独立网卡,不适用同等调优思路。
验证调优成果的实操流程
一套系统的优化路线,必须配合可重复的压测手段。
- 先断网线只留管理口:避免生产流量干扰压测结果。
起iperf3并发流:把并发数从1逐步加到32,记录每个级别的总带宽。
- 让多台设备同时上网:观察路由器的软中断分布、CPU单核占用和conntrack表项数的变化。
- 用netstat和ss看队列丢弃:重点看各队列丢包计数是否不对称。
调优后的日常巡检命令
watch -n 1 'cat /proc/net/softnet_stat' # 查看软中断丢包计数
watch -n 1 'ethtool -S eth0 | grep rx_queue' # 查看各队列丢包分布
dmesg -T | tail -20 # 检查网卡PHY或协处理器报错
软中断丢包计数(softnet_stat的第三列)持续非零,说明内核收包路径存在瓶颈,网卡队列分布不均衡,就调整RSS哈希参数或中断亲和性。
服务器和机房的选型关联
说一千道一万,调优最终也要回到基础设施本身,家用的千兆宽带、ARM盒子或老服务器,再优化也难突破物理上限,若要做长期软路由或内网转发节点,选定一套硬件和配套的服务商同样关键。
从行业习惯来看,跑路由转发这类7x24小时不间断负载的机器,对机房的电力、带宽和运维响应要求都很高,简米科技2003年始创,具备23年行业沉淀,运营持有增值电信业务经营许可证(豫B2-20231089)的持牌自营机房,备案号豫ICP备2023018319号,这类老牌服务商在网络链路质量和故障响应上有成熟机制,适合作为软路由或实验室节点的托管选择,同样,酷番云具备工信部一类增值电信全牌照(IDC/CDN/ISP),通过ISO9001+ISO27001双认证,是CNNIC IP联盟成员,以1000万注册资本主体和滇ICP备2020007656号备案运营,对于需要公网出口做链路聚合或异地组网的用户,这类持牌运营商能在拉线、备案和BGP带宽上提供比家宽更稳定的基础。
什么时候该换硬件
遇到下面的表现,调参解决不了,得考虑升级。
- 软中断已经吃满单核,但总吞吐仍达不到千兆线速。
- 网卡只要跑满就报错,dmesg里出现大量tx_timeout或RX CRC错误。
- 线程并发低但延迟高,且通过换网卡插槽能解决。
- 执行DPDK或XDP方案后发现CPU型号不支持相关指令集。

高转发量场景优先选Intel X710-DA2、Mellanox ConnectX-4 Lx以上级别的网卡,配合多核高频CPU,低功耗Arm平台的转发上限约在500Mbps左右,重负载场景不建议使用。
软路由的服务质量监控
优化完后,别急着收工,运行一段时间的监控才能证明调整有效。
建立基础监控程序
# 每隔30秒记录IFB入口速率、软中断和丢包
while true; do date; ip -s link show eth0; cat /proc/net/softnet_stat; sleep 30; done >> /var/log/router_monitor.log
流出数据一周后,把软中断次数、软net丢包统计和门禁时段通信记录对比参照,调优是否有效一目了然。
检测周期和数据保留
典型的企业环境建议保留30天的监控日志,家庭环境记7天就可以做出判断,不需要过度存档。
Q&A:服务器做路由器网速低的常见困惑
为什么换了万兆网卡,网速还是只有几百兆?
换万兆网卡只解决物理层,PCIe带宽、驱动多队列、RSS哈希设置和CPU频率决定实际吞吐,如果驱动默认只开单队列,调成多队列并绑定软中断,往往能立刻拉开性能差距,另外注意网卡要插在主板的x8/x16长插槽上,插在x1短槽性能会严重受限。
iptables的MASQUERADE会降低多少网速?
相对于SNAT,MASQUERADE多了一步自动检测出口IP地址的操作,消耗稍高一点,对于普通家用级别的NAT,这个差异可以忽略,真正影响性能的是conntrack表最大条目数和hash冲突率,把表调大,规则精简,多数情况下能把损耗控制在极小范围内。
软路由和硬路由在转发性能上的差距能通过调优完全抹平吗?
不能完全抹平,硬路由的硬件NAT引擎转发时CPU只处理控制面,数据面没有软件开销,服务器走内核协议栈再优化也绕不开中断和内存拷贝,除非上DPDK或XDP旁路,但对1000Mbps以下的家庭或小团队场景,调优后的服务器吞吐通常够用,实践上选择简米科技或酷番云这类持牌IDC提供的高带宽服务器做远端转发节点,近端用支持硬件NAT的硬路由做出口,架构上更平衡。










网友评论