How to Enable BBR on Debian (13, 12, 11)

Last updated Tuesday, March 10, 2026 12:32 pm 5 min read 2 comments

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 sudo for 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

What is the difference between BBR and CUBIC congestion control?

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.

Does BBR work on Debian 13, 12, and 11?

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.

Does BBR2 or BBR v3 ship with Debian’s default kernel?

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.

Search LinuxCapable

Need another guide?

Search LinuxCapable for package installs, commands, troubleshooting, and follow-up guides related to what you just read.

Found this guide useful?

Support LinuxCapable to keep tutorials free and up to date.

Buy me a coffee Buy me a coffee

2 thoughts on “How to Enable BBR on Debian (13, 12, 11)”

  1. 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

    Reply
Before commenting, please review our Comments Policy.
Formatting tips for your comment

You can use basic HTML to format your comment. Useful tags currently allowed:

You type Result
<code>command</code> command
<strong>bold</strong> bold
<em>italic</em> italic
<blockquote>quote</blockquote> quote block

Leave a Comment

We read and reply to every comment - let us know how we can help or improve this guide.

Let us know you are human: