Если вы настроили VPN (O******, W***** Op****) или прокси-сервер, но сталкиваетесь с низкой скоростью передачи данных при хорошем канале, причина часто кроется не в ширине канала, а в устаревших алгоритмах управления перегрузкой TCP.
В этой инструкции мы разберем, как включить алгоритм TCP BBR от Google, который де-факто стал стандартом для оптимизации высоконагруженных и удаленных серверов.
Что такое TCP BBR и зачем он нужен?
По умолчанию в большинстве дистрибутивов Linux используется алгоритм TCP CUBIC. Он был создан в эпоху проводных сетей и работает по принципу "loss-based" (основан на потере пакетов):
Сервер наращивает скорость передачи.
Как только теряется хотя бы один пакет, CUBIC считает, что канал забит, и резко сбрасывает скорость (обычно в 2 раза).
Затем начинается медленный набор скорости заново.
Проблема: В современных сетях (особенно мобильных и международных) потеря пакетов часто носит случайный характер и не означает, что канал перегружен. В результате CUBIC «тормозит» там, где можно работать на полную мощность.
Решение (TCP BBR): Algorithm BBR (Bottleneck Bandwidth and Round-trip propagation time), разработанный Google, использует другой подход. Он моделирует сеть, постоянно измеряя два параметра:
BBR игнорирует случайные потери пакетов и поддерживает скорость передачи на уровне реальной пропускной способности канала. Это дает прирост скорости от 30% до 1000% на нестабильных соединениях.
Инструкция по включению
Шаг 0: Проверка версии ядра
Для работы BBR требуется ядро Linux версии 4.9 или выше. Абсолютное большинство современных систем (Ubuntu 18.04+, Debian 10+, CentOS 8+) уже соответствуют этому требованию.
Проверьте версию ядра командой:
uname -r
Если версия ниже 4.9, вам необходимо сначала обновить ядро ОС.
Шаг 1: Включение BBR
Нам нужно изменить два параметра ядра через sysctl.
Изменить планировщик пакетов (Queue Discipline) на fq (Fair Queueing), так как BBR требует его для корректной работы.
Включить сам алгоритм bbr.
# Добавляем настройки в конфигурационный файл
echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
# Применяем изменения без перезагрузки
sudo sysctl -p
Шаг 2: Проверка результата
Убедитесь, что настройки применились корректно.
Проверяем, какой алгоритм управления перегрузкой используется сейчас:
sysctl net.ipv4.tcp_congestion_control
Проверяем, запущен ли модуль BBR:
lsmod | grep bbr
Ожидаемый вывод (пример):
tcp_bbr 20480 14
Результаты
После включения BBR перезагрузка сервера не требуется, изменения вступают в силу мгновенно для новых соединений.
Что вы заметите:
Стабильность: YouTube и потоковое видео перестанут буферизироваться.
Скорость: Speedtest покажет результаты, близкие к заявленным хостером, даже если клиент находится на другом континенте.
Плавность: Исчезнут резкие провалы скорости при использовании мобильного интернета.
Техническое примечание (для администраторов)
Почему fq, а не fq_codel? Хотя fq_codel часто является дефолтным в современных дистрибутивах, для работы BBR необходим именно планировщик fq, так как он обеспечивает pacing (равномерную подачу пакетов), на который опирается модель BBR.
Совместимость: BBR работает только на стороне отправителя (в данном случае — вашего VPN-сервера). Клиентам (телефонам, ноутбукам) ничего настраивать не нужно.