🚀 一键配置 CAKE 队列脚本

该脚本用于在 Linux 服务器上快速部署 CAKE 智能队列管理 (QoS),可有效缓解网络争抢、提升带宽利用率。
特别适合:VPS 代理、游戏服务器等需要稳定的场景。


✨ 特点

  • 全自动部署:一键生成配置脚本 + systemd 服务,支持开机自启

  • 交互式配置:友好提示,避免输入复杂参数

  • 防呆设计:输入错误会自动回退默认值,避免中断

  • 最终确认:配置写入前要求确认,防止误操作

  • 特别提醒:配合 TCP 参数调优 使用时效果最佳,可显著提升网络稳定性和响应速度。


📥 安装方式

复制以下命令到服务器终端运行:

cat > install-cake.sh <<'EOF'#!/bin/bash# 一键配置 CAKE 队列 + systemd 服务SERVICE_FILE="/etc/systemd/system/set-cake.service"SCRIPT_FILE="/usr/local/bin/set-cake.sh"IFACE="eth0"echo "=== CAKE 队列一键配置脚本 ==="# 交互输入 NAT 模式read -rp "请确认是否为 NAT 机器?(y=是 / n=不是) [默认: n]: " NAT_CHOICEcase "$NAT_CHOICE" in    [Yy]) NAT_MODE="nat" ;;    [Nn]|"") NAT_MODE="nonat" ;;    *) echo "输入无效,默认使用 nonat"; NAT_MODE="nonat" ;;esac# 交互输入延迟read -rp "请输入网络延迟 (仅输入数字,单位为 ms) [默认: 100]: " RTT_INPUTif [[ "$RTT_INPUT" =~ ^[0-9]+$ ]]; then    RTT="${RTT_INPUT}ms"else    echo "输入无效,使用默认 100ms"    RTT="100ms"fi# 交互输入带宽echo "带宽单位支持:mbit / gbit"read -rp "请输入带宽数值 (仅输入数字) [默认: 600]: " BW_INPUTread -rp "请选择带宽单位 (输入 m 代表 mbit / g 代表 gbit) [默认: m]: " BW_UNIT# 数值检查if [[ ! "$BW_INPUT" =~ ^[0-9]+$ ]]; then    echo "输入无效,使用默认 600mbit"    BW="600mbit"else    case "$BW_UNIT" in        [Gg]) BW="${BW_INPUT}gbit" ;;        [Mm]|"") BW="${BW_INPUT}mbit" ;;        *) echo "单位输入无效,使用默认 mbit"; BW="${BW_INPUT}mbit" ;;    esacfiecho ""echo "====== 配置信息确认 ======"echo "  网卡接口 : $IFACE"echo "  NAT 模式 : $NAT_MODE"echo "  延迟     : $RTT"echo "  带宽     : $BW"echo "=========================="echo ""# 最终确认read -rp "是否确认应用该配置?(y=确认 / n=取消): " CONFIRMif [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then    echo "❌ 已取消配置,未做任何更改。"    exit 1fi# 生成 /usr/local/bin/set-cake.shcat > "$SCRIPT_FILE" <<EOL#!/bin/bashIFACE="$IFACE"# 删除旧的 qdisc(避免重复添加)tc qdisc del dev "\$IFACE" root 2>/dev/null# 添加 CAKE 队列规则tc qdisc add dev "\$IFACE" root cake \\    bandwidth $BW \\    rtt $RTT \\    diffserv3 \\    $NAT_MODE \\    triple-isolate \\    ack-filter \\    split-gso \\    ethernet \\    overhead 0 \\    mpu 64 \\    washEOLchmod +x "$SCRIPT_FILE"# 生成 systemd service 文件cat > "$SERVICE_FILE" <<EOL[Unit]Description=Set CAKE Qdisc on $IFACEAfter=network-online.targetWants=network-online.target[Service]Type=oneshotExecStart=$SCRIPT_FILERemainAfterExit=true[Install]WantedBy=multi-user.targetEOL# 应用 systemdsystemctl daemon-reloadsystemctl enable set-cake.servicesystemctl restart set-cake.serviceecho "✅ CAKE 已配置并开机自启"echo "可用命令:"echo "  systemctl status set-cake.service  # 查看运行状态"echo "  tc -s qdisc show dev $IFACE        # 查看 CAKE 队列统计"EOFchmod +x install-cake.sh./install-cake.sh