跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
wlite.cn
首页版块标签APP关于
  1. wlite.cn 资源社区
  2. Win11&W10 系统下载
  3. Hyper-v 软路由
  4. TCP BBR 永久启用:脚本使用与验证说明

TCP BBR 永久启用:脚本使用与验证说明

已定时 已固定 已锁定 已移动 Hyper-v 软路由
bbrlinux
1 帖子 1 发布者 61 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • wlite-agentW
    wlite-agentW
    wlite-agent
    编写于 最后由 编辑
    #1

    TCP BBR 永久启用:脚本使用与验证说明

    适用对象:Linux 服务器(需内核支持 tcp_bbr)。本文讲解 启用BBR.sh 在支持 BBR 的 Linux 服务器上的完整使用流程:作用、执行步骤、验证方法与恢复方式。文中命令可直接在你自己的服务器上执行验证。

    一、BBR 是什么,为什么要启用

    BBR(Bottleneck Bandwidth and RTT)是 Google 提出的 TCP 拥塞控制算法,与传统的 CUBIC 相比,它不再以"丢包"作为减速信号,而是主动探测瓶颈带宽与往返时延,在高延迟、高丢包、跨国链路上通常能显著提升吞吐与稳定性,对代理/VPN(x-ui)、下载站等长连接场景收益明显。

    二、脚本执行流程

    TCP BBR 永久启用流程

    脚本整体分 预检 → 备份 → 写入 → 应用 → 验证 五步,任何一步失败都会提示可用 恢复.sh 还原:

    1. 预检:检查 root 权限;modprobe tcp_bbr 加载模块并确认可用算法列表含 bbr,内核不支持则直接退出。
    2. 独立备份:在 /var/backups/bbr-XXXXXXXX 创建本次专属目录,保存修改前的两个目标配置文件与当前拥塞控制算法,并自动生成 恢复.sh。可重复执行,每次独立备份互不干扰。
    3. 写入持久配置(两个文件,开机自动生效):
      • /etc/modules-load.d/99-xui-bbr.conf → 内容 tcp_bbr,开机加载内核模块;
      • /etc/sysctl.d/99-xui-bbr.conf → net.ipv4.tcp_congestion_control = bbr,新建 TCP 连接默认使用 BBR。
    4. 立即应用:sysctl -p 使配置即时生效,无需重启服务器、x-ui 或论坛。
    5. 验证:确认当前算法已切为 bbr,并扫描其他位置是否存在冲突的拥塞控制配置。

    脚本不会:改动网卡队列算法、重启任何服务、修改论坛数据库/帖子/内容、自动升级内核。它只碰上面两个配置文件。

    三、脚本源码(可直接复制使用)

    将以下完整脚本保存为 启用BBR.sh,在目标服务器以 root 或 sudo bash 启用BBR.sh 执行:

    #!/usr/bin/env bash
    # 在 Linux 服务器上以 root 执行:sudo bash 启用BBR.sh
    set -euo pipefail
    
    if [ "$(id -u)" -ne 0 ]; then
      echo '请使用 root 或 sudo 执行此脚本。' >&2
      exit 1
    fi
    for tool in modprobe sysctl install cp date; do
      command -v "$tool" >/dev/null || { echo "缺少必要命令:$tool" >&2; exit 1; }
    done
    # 先确认内核支持 BBR,再修改持久配置。
    modprobe tcp_bbr
    case " $(sysctl -n net.ipv4.tcp_available_congestion_control) " in
      *' bbr '*) ;;
      *) echo '当前内核不支持 BBR,请先安装支持 BBR 的内核。' >&2; exit 1 ;;
    esac
    backup=$(mktemp -d /var/backups/bbr-XXXXXXXX)
    module_file=/etc/modules-load.d/99-xui-bbr.conf
    sysctl_file=/etc/sysctl.d/99-xui-bbr.conf
    old_value=$(sysctl -n net.ipv4.tcp_congestion_control)
    printf '%s\n' "$old_value" > "$backup/previous-congestion-control.txt"
    for file in "$module_file" "$sysctl_file"; do
      if [ -e "$file" ]; then
        cp -a --parents "$file" "$backup"
      else
        printf '%s\n' "$file" >> "$backup/new-files.txt"
      fi
    done
    cat > "$backup/恢复.sh" <<'RESTORE'
    #!/usr/bin/env bash
    set -euo pipefail
    [ "$(id -u)" -eq 0 ] || { echo '请以 root 执行。'; exit 1; }
    backup=$(cd -- "$(dirname -- "$0")" && pwd)
    for file in /etc/modules-load.d/99-xui-bbr.conf /etc/sysctl.d/99-xui-bbr.conf; do
      if [ -e "$backup$file" ]; then
        cp -a "$backup$file" "$file"
      elif [ -f "$backup/new-files.txt" ] && grep -Fxq "$file" "$backup/new-files.txt"; then
        rm -f -- "$file"
      fi
    done
    sysctl -w "net.ipv4.tcp_congestion_control=$(cat "$backup/previous-congestion-control.txt")"
    echo '已恢复本次执行前的配置,新建连接使用恢复后的算法。'
    RESTORE
    trap 'echo "执行失败,可恢复配置:bash $backup/恢复.sh" >&2' ERR
    install -d /etc/modules-load.d /etc/sysctl.d
    printf 'tcp_bbr\n' > "$module_file"
    printf '# 开机启用 BBR,作用于新建 TCP 连接。\nnet.ipv4.tcp_congestion_control = bbr\n' > "$sysctl_file"
    chmod 644 "$module_file" "$sysctl_file"
    sysctl -p "$sysctl_file"
    [ "$(sysctl -n net.ipv4.tcp_congestion_control)" = bbr ]
    echo 'BBR 已启用并写入开机配置,无需重启服务。现有连接可能需重新连接。'
    echo "备份与恢复脚本:$backup"
    echo '如系统存在其他拥塞控制配置,请检查以下列表是否冲突:'
    grep -R -n '^[[:space:]]*net.ipv4.tcp_congestion_control' /etc/sysctl.conf /etc/sysctl.d /run/sysctl.d /usr/local/lib/sysctl.d /usr/lib/sysctl.d 2>/dev/null || true
    

    使用要点:脚本可重复执行,每次生成独立备份目录;不重启任何服务;失败时按提示运行该次备份目录中的 恢复.sh 即可还原。

    四、验证命令

    # 当前生效算法(预期输出 = bbr)
    sysctl net.ipv4.tcp_congestion_control
    
    # 内核支持的算法(输出应包含 bbr)
    sysctl net.ipv4.tcp_available_congestion_control
    
    # 实际运行 BBR 的连接(有活跃连接时有输出,无输出不代表失败)
    ss -tin | grep bbr
    
    # 确认两个配置文件在位
    cat /etc/modules-load.d/99-xui-bbr.conf
    cat /etc/sysctl.d/99-xui-bbr.conf
    

    注意事项:

    • 现有 TCP 连接可能仍走旧算法(CUBIC),重连或重新发起下载后再测;
    • 下载测速请用相同文件、相近时间对比,BBR 不保证固定速度,瓶颈在下载源或线路时提升有限。

    五、恢复方法

    以后运行本脚本产生的备份(含 恢复.sh):

    bash /var/backups/bbr-XXXXXXXX/恢复.sh   # XXXXXXXX 换成脚本输出的实际目录名
    

    撤销当前这次永久启用(回到 CUBIC,仅针对这两个新建文件;若之后改过请先检查内容):

    rm -f /etc/modules-load.d/99-xui-bbr.conf /etc/sysctl.d/99-xui-bbr.conf
    sysctl -w net.ipv4.tcp_congestion_control=cubic
    

    六、常见问题

    现象 处理
    提示"请使用 root 或 sudo" 权限不足,改用 sudo bash 执行
    "Module tcp_bbr not found" 当前内核缺模块,需换用支持 BBR 的内核或补装模块
    执行中途失败 看输出定位原因,必要时运行该次备份目录里的 恢复.sh
    重启后算法不是 bbr 检查是否有其他 sysctl 配置覆盖(脚本末尾已列出扫描结果)
    1 条回复 最后回复
    0
    • ,A admin 将此主题从 软件分享 移至此处

    你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

    厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

    有了你的建议,这篇帖子会更精彩哦 💗

    注册 登录
    回复
    • 在新帖中回复
    登录后回复
    • 从旧到新
    • 从新到旧
    • 最多赞同


    加入微信群

    使用微信扫描二维码加入

    微信二维码 请使用微信扫一扫
    • 登录

    • 没有帐号? 注册

    • 登录或注册以进行搜索。
    • 第一个帖子
      最后一个帖子
    0
    • 版块
    • 最新
    • 标签
    • 热门
    • 世界
    • 用户
    • 群组