推荐更新-优化gatewaysentry LAX 100M bbr+cake取代tbf限制发包

XanMod 内核支持的 CAKE 算法,是目前 Linux 上最先进的队列管理机制。它把 “此前的tbf限速(如85M” + “FQ 多流公平调度” + “CoDel 动态延时控制” 融为一体:

把队列延迟严格控制在 5ms 左右(超过就主动通过 AQM 算法处理),彻底杀死 Bufferbloat。

完美兼容 BBR 的 Pacing(发包节奏)。

实测效果也好于之前老旧的tbf令牌桶方案。

  • BBR 负责 TCP 拥塞控制算法(作用于传输层 / Layer 4)。

  • CAKE 是 队列规则 / 流量整形器(作用于网络层与数据链路层 / Layer 2-3 的 Qdisc)。

  • 单独只用 BBR:上行发包很平滑,但下行下载大文件时依然容易被运营商队列挤爆,引发下载高 Jitter。

  • 单独只用 CAKE:限制了网卡带宽并消除了 Bufferbloat,但远端发送 TCP 包时如果用的是传统 CUBIC 算法,发包节奏可能不够完美。

  • BBR + CAKE 组合:BBR 负责在端到端之间高效率发包,CAKE 负责在网卡出入口守住底线(限制总带宽与消除抖动)

对比

维度 fq (Fair Queueing) CAKE
设计场景 数据中心 / 高性能服务器 / 万兆网卡 路由器边缘 / WAN 广域网出口 / 跨境线路
内置限速 (Shaping) (需叠加 tbfhtb,易引发冲突) 内置高精度 Shaper(如 bandwidth 98mbit
主动抗膨胀 (AQM) (依赖尾丢包 Tail Drop) 内置 Cobalt 算法(CoDel + PIE 混合体)
隔离粒度 (Isolation) 单个 TCP/UDP 连接(Socket Hash) Triple Isolation(主机 IP + 连接 + NAT 感知)
QoS 优先级 扁平队列,无优先级区分 支持 DiffServ / DSCP(语音/游戏自动优先)
特殊优化 TCP Pacing(为 BBR 量身定制) ACK 抑制/过滤(优化非对称/高延迟线路)
CPU 资源消耗 极低 较低(现代 CPU 可忽略不计)

之前设置的 tbf rate 85Mbit lat 400ms 虽然成功把速度限制在了 85M,但也带来了副作用:
lat 400ms 的隐患:tbf 在达到 85M 限速时,会把超出的数据包硬塞进队列里,允许数据包排队等待长达 400ms。
这正是导致测速时jitter飙升的元凶。
破坏了 fq 调度:tbf 覆盖掉了 BBR 最喜欢的 fq 队列,导致发包不再平滑。

从旧的 TBF(令牌桶) 方案平滑过度到验证成功的 CAKE + IFB0 (98mbit) 终极双向控速方案。

整体分为 查看状态 :backhand_index_pointing_right: 清理残留 :backhand_index_pointing_right: 部署新方案 :backhand_index_pointing_right: 验证结果 四个阶段:


第零步 -可忽略技术细节直接运行-完成清理和新建临时的测试环境-后面可以用服务固化效果

遇到错误再回头诊断

:hammer_and_wrench: 一键清理与重部署命令行(方便快捷粘贴)

如果你想一次性快速重置并应用,可以直接运行以下整合命令:


# --- 清理旧规则 ---

tc qdisc del dev eth0 root 2>/dev/null

tc qdisc del dev eth0 ingress 2>/dev/null

ip link set dev ifb0 down 2>/dev/null

ip link del dev ifb0 2>/dev/null



# --- 部署新 CAKE 98M 方案 ---

modprobe ifb 2>/dev/null || true

ip link add name ifb0 type ifb 2>/dev/null || true

ip link set dev ifb0 up


tc qdisc add dev eth0 root cake bandwidth 98mbit

tc qdisc add dev eth0 handle ffff: ingress

tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

tc qdisc add dev ifb0 root cake bandwidth 98mbit ingress


:magnifying_glass_tilted_left: 第一步:查看当前网络队列状态

在清理前,先确认当前网卡的 Qdisc(队列)和虚拟网卡状态:


# 1. 查看主网卡 eth0 的发送/接收队列配置

tc -s qdisc show dev eth0

# 2. 查看虚拟网卡 ifb0 状态(如果已建立)

tc -s qdisc show dev ifb0 2>/dev/null

ip link show ifb0 2>/dev/null

重点排查:观察 eth0 根队列是否有 qdisc tbflat 400ms 字样,这是需要清理的目标。


:broom: 第二步:彻底清理 TBF 残留与旧规则

将旧的 tbf 规则、ingress 重定向过滤规则以及临时的 ifb0 设备彻底卸载,还原干净的网络栈:


# 1. 删除 eth0 的出口根队列(清除 tbf 或旧的 cake)

tc qdisc del dev eth0 root 2>/dev/null

# 2. 删除 eth0 的入口重定向队列(清除 ingress 钩子)

tc qdisc del dev eth0 ingress 2>/dev/null

# 3. 停用并删除 ifb0 虚拟网卡

ip link set dev ifb0 down 2>/dev/null

ip link del dev ifb0 2>/dev/null


:rocket: 第三步:部署新的 IFB0 + CAKE (98mbit) 方案

重新构建下行重定向双向 CAKE 98mbit 控速


# 1. 加载内核模块 & 动态创建 ifb0 网卡

modprobe ifb 2>/dev/null || true

ip link add name ifb0 type ifb 2>/dev/null || true

ip link set dev ifb0 up

# 2. 部署上行(Upload / Egress)CAKE 98mbit 控速

tc qdisc add dev eth0 root cake bandwidth 98mbit

# 3. 将 eth0 的下行(Download / Ingress)流量重定向到 ifb0

tc qdisc add dev eth0 handle ffff: ingress

tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

# 4. 部署下行(Download)CAKE 98mbit 控速(作用于 ifb0)

tc qdisc add dev ifb0 root cake bandwidth 98mbit ingress


:white_check_mark: 第四步:最终效果验证

执行完后,运行以下命令确认部署状态:


tc qdisc show dev eth0

tc qdisc show dev ifb0

正确的标准输出形式如下:


qdisc cake 8001: dev eth0 root refcnt 2 bandwidth 98Mbit diffserv4 triple-isolate nonat wash no-ack-filter split-gso rtt 100ms raw overhead 0 

qdisc ingress ffff: dev eth0 parent ffff:ingress 

qdisc cake 8002: dev ifb0 root refcnt 2 bandwidth 98Mbit ingress diffserv4 triple-isolate nonat wash no-ack-filter split-gso rtt 100ms raw overhead 0

完成上述操作后,系统已完全脱离旧的 tbf 令牌限制,全面拥抱高吞吐、零抖动(Jitter ≈ 0ms)的 CAKE 方案。

新测的NQ net结果

speedtest cli的结果 可以看到jitter降低 效果比以前稳定


# ./speedtest-go --city=sanfrancisco -t 4

    speedtest-go v1.7.10 (git-1395781) @showwin

✓ ISP: 107.195.147.153 (AT&T Internet) [34.8504, -92.4089]

✓ Found 20 Public Servers

✓ Test Server: [64241] 2677.25km Palo Alto, CA (United States) by Etheric Networks

✓ Latency: 9.476345ms Jitter: 28.967µs Min: 9.437765ms Max: 9.523457ms

✓ Packet Loss Analyzer: Running in background (<= 30 Secs)

✓ Download: 92.63 Mbps (Used: 117.14MB) (Latency: 18ms Jitter: 4ms Min: 13ms Max: 25ms)

✓ Upload: 90.32 Mbps (Used: 113.02MB) (Latency: 10ms Jitter: 0ms Min: 10ms Max: 10ms)

✓ Packet Loss: N/A

最后 固化服务 防止之前的tc命令重启后失效


:rocket:tc cake (98mbit) 双向限速写入开机自启

因为 tc 命令在重启后会失效,为了保持 98mbit 的甜蜜点配置,建议将其做成 Systemd 服务。

1. 创建脚本 /usr/local/bin/tc-cake.sh


cat << 'EOF' > /usr/local/bin/tc-cake.sh

#!/bin/bash

DEV="eth0"

SPEED="98mbit"



# 1. 配置上行 CAKE

tc qdisc del dev $DEV root 2>/dev/null

tc qdisc add dev $DEV root cake bandwidth $SPEED



# 2. 加载 IFB 并配置下行 CAKE

modprobe ifb

ip link add name ifb0 type ifb 2>/dev/null

ip link set dev ifb0 up



tc qdisc del dev $DEV ingress 2>/dev/null

tc qdisc add dev $DEV handle ffff: ingress

tc filter add dev $DEV parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0



tc qdisc del dev ifb0 root 2>/dev/null

tc qdisc add dev ifb0 root cake bandwidth $SPEED ingress

EOF



chmod +x /usr/local/bin/tc-cake.sh



2. 创建 Systemd 服务守护脚本


cat << 'EOF' > /etc/systemd/system/tc-cake.service

[Unit]

Description=TC CAKE Dual-Direction Traffic Shaping

After=network-online.target

Wants=network-online.target



[Service]

Type=oneshot

RemainAfterExit=yes

ExecStart=/usr/local/bin/tc-cake.sh



[Install]

WantedBy=multi-user.target

EOF



3. 启用服务


systemctl daemon-reload

systemctl enable --now tc-cake.service



配置完成后,即便服务器重启,系统也会自动应用 sysctl 参数和双向 98mbit 的 CAKE 限速,保持最优网络状态。


整理后的 /etc/sysctl.d/99-bbr-tc-cake.conf

也适合debian系列的bbr v1和6.1内核

以下是去重、重新按逻辑分组整理后的配置文件。包含了对 XanMod 内核、BBR、容器/网关转发 以及 防 Bufferbloat 的优化,可以直接全选覆盖你的原文件:


# ====================================================================

# 高性能 VPS 系统与网络优化 (XanMod + BBR + CAKE 精调版)

# 适用环境: 2C / 3G RAM / 100M CN2 优化线路

# ====================================================================



# --- 1. 系统内存与 Swap ---

vm.swappiness = 1

vm.vfs_cache_pressure = 80

vm.max_map_count = 1048576

vm.overcommit_memory = 1

fs.file-max = 524288

fs.nr_open = 524288

fs.inotify.max_user_instances = 1024



# --- 2. 核心网络栈与队列缓冲区 ---

net.core.default_qdisc = fq

net.ipv4.tcp_congestion_control = bbr



net.core.somaxconn = 8192

net.core.netdev_max_backlog = 16384

net.core.rmem_max = 33554432

net.core.wmem_max = 33554432

net.core.optmem_max = 65536



# --- 3. TCP 内存池与 BDP 动态窗口 ---

# TCP 内存 (单位: pages, 1page=4KB),上限约控制在 614MB RAM

net.ipv4.tcp_mem = 78643 117964 157286

# TCP 读写缓冲区 (4K / 512K / 32M)

net.ipv4.tcp_rmem = 4096 524288 33554432

net.ipv4.tcp_wmem = 4096 524288 33554432



# --- 4. BBR 与 TCP 协议栈防抖/延迟优化 ---

# 在 TCP 层限制未发送缓冲区数据包,配合 CAKE 进一步防 Bufferbloat

net.ipv4.tcp_notsent_lowat = 16384

# 禁用空闲后的慢启动,维持长连接高吞吐

net.ipv4.tcp_slow_start_after_idle = 0

# 开启 ECN 显式拥塞通知 (与 CAKE 完美联动)

net.ipv4.tcp_ecn = 1

# 开启 SACK / DSACK / FastOpen

net.ipv4.tcp_sack = 1

net.ipv4.tcp_dsack = 1

net.ipv4.tcp_fastopen = 3

net.ipv4.tcp_rfc1337 = 1



# --- 5. 路由转发与 NAT 连接跟踪 (网关/Docker 核心) ---

net.ipv4.ip_forward = 1

net.ipv6.conf.all.forwarding = 1

net.ipv4.ip_nonlocal_bind = 1



# 放宽反向路径过滤,兼容 Anycast 与多路非对称路由

net.ipv4.conf.default.rp_filter = 2

net.ipv4.conf.all.rp_filter = 2



# 连接跟踪表 (Conntrack) 扩容与超时优化

net.netfilter.nf_conntrack_max = 1048576

net.netfilter.nf_conntrack_tcp_timeout_established = 3600

net.ipv4.tcp_max_tw_buckets = 65536

net.ipv4.tcp_max_syn_backlog = 8192

net.ipv4.tcp_syncookies = 1



应用配置:


sysctl --system