Files
tcp-bbr/bbr.sh

197 lines
5.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 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
else
echo -e "${RED}❌ 无法识别系统${NC}"
exit 1
fi
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
}
# 检测内存并设置参数
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}"
else
PROFILE="xlarge"
echo -e "${YELLOW}→ 使用 XLarge 配置 (超大内存)${NC}"
fi
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}"
}
# 启用 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}"
}
# 备份原配置
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}"
fi
}
# 写入优化参数
apply_config() {
echo ""
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}"
}
# 应用配置
reload_config() {
echo ""
echo -e "${BLUE}==> 应用配置${NC}"
sysctl -p >/dev/null 2>&1
echo -e "${GREEN}✓ 配置已生效${NC}"
}
# 验证结果
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
}
# 显示摘要
summary() {
echo ""
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
}
main