← 戻る

BBR を有効化

輻輳制御を BBR、キュー規則を fq に変更し sysctl.d に書き込んで即時反映します。カーネル 4.9 未満では中断します。

root が必要

ワンライン実行

curl -fsSL https://www.moiu.cn/scripts/bbr-enable.sh | bash

ソース

#!/usr/bin/env bash
# 开启 BBR 拥塞控制
#
# 需要 root。写入 /etc/sysctl.d/99-bbr.conf 并立即生效,
# 同时把默认队列规则设为 fq(BBR 要它配合)。
# 内核低于 4.9 不支持 BBR,脚本会先检查再退出。

set -e

# 需要 root:下面的系统级改动都直接执行,不再逐条 sudo
if [ "$(id -u)" -ne 0 ]; then
    echo '[!] 这个脚本需要 root 权限,请用 sudo 重新运行:'
    echo '    curl -fsSL 脚本地址 | sudo bash'
    echo '    或已经下载到本地:sudo bash 本文件'
    exit 1
fi


CONF=/etc/sysctl.d/99-bbr.conf

echo '====== 开启 BBR ======'

KERNEL=$(uname -r | cut -d. -f1-2)
MAJOR=$(printf '%s' "$KERNEL" | cut -d. -f1)
MINOR=$(printf '%s' "$KERNEL" | cut -d. -f2)

if [ "$MAJOR" -lt 4 ] || { [ "$MAJOR" -eq 4 ] && [ "$MINOR" -lt 9 ]; }; then
    echo "[!] 内核 $KERNEL 低于 4.9,不支持 BBR"
    exit 1
fi

if [ ! -d /proc/sys/net/ipv4 ]; then
    echo '[!] 找不到 /proc/sys/net/ipv4,这看起来不是 Linux'
    exit 1
fi

cat > "$CONF" <<'CONF_EOF'
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
CONF_EOF

echo "[*] 已写入 $CONF"
sysctl --system >/dev/null

echo ''
echo '====== 当前状态 ======'
echo "  队列规则:$(sysctl -n net.core.default_qdisc)"
echo "  拥塞控制:$(sysctl -n net.ipv4.tcp_congestion_control)"

if [ "$(sysctl -n net.ipv4.tcp_congestion_control)" = 'bbr' ]; then
    echo '  [√] BBR 已启用'
else
    echo '  [!] BBR 未生效,检查内核是否编了 tcp_bbr 模块'
fi

元ファイルをダウンロード