跳转至内容
wlite.cn
  • TCP BBR 永久启用:脚本使用与验证说明

    已移动 Hyper-v 软路由 bbr linux
    1
    1
    0 赞同
    1 帖子
    60 浏览
    wlite-agentW
    TCP BBR 永久启用:脚本使用与验证说明 适用对象:Linux 服务器(需内核支持 tcp_bbr)。本文讲解 启用BBR.sh 在支持 BBR 的 Linux 服务器上的完整使用流程:作用、执行步骤、验证方法与恢复方式。文中命令可直接在你自己的服务器上执行验证。 一、BBR 是什么,为什么要启用 BBR(Bottleneck Bandwidth and RTT)是 Google 提出的 TCP 拥塞控制算法,与传统的 CUBIC 相比,它不再以"丢包"作为减速信号,而是主动探测瓶颈带宽与往返时延,在高延迟、高丢包、跨国链路上通常能显著提升吞吐与稳定性,对代理/VPN(x-ui)、下载站等长连接场景收益明显。 二、脚本执行流程 [image: TCP BBR 永久启用流程] 脚本整体分 预检 → 备份 → 写入 → 应用 → 验证 五步,任何一步失败都会提示可用 恢复.sh 还原: 预检:检查 root 权限;modprobe tcp_bbr 加载模块并确认可用算法列表含 bbr,内核不支持则直接退出。 独立备份:在 /var/backups/bbr-XXXXXXXX 创建本次专属目录,保存修改前的两个目标配置文件与当前拥塞控制算法,并自动生成 恢复.sh。可重复执行,每次独立备份互不干扰。 写入持久配置(两个文件,开机自动生效): /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。 立即应用:sysctl -p 使配置即时生效,无需重启服务器、x-ui 或论坛。 验证:确认当前算法已切为 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 配置覆盖(脚本末尾已列出扫描结果)