Debian’s default TCP congestion control algorithm, CUBIC, relies on packet loss to detect network congestion. That works fine on local networks, but high-latency links, lossy connections, and long-distance transfers suffer because CUBIC backs off too aggressively. Google’s BBR (Bottleneck Bandwidth and Round-trip propagation time) takes a different approach: it measures actual bandwidth and round-trip time to keep throughput high without waiting for packets to drop. You can enable BBR on Debian with a kernel module load and two sysctl settings that persist across reboots.
BBR ships as a kernel module in every current Debian release. The setup covers loading the module, configuring sysctl, and verifying the change is active.
Check Current TCP Congestion Control on Debian
Before enabling BBR, update your system with sudo apt update && sudo apt upgrade, then check which congestion control algorithm is active:
Commands below use
sudofor system changes. If your user account lacks sudo access, follow the guide to add a user to sudoers on Debian first.
sysctl net.ipv4.tcp_congestion_control
If BBR is already active, the output reads:
net.ipv4.tcp_congestion_control = bbr
If you see cubic or reno instead, BBR is not enabled and you can proceed to activate it.
Load the BBR Kernel Module on Debian
BBR requires kernel 4.9 or later, which all current Debian releases (13, 12, and 11) include. Load the BBR module to confirm your kernel supports it:
sudo modprobe tcp_bbr
No output means the module loaded successfully. Confirm BBR appears among the available congestion control algorithms:
cat /proc/sys/net/ipv4/tcp_available_congestion_control
reno cubic bbr
If modprobe fails or bbr does not appear, your kernel may lack BBR support. You can install the latest Linux kernel on Debian or a performance-focused kernel like XanMod or Liquorix, which include BBR support by default.
Configure Persistent BBR Settings on Debian
With BBR confirmed available, configure it as the permanent default. Create a dedicated sysctl drop-in file in /etc/sysctl.d/ rather than editing /etc/sysctl.conf directly. The first line sets the Fair Queue (fq) packet scheduler, which BBR needs for proper pacing. The second line sets BBR as the default congestion control algorithm. The command pipes through sudo tee because a plain redirect like > does not inherit sudo privileges:
cat <<EOF | sudo tee /etc/sysctl.d/99-bbr.conf
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
A dedicated file at /etc/sysctl.d/99-bbr.conf is easier to manage and remove than lines buried in /etc/sysctl.conf. These settings apply to both IPv4 and IPv6 TCP connections.
Because BBR is a loadable kernel module (not built-in) on Debian’s stock kernels, it must be loaded before the sysctl settings can take effect at boot. Create a module configuration file so the system loads tcp_bbr automatically on every startup:
echo 'tcp_bbr' | sudo tee /etc/modules-load.d/bbr.conf
The /etc/modules-load.d/ directory is the standard location for module loading configuration on modern Debian. The system reads it during early boot, before sysctl settings are applied.
Apply BBR Configuration Changes
Reload the sysctl configuration to apply changes immediately without a reboot. The --system flag loads all configuration files from /etc/sysctl.d/:
sudo sysctl --system
Look for your BBR settings in the output:
* Applying /etc/sysctl.d/99-bbr.conf ... net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr
Additional lines from other configuration files may appear, which is normal.
Verify BBR is Active on Debian
Confirm BBR is the active congestion control algorithm:
sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = bbr
Also confirm the Fair Queue scheduler is set:
sysctl net.core.default_qdisc
net.core.default_qdisc = fq
To verify BBR is managing actual network connections, check an active TCP session:
ss -ti | grep -i bbr
Active connections established after enabling BBR show bbr as the congestion control algorithm along with BBR-specific diagnostics:
bbr wscale:8,7 rto:208 rtt:4.508/8.149 ato:40 mss:1460 pmtu:1500 rcvmss:1460 advmss:1460 cwnd:21 bbr:(bw:160Mbps,mrtt:0.073,pacing_gain:2.88672,cwnd_gain:2.88672)
The bbr:(bw:...) section confirms BBR is actively pacing that connection. If you see no output, open a new connection (such as a fresh SSH session) and check again, since connections established before BBR was enabled continue using their original algorithm.
Troubleshoot BBR on Debian
BBR Module Not Found
If modprobe tcp_bbr fails with a “module not found” error:
modprobe: FATAL: Module tcp_bbr not found in directory /lib/modules/...
Your kernel does not include BBR support. Install XanMod on Debian or install Liquorix on Debian for a kernel that includes BBR support.
BBR Settings Reset After Reboot
If BBR reverts to CUBIC after a reboot, verify both configuration files exist:
cat /etc/sysctl.d/99-bbr.conf
net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr
cat /etc/modules-load.d/bbr.conf
tcp_bbr
If the sysctl file is missing, re-run the configuration commands from the earlier section. If the module loading file is missing, the kernel module does not load at boot and the sysctl settings fail silently. Create it with echo 'tcp_bbr' | sudo tee /etc/modules-load.d/bbr.conf and reboot to confirm persistence.
Disable BBR and Revert to CUBIC on Debian
To disable BBR and return to the default CUBIC algorithm, remove both configuration files:
The following commands modify system network configuration. While reverting to CUBIC is safe, ensure you have console access to your server in case of connectivity issues during remote sessions.
sudo rm /etc/sysctl.d/99-bbr.conf
sudo rm /etc/modules-load.d/bbr.conf
Apply the default settings:
sudo sysctl -w net.ipv4.tcp_congestion_control=cubic
sudo sysctl -w net.core.default_qdisc=fq_codel
Verify the change:
sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = cubic
BBR on Debian FAQ
CUBIC detects congestion by waiting for packet loss, then reducing its send rate. BBR measures actual available bandwidth and round-trip time to pace data without waiting for drops. On high-latency or lossy links, BBR typically maintains higher throughput because it does not back off as aggressively as CUBIC.
Yes. All three Debian releases ship kernels that include tcp_bbr as a loadable module: Debian 13 (kernel 6.12), Debian 12 (kernel 6.1), and Debian 11 (kernel 5.10). The setup commands are identical across all versions.
No. Debian’s stock kernels include BBR v1 only. For BBR v3, install XanMod on Debian, which ships it by default on its MAIN and RT variants.
Conclusion
BBR is running as the default TCP congestion control on Debian, with the Fair Queue scheduler handling packet pacing and both settings persisting across reboots. To measure the difference, compare throughput with iperf3 or latency with ping before and after the change. Server administrators who install Nginx on Debian or install Apache on Debian will see the most impact on high-latency client connections. For even more throughput, install XanMod on Debian for BBR v3 support.
Hi, I am on debian 12.10 but I have the error below when trying to enable bbr.
jq@debian:~$ sysctl net.ipv4.tcp_congestion_control
bash: sysctl: command not found
Thanks
use sudo for debian because privilege sensitive commands are placed in /sbin in Debian.