2026-02-22 20:45:35 +08:00
|
|
|
|
#!/bin/bash
|
2026-03-04 13:43:30 +08:00
|
|
|
|
# BBR Blast Smooth v2 - 自动识别系统/内存智能调优版
|
|
|
|
|
|
# 支持 Debian 11/12/13, Ubuntu 20.04/22.04/24.04
|
|
|
|
|
|
# 根据内存大小自动调整缓冲区参数 🚀
|
|
|
|
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
|
|
# 颜色输出
|
|
|
|
|
|
RED='\033[0;31m'
|
|
|
|
|
|
GREEN='\033[0;32m'
|
|
|
|
|
|
YELLOW='\033[1;33m'
|
|
|
|
|
|
BLUE='\033[0;34m'
|
|
|
|
|
|
NC='\033[0m'
|
|
|
|
|
|
|
|
|
|
|
|
echo -e "${BLUE}========================================${NC}"
|
|
|
|
|
|
echo -e "${BLUE} BBR Blast Smooth v2 智能调优版${NC}"
|
|
|
|
|
|
echo -e "${BLUE}========================================${NC}"
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
|
|
# 检测系统
|
|
|
|
|
|
detect_os() {
|
|
|
|
|
|
if [ -f /etc/os-release ]; then
|
|
|
|
|
|
. /etc/os-release
|
|
|
|
|
|
OS=$ID
|
|
|
|
|
|
VER=$VERSION_ID
|
2026-02-22 20:45:35 +08:00
|
|
|
|
else
|
2026-03-04 13:43:30 +08:00
|
|
|
|
echo -e "${RED}❌ 无法识别系统${NC}"
|
|
|
|
|
|
exit 1
|
2026-02-22 20:45:35 +08:00
|
|
|
|
fi
|
2026-03-04 13:43:30 +08:00
|
|
|
|
|
|
|
|
|
|
case "$OS" in
|
|
|
|
|
|
debian)
|
|
|
|
|
|
if [[ "$VER" =~ ^(11|12|13)$ ]]; then
|
|
|
|
|
|
echo -e "${GREEN}✓ 检测到 Debian $VER${NC}"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo -e "${RED}❌ 仅支持 Debian 11/12/13${NC}"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
;;
|
|
|
|
|
|
ubuntu)
|
|
|
|
|
|
if [[ "$VER" =~ ^(20.04|22.04|24.04)$ ]]; then
|
|
|
|
|
|
echo -e "${GREEN}✓ 检测到 Ubuntu $VER${NC}"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo -e "${RED}❌ 仅支持 Ubuntu 20.04/22.04/24.04${NC}"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
;;
|
|
|
|
|
|
*)
|
|
|
|
|
|
echo -e "${RED}❌ 不支持的系统: $OS${NC}"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
;;
|
|
|
|
|
|
esac
|
2026-02-22 20:45:35 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-04 13:43:30 +08:00
|
|
|
|
# 检测内存并设置参数
|
|
|
|
|
|
detect_memory() {
|
|
|
|
|
|
# 获取总内存 (MB)
|
|
|
|
|
|
TOTAL_MEM=$(free -m | awk '/^Mem:/{print $2}')
|
|
|
|
|
|
echo -e "${GREEN}✓ 检测到内存: ${TOTAL_MEM}MB${NC}"
|
|
|
|
|
|
|
|
|
|
|
|
# 缓冲区 = 内存的 1/8,最小 8MB,最大 256MB
|
|
|
|
|
|
BUF_MB=$(( TOTAL_MEM / 8 ))
|
|
|
|
|
|
[ "$BUF_MB" -lt 8 ] && BUF_MB=8
|
|
|
|
|
|
[ "$BUF_MB" -gt 256 ] && BUF_MB=256
|
|
|
|
|
|
BUF_BYTES=$(( BUF_MB * 1024 * 1024 ))
|
|
|
|
|
|
|
|
|
|
|
|
if [ "$TOTAL_MEM" -lt 512 ]; then
|
|
|
|
|
|
PROFILE="micro"
|
|
|
|
|
|
echo -e "${YELLOW}→ 使用 Micro 配置 (极小内存优化)${NC}"
|
|
|
|
|
|
elif [ "$TOTAL_MEM" -lt 1024 ]; then
|
|
|
|
|
|
PROFILE="small"
|
|
|
|
|
|
echo -e "${YELLOW}→ 使用 Small 配置 (小内存优化)${NC}"
|
|
|
|
|
|
elif [ "$TOTAL_MEM" -lt 2048 ]; then
|
|
|
|
|
|
PROFILE="medium"
|
|
|
|
|
|
echo -e "${YELLOW}→ 使用 Medium 配置 (中等内存)${NC}"
|
|
|
|
|
|
elif [ "$TOTAL_MEM" -lt 4096 ]; then
|
|
|
|
|
|
PROFILE="large"
|
|
|
|
|
|
echo -e "${YELLOW}→ 使用 Large 配置 (大内存)${NC}"
|
2026-02-22 20:45:35 +08:00
|
|
|
|
else
|
2026-03-04 13:43:30 +08:00
|
|
|
|
PROFILE="xlarge"
|
|
|
|
|
|
echo -e "${YELLOW}→ 使用 XLarge 配置 (超大内存)${NC}"
|
2026-02-22 20:47:32 +08:00
|
|
|
|
fi
|
2026-03-04 13:43:30 +08:00
|
|
|
|
|
|
|
|
|
|
RMEM_MAX=$BUF_BYTES
|
|
|
|
|
|
WMEM_MAX=$BUF_BYTES
|
|
|
|
|
|
TCP_RMEM="4096 87380 $BUF_BYTES"
|
|
|
|
|
|
TCP_WMEM="4096 65536 $BUF_BYTES"
|
|
|
|
|
|
echo -e "${YELLOW}→ 缓冲区: ${BUF_MB}MB${NC}"
|
2026-02-22 20:47:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-04 13:43:30 +08:00
|
|
|
|
# 启用 BBR
|
|
|
|
|
|
enable_bbr() {
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo -e "${BLUE}==> 启用 BBR${NC}"
|
|
|
|
|
|
modprobe tcp_bbr 2>/dev/null || true
|
|
|
|
|
|
echo "tcp_bbr" > /etc/modules-load.d/bbr.conf
|
|
|
|
|
|
echo -e "${GREEN}✓ BBR 模块已加载${NC}"
|
|
|
|
|
|
}
|
2026-02-22 20:47:32 +08:00
|
|
|
|
|
2026-03-04 13:43:30 +08:00
|
|
|
|
# 备份原配置
|
|
|
|
|
|
backup_config() {
|
|
|
|
|
|
if [ -f /etc/sysctl.conf ]; then
|
|
|
|
|
|
cp /etc/sysctl.conf /etc/sysctl.conf.bak.$(date +%Y%m%d%H%M%S)
|
|
|
|
|
|
echo -e "${GREEN}✓ 已备份原配置${NC}"
|
2026-02-22 20:45:35 +08:00
|
|
|
|
fi
|
2026-03-04 13:43:30 +08:00
|
|
|
|
}
|
2026-02-22 20:47:32 +08:00
|
|
|
|
|
2026-03-04 13:43:30 +08:00
|
|
|
|
# 写入优化参数
|
|
|
|
|
|
apply_config() {
|
2026-02-22 20:47:32 +08:00
|
|
|
|
echo ""
|
2026-03-04 13:43:30 +08:00
|
|
|
|
echo -e "${BLUE}==> 写入优化参数 (Profile: $PROFILE)${NC}"
|
|
|
|
|
|
|
|
|
|
|
|
# 移除旧的 BBR 配置
|
|
|
|
|
|
sed -i '/# === BBR Blast Smooth/,/# === END BBR/d' /etc/sysctl.conf 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
|
|
cat >> /etc/sysctl.conf <<SYSCTL
|
|
|
|
|
|
|
|
|
|
|
|
# === BBR Blast Smooth v2 (Profile: $PROFILE) ===
|
|
|
|
|
|
# 系统: $OS $VER | 内存: ${TOTAL_MEM}MB | 缓冲: ${BUF_MB}MB
|
|
|
|
|
|
# 生成时间: $(date '+%Y-%m-%d %H:%M:%S')
|
|
|
|
|
|
|
|
|
|
|
|
# BBR 拥塞控制
|
|
|
|
|
|
net.core.default_qdisc=fq
|
|
|
|
|
|
net.ipv4.tcp_congestion_control=bbr
|
|
|
|
|
|
|
|
|
|
|
|
# 缓冲区 (内存/8 自动计算)
|
|
|
|
|
|
net.core.rmem_max=$RMEM_MAX
|
|
|
|
|
|
net.core.wmem_max=$WMEM_MAX
|
|
|
|
|
|
net.ipv4.tcp_rmem=$TCP_RMEM
|
|
|
|
|
|
net.ipv4.tcp_wmem=$TCP_WMEM
|
|
|
|
|
|
|
|
|
|
|
|
# 短连接 & 延迟优化
|
|
|
|
|
|
net.ipv4.tcp_fin_timeout=8
|
|
|
|
|
|
net.ipv4.tcp_tw_reuse=1
|
|
|
|
|
|
net.ipv4.tcp_window_scaling=1
|
|
|
|
|
|
net.ipv4.tcp_timestamps=1
|
|
|
|
|
|
net.ipv4.tcp_sack=1
|
|
|
|
|
|
|
|
|
|
|
|
# 避免保存历史 RTT,保持突发灵活
|
|
|
|
|
|
net.ipv4.tcp_no_metrics_save=1
|
|
|
|
|
|
# === END BBR ===
|
|
|
|
|
|
SYSCTL
|
|
|
|
|
|
|
|
|
|
|
|
echo -e "${GREEN}✓ 配置已写入${NC}"
|
2026-02-22 20:47:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-04 13:43:30 +08:00
|
|
|
|
# 应用配置
|
|
|
|
|
|
reload_config() {
|
2026-02-22 20:50:13 +08:00
|
|
|
|
echo ""
|
2026-03-04 13:43:30 +08:00
|
|
|
|
echo -e "${BLUE}==> 应用配置${NC}"
|
|
|
|
|
|
sysctl -p >/dev/null 2>&1
|
|
|
|
|
|
echo -e "${GREEN}✓ 配置已生效${NC}"
|
2026-02-22 20:45:35 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-04 13:43:30 +08:00
|
|
|
|
# 验证结果
|
|
|
|
|
|
verify() {
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo -e "${BLUE}==> 验证配置${NC}"
|
|
|
|
|
|
|
|
|
|
|
|
CC=$(sysctl -n net.ipv4.tcp_congestion_control 2>/dev/null)
|
|
|
|
|
|
QDISC=$(sysctl -n net.core.default_qdisc 2>/dev/null)
|
|
|
|
|
|
|
|
|
|
|
|
if [ "$CC" = "bbr" ] && [ "$QDISC" = "fq" ]; then
|
|
|
|
|
|
echo -e "${GREEN}✓ 拥塞控制: $CC${NC}"
|
|
|
|
|
|
echo -e "${GREEN}✓ 队列算法: $QDISC${NC}"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo -e "${RED}⚠ 配置可能未完全生效,建议重启${NC}"
|
|
|
|
|
|
fi
|
2026-02-22 20:45:35 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-04 13:43:30 +08:00
|
|
|
|
# 显示摘要
|
|
|
|
|
|
summary() {
|
2026-02-22 20:45:35 +08:00
|
|
|
|
echo ""
|
2026-03-04 13:43:30 +08:00
|
|
|
|
echo -e "${BLUE}========================================${NC}"
|
|
|
|
|
|
echo -e "${GREEN}✅ BBR Blast Smooth v2 配置完成!${NC}"
|
|
|
|
|
|
echo -e "${BLUE}========================================${NC}"
|
|
|
|
|
|
echo -e "系统: $OS $VER"
|
|
|
|
|
|
echo -e "内存: ${TOTAL_MEM}MB"
|
|
|
|
|
|
echo -e "配置: $PROFILE"
|
|
|
|
|
|
echo -e "缓冲: $(($RMEM_MAX/1024/1024))MB"
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 主流程
|
|
|
|
|
|
main() {
|
|
|
|
|
|
detect_os
|
|
|
|
|
|
detect_memory
|
|
|
|
|
|
enable_bbr
|
|
|
|
|
|
backup_config
|
|
|
|
|
|
apply_config
|
|
|
|
|
|
reload_config
|
|
|
|
|
|
verify
|
|
|
|
|
|
summary
|
2026-02-22 20:45:35 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-04 13:43:30 +08:00
|
|
|
|
main
|