家里的 N5105 软路由跑了大半年,一直没怎么管。上个月偶然看了一眼监控,CPU 占用居然 45%,千兆宽带实际只跑到 900Mbps 出头。花了两周时间反复折腾,最后 CPU 降到 18%,带宽基本跑满。把过程记录一下。

先说硬件:网卡比 CPU 重要

很多人(包括之前的我)买软路由只看 CPU,觉得核多频率高就行。实际测下来,N5105(4核2.9GHz)和 J4125(4核2.7GHz)在千兆环境跑 iperf3,差距不到 5%。瓶颈根本不在 CPU。

真正拉开差距的是网卡。我手上刚好有三种方案,跑了同样的测试:

  • Intel I226-V:950Mbps,CPU 占用 18%
  • Realtek 8125B:920Mbps,CPU 占用 28%
  • Realtek 8111H:850Mbps,CPU 占用 42%

I226-V 支持硬件 offload,能把转发工作甩给网卡芯片,CPU 基本闲着。8111H 全靠 CPU 软转发,占用率高一倍多。买软路由之前先查网卡型号,这一条能省掉后面很多折腾。

内存方面,OpenWrt 系统本身不吃内存,但如果装了 AdGuard Home、SmartDNS、OpenClash 这些,4GB 比 2GB 流畅不少。预算够就上 8GB,不够 4GB 也够用。

系统调优:动手改的几个地方

网络栈参数

OpenWrt 出厂配置偏保守,有几个参数值得改。SSH 上去:

# 连接跟踪表调大(家里设备多的话默认值不够)
echo 65536 > /proc/sys/net/netfilter/nf_conntrack_max
echo "net.netfilter.nf_conntrack_max=65536" >> /etc/sysctl.conf

# 换 BBR 拥塞控制
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf

# TCP 缓冲区拉大
echo "net.core.rmem_max=16777216" >> /etc/sysctl.conf
echo "net.core.wmem_max=16777216" >> /etc/sysctl.conf

sysctl -p

改完用 speedtest-cli 测了一下,下载从 920Mbps 涨到 950Mbps 以上。这个提升在局域网内不算大,但 BBR 在跨国访问时效果更明显,我连海外 VPS 的吞吐量提升了 30% 左右。

防火墙规则清理

装了一堆插件之后,防火墙规则很容易膨胀。先看一下有多少条:

iptables -L -n -v | wc -l

我查的时候吓了一跳,800 多条。大部分是各种插件自动加的,很多根本没命中过。清理思路:

  1. iptables -L -n -v 看命中次数,0 次的直接删
  2. 相似规则合并
  3. 大量 IP 规则换成 ipset

清完剩 80 条,CPU 占用从 28% 掉到 15%。每个数据包经过的规则少了,处理自然快。

DNS 方案

我用的是 SmartDNS + AdGuard Home。SmartDNS 负责解析,上游挂了阿里、腾讯、114 三个 DNS,开并发查询,哪个快用哪个。AdGuard Home 做广告过滤,上游指向 SmartDNS(127.0.0.1:6053)。

调完之后 DNS 查询延迟从 30-50ms 降到 5-10ms,广告拦截率 95% 以上。页面打开速度肉眼可见地快了。

Offload 别忘开

OpenWrt 网络设置里有两个选项:Software flow offloading 和 Hardware flow offloading。很多固件默认是关的,手动勾上。我的 N5105 开了之后 CPU 占用又降了 20%。如果你的网卡不支持硬件 offload,至少把软件 offload 打开。

日常维护

跑久了会积累临时文件,我的习惯是每周重启一次,每月清一次日志,偶尔看一眼磁盘空间(df -h)。没什么技术含量,但确实管用。

前后对比

测试平台:N5105 + 8GB 内存 + Intel I226-V,千兆电信宽带,iperf3 + speedtest-cli 测的。

指标 优化前 优化后 变化
CPU 占用 45% 18% -60%
内存占用 380MB 220MB -42%
网络延迟 2.3ms 0.8ms -65%
下载速度 920Mbps 950Mbps +3.3%
上传速度 880Mbps 945Mbps +7.4%
DNS 查询 35ms 8ms -77%

几个常见问题

J4125 能用这套方案吗?能。架构差不多,改法通用。

BBR 稳定吗?Google 做的,Linux 内核里跑了好几年了,没出过什么问题。

500M 宽带还需要优化吗?带宽提升不大,但延迟和 CPU 占用的改善是实打实的,日常用着会顺畅不少。

最后

总结一下优先级:网卡选对 > offload 打开 > 防火墙精简 > 网络栈调参 > DNS 优化。按这个顺序搞,千兆环境下跑满不难,CPU 占用也能控制在 20% 以内。

之后有空写写万兆软路由的坑,那边水更深。