# 查看当前是否在使用 bbr
sysctl net.ipv4.tcp_congestion_control
# 查看可用拥塞控制算法列表
sysctl net.ipv4.tcp_available_congestion_control
# 查看是否加载了 bbr 模块
lsmod | grep -i bbr
# 临时切换成 bbr(测试用)
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
← 返回脚本列表
开启BBR
开启BBR
curl -sSL bash.ss-wiki.com/raw/bbr | bash
脚本
#!/bin/bash
# 只处理 BBR 开/关 + 检测
# 支持大多数现代 Linux (内核 ≥4.9)
set -e
# ======================
# 颜色
# ======================
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $1"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1" >&2; exit 1; }
# ======================
# 检查内核是否支持 tcp_bbr
# ======================
check_bbr_support() {
if ! modinfo tcp_bbr >/dev/null 2>&1; then
error "当前内核没有 tcp_bbr 模块(需要 Linux 内核 ≥ 4.9)"
fi
}
# ======================
# 获取当前拥塞控制算法
# ======================
get_current_cc() {
sysctl -n net.ipv4.tcp_congestion_control 2>/dev/null || echo "unknown"
}
# ======================
# 判断 BBR 是否已启用
# ======================
is_bbr_enabled() {
local cc
cc=$(get_current_cc)
[ "$cc" = "bbr" ]
}
# ======================
# 显示当前状态
# ======================
show_status() {
local cc=$(get_current_cc)
local avail=$(sysctl -n net.ipv4.tcp_available_congestion_control 2>/dev/null)
echo
if [[ "$cc" = "bbr" ]]; then
echo -e "${GREEN}当前已使用 BBR${NC}"
elif [[ "$avail" =~ "bbr" ]]; then
echo -e "${YELLOW}BBR 模块可用,但当前未启用(当前: $cc)${NC}"
else
echo -e "${RED}BBR 不可用(模块缺失或内核太旧)${NC}"
fi
echo "当前拥塞控制 : $cc"
echo "可用算法 : $avail"
echo
}
# ======================
# 临时启用 BBR(本次开机有效)
# ======================
enable_bbr_temp() {
info "临时启用 BBR(本次重启后失效)..."
modprobe tcp_bbr 2>/dev/null || true
sysctl -w net.ipv4.tcp_congestion_control=bbr
if is_bbr_enabled; then
info "临时启用成功"
else
warn "临时启用失败,请检查内核模块"
fi
}
# ======================
# 永久启用 BBR(推荐)
# ======================
enable_bbr_permanent() {
info "设置永久启用 BBR..."
# 加载模块(开机自动加载)
if [[ -d /etc/modules-load.d ]]; then
echo "tcp_bbr" | tee /etc/modules-load.d/tcp_bbr.conf >/dev/null
elif [[ -f /etc/modules ]]; then
grep -q "^tcp_bbr$" /etc/modules || echo "tcp_bbr" >> /etc/modules
fi
# sysctl 配置
local conf="/etc/sysctl.d/98-tcp-bbr.conf"
cat > "$conf" << 'EOF'
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF
sysctl -p "$conf" 2>/dev/null || true
info "已写入配置:$conf"
info "重启后完全生效(或手动执行:sysctl -p $conf)"
}
# ======================
# 主逻辑
# ======================
main() {
check_bbr_support
show_status
if is_bbr_enabled; then
warn "BBR 已经启用,无需操作。"
exit 0
fi
echo -n "是否现在启用 BBR?[y/N] "
read -r answer
if [[ ! "$answer" =~ ^[Yy]$ ]]; then
info "已取消"
exit 0
fi
enable_bbr_temp
show_status
echo -n "是否设置为永久启用(推荐)?[y/N] "
read -r answer
if [[ "$answer" =~ ^[Yy]$ ]]; then
enable_bbr_permanent
fi
info "操作完成"
echo "验证命令:"
echo " sysctl net.ipv4.tcp_congestion_control"
echo " lsmod | grep bbr"
}
main "$@"