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 配置覆盖(脚本末尾已列出扫描结果)