BBR — це сучасний алгоритм керування перевантаженнями TCP, який часто дає вищу пропускну здатність і нижчі затримки на реальних мережах. Нижче — простий і безпечний шлях, як увімкнути його у вашому Linux, перевірити результат і за потреби швидко відкотитися. Поїхали 🚀

Що таке TCP BBR і як це працює

TCP BBR (Bottleneck Bandwidth and RTT) оцінює пропускну здатність вузького місця та мінімальний RTT, намагаючись тримати черги короткими й лінк — максимально завантаженим. На відміну від CUBIC/reno, BBR не покладається на втрати пакетів як на головний сигнал. У типовій інтернет-мережі це дає кращий баланс між швидкістю та latency — саме те, що потрібно для стрімінгів, веб‑сервісів і "важких" копіювань.

Перевірка підтримки та поточної конфігурації

Підтримка TCP BBR є в mainline Linux, починаючи з ядра 4.9 (BBR v1). Переконайтеся, що ваш дистрибутив має відповідне ядро, а також гляньте, який алгоритм використовується зараз. Це корисно і для Linux моніторинг змін до та після налаштування.

uname -r

# Переглянути доступні та активний алгоритми
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control

# Якщо модуль BBR збірний, підвантажити його (необов'язково)
sudo modprobe tcp_bbr
lsmod | grep bbr || echo "tcp_bbr не як модуль або не завантажений"

# Переглянути qdisc на інтерфейсі (замініть eth0 на свій)
sudo tc -s qdisc show dev eth0

Ідеальна пара для BBR — це fq як default qdisc. Якщо бачите fq_codel чи pfifo_fast, ми це виправимо в наступному розділі.

Як увімкнути BBR назавжди (безболісний How‑to)

Крок 1. Створити постійний sysctl-файл

Це універсально для більшості дистрибутивів (Debian/Ubuntu, RHEL/Fedora, Arch та ін.).

sudo tee /etc/sysctl.d/99-bbr.conf >/dev/null <<'EOF'
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

# Застосувати конфігурацію зараз
sudo sysctl --system

Перевіряємо, що все спрацювало:

sysctl net.core.default_qdisc
sysctl net.ipv4.tcp_congestion_control

Крок 2. Активувати без перезавантаження (якщо треба негайно)

Якщо ви не хочете чекати ребута, увімкніть це в рантаймі. Зверніть увагу: зміна default_qdisc вплине на нові інтерфейси/сокети; для вже живих інтерфейсів замінимо qdisc вручну.

# Увімкнути BBR і fq просто зараз
sudo sysctl -w net.core.default_qdisc=fq
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

# Замінити qdisc на конкретному інтерфейсі (підставте ваш dev)
sudo tc qdisc replace dev eth0 root fq

Перевірка в живих з’єднаннях

Нове з'єднання має показувати cong bbr. Для існуючих може лишатися старий алгоритм до перепідключення.

ss -ti | grep -i cong || echo "Поки що немає активних TCP-сокетів"

Перевірка ефекту та Linux моніторинг

Для чесного заміру зробіть бенчмарк до/після. Це вписується і в план оптимізація продуктивності на вашому сервер Linux.

iperf3: синтетичний тест

# На віддаленій машині (сервер тесту)
iperf3 -s

# На клієнті (можна задати конкретно BBR для сесії)
iperf3 -C bbr -c SERVER_IP -t 20 -P 4

HTTP-завантаження: реалістичний замір

curl -o /dev/null -s -w 'time_connect: %{time_connect}\n time_appconnect: %{time_appconnect}\n time_starttransfer: %{time_starttransfer}\n speed_download: %{speed_download}\n' \
  https://speed.hetzner.de/100MB.bin

Також стежте за чергами qdisc та навантаженням CPU/IRQ. У пригоді стане tc -s qdisc, а також класичні інструменти htop/top у терміналі Linux.

Альтернативні способи та коли BBR не зайде

  • CUBIC — дефолт у багатьох ядрах. На локальних мережах із дуже низькими затримками виграші BBR можуть бути незначними.
  • Якщо у вас чіткий shaping/QoS на маршрутизаторі, або суворі правила AQM (наприклад, лише fq_codel), перевірте сумісність політик.
  • На деяких VPS провайдери можуть обмежувати модулі або qdisc у віртуалізації — перевірте документацію.
  • BBRv2 у mainline ще експериментальний/поза ядром: не раджу для продакшену.

GUI-спосіб: через Webmin

Якщо вам зручніше в GUI, Webmin дозволяє змінювати sysctl через браузер (зручно для віддалених мережеві налаштування).

# Debian/Ubuntu
sudo apt update
sudo apt install -y wget apt-transport-https gpg
wget -qO- http://www.webmin.com/jcameron-key.asc | sudo gpg --dearmor -o /usr/share/keyrings/webmin.gpg
echo 'deb [signed-by=/usr/share/keyrings/webmin.gpg] http://download.webmin.com/download/repository sarge contrib' | \
  sudo tee /etc/apt/sources.list.d/webmin.list >/dev/null
sudo apt update && sudo apt install -y webmin

# RHEL/Fedora
sudo dnf install -y https://download.webmin.com/download/rpm/webmin-current.rpm

Далі в Webmin зайдіть: System → Linux Kernel → sysctl. Додайте/змініть:

  • net.core.default_qdisc = fq
  • net.ipv4.tcp_congestion_control = bbr

Застосуйте зміни і перевірте з’єднання. Готово 🙂

FAQ

Чи безпечно вмикати BBR у продакшені?

Так, BBR v1 масово використовується і вважається стабільним. Рекомендую поетапний rollout і заміри до/після.

Чи потрібен саме qdisc fq?

Так, пара BBR+fq дає найкращі результати. Можна лишити fq_codel, але потенційний профіт буде нижчим.

BBR збільшує використання CPU?

Зазвичай — не критично. На швидких лінках можливе невелике зростання навантаження, стежте через Linux моніторинг (htop, sar).

Як швидко відкотитися?

sudo sysctl -w net.ipv4.tcp_congestion_control=cubic
# і повернути qdisc при потребі
sudo tc qdisc replace dev eth0 root fq_codel

Чи працює BBR з VPN (WireGuard/OpenVPN)?

Так, BBR впливає на TCP-трафік поверх тунелю. WireGuard — UDP, але корисний ефект видно для TCP всередині тунелю.

Що з Docker/Kubernetes?

Алгоритм задається на рівні network namespace. За замовчуванням контейнери наслідують налаштування хоста. Для ізольованих кейсів можна задати --sysctl net.ipv4.tcp_congestion_control=bbr для контейнера.

Як побачити, що конкретне з’єднання реально на BBR?

ss -ti dst <IP> | grep -i cong

Чи впливає BBR на firewall або безпеку?

Ні, це транспортний алгоритм. Ваші правила firewall та політики безпеки не змінюються.

Порада від Kernelka

Зробіть невеликий чекліст: заміри (iperf3/curl) до/після, збережіть скріни/вивід, відкрийте тикет команді з коротким підсумком. Якщо це великий сервер Linux із високим навантаженням — розгорніть BBR поетапно 10% → 50% → 100% і тримайте під рукою команду відкату. Маленький контроль — велика впевненість 🛠️

Підсумок

  • BBR дає кращий баланс між throughput і latency у більшості інтернет-мереж.
  • Увімкнення просте: net.core.default_qdisc=fq і net.ipv4.tcp_congestion_control=bbr.
  • Перевіряйте ефект через iperf3, curl та ss -ti; відстежуйте через інструменти Linux моніторинг.
  • За потреби — миттєвий відкат на CUBIC однією командою.
  • Гарний вибір для продакшену й мережеві налаштування на будь-якому сервер Linux.