How to Enable BBR on Ubuntu 24.04 (Step-by-Step)

Enable BBR on Ubuntu 24.04 with persistent kernel settings, fq queueing, live checks, and practical fixes for missing modules or reboot issues.
A glowing orange network path curves around a server rack and cyan speed gauge on a midnight-blue background.

To enable BBR on Ubuntu 24.04, load the kernel module, select BBR with sysctl, and pair it with the fq queueing discipline. This takes about five minutes and leaves you with a reboot-safe configuration without opening another firewall port.

Prerequisites

  • An Ubuntu 24.04 LTS (Noble Numbat) VPS; the original release uses a 6.8 kernel, although cloud and HWE kernels may be newer.
  • SSH access as root, or a normal account with working sudo privileges.
  • Permission to load kernel modules and write files below /etc; an unprivileged container may not provide those capabilities.
  • No domain, web server, extra RAM, or extra disk is required because BBR is a kernel-level TCP setting.
  • If you need the server first, choose a Linux VPS from VPSLake and install Ubuntu 24.04.

BBR changes TCP congestion control and packet pacing; it cannot raise your plan’s bandwidth limit. The result depends on the route, the remote peer, and the application making the connection.

Step 1: Confirm Ubuntu 24.04 and inspect the current TCP settings

Check the release and running kernel before changing anything so a provider image or custom kernel does not surprise you.

. /etc/os-release && printf '%s\n' "$PRETTY_NAME"
uname -r
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control

The first line should identify Ubuntu 24.04 LTS, and the kernel will normally begin with 6.8 on the original Noble image. A fresh system commonly selects cubic; BBR may already be listed if the provider kernel has registered it.

Ubuntu 24.04.x LTS
6.8.0-...-generic
net.ipv4.tcp_available_congestion_control = reno cubic
net.ipv4.tcp_congestion_control = cubic

Kernel patch numbers and the available algorithm order vary. Do not replace a working newer cloud or HWE kernel just to match the sample output.

Step 2: Load BBR for the current boot

The kernel must register BBR before Ubuntu can select it through sysctl, so load the module and inspect the available algorithms immediately.

sudo modprobe tcp_bbr
sysctl net.ipv4.tcp_available_congestion_control

The second command should now include bbr:

net.ipv4.tcp_available_congestion_control = reno cubic bbr

If bbr was already present, modprobe simply confirms that the running kernel can use it. The exact order of the names is not important.

Step 3: Save BBR and fq across reboots

Keep the module request and kernel parameters in separate files so you can audit or remove this tuning without overwriting Ubuntu’s other settings.

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

The first file asks systemd-modules-load to load BBR during later boots. The second selects BBR for new TCP connections and sets fair queueing as the default scheduler; the final command applies both values now.

Successful output looks like this:

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

Ubuntu 24.04’s release kernel is 6.8, but later point updates and hardware-enable stacks can use a newer supported kernel. The Ubuntu 24.04 release notes explain the Noble kernel baseline, while the Linux kernel IP sysctl reference documents the TCP controls used here.

Step 4: Check the queue on the live network interface

net.core.default_qdisc controls the default for interfaces created later; tc shows whether the interface already carrying your SSH traffic is using fq right now.

MAIN_IFACE=$(ip -o route show default | awk '$1 == "default" {print $5; exit}')
printf '%s\n' "$MAIN_IFACE"
tc qdisc show dev "$MAIN_IFACE"

The first command should print a device such as ens3 or eth0. If the last command reports fq_codel or another root queue, replace it for the current boot:

sudo tc qdisc replace dev "$MAIN_IFACE" root fq
tc qdisc show dev "$MAIN_IFACE"

Look for qdisc fq in the result:

ens3
qdisc fq 0: root refcnt 2 limit 10000p buckets 1024

The interface name and queue details differ between VPS images. The tc replacement is runtime state; the saved default_qdisc value is what the kernel uses when the interface is initialized again. Do not bring the interface down over SSH unless you have the VPS control panel console available.

Verify BBR on Ubuntu 24.04

Run one final check to confirm the active algorithm, persistent file, module availability, and qdisc on the default-route interface.

MAIN_IFACE=$(ip -o route show default | awk '$1 == "default" {print $5; exit}')
sysctl net.ipv4.tcp_congestion_control net.core.default_qdisc
sysctl net.ipv4.tcp_available_congestion_control
grep -Ev '^[[:space:]]*(#|$)' /etc/sysctl.d/99-tcp-bbr.conf
grep -Fx 'tcp_bbr' /etc/modules-load.d/tcp-bbr.conf
tc qdisc show dev "$MAIN_IFACE"

You want tcp_congestion_control = bbr, default_qdisc = fq, bbr in the available list, both assignments from 99-tcp-bbr.conf, the line tcp_bbr, and qdisc fq for the active device. These values govern new TCP connections, so reconnect SSH or restart a long-lived service before comparing traffic.

Troubleshooting

modprobe: FATAL: Module tcp_bbr not found

The running kernel may lack its matching extra modules package, or the provider may be using a custom kernel without BBR. Install the modules for the current Ubuntu kernel and try again:

sudo apt update
sudo apt install -y linux-modules-extra-$(uname -r)
sudo modprobe tcp_bbr

If APT cannot find that exact package, install Ubuntu’s generic kernel, reboot, and repeat Step 2:

sudo apt install -y linux-generic
sudo reboot

If the server still boots a provider-managed kernel, ask the provider for an Ubuntu 24.04 kernel with BBR support rather than forcing an unrelated module package.

sysctl: cannot set net.ipv4.tcp_congestion_control

BBR was not registered when the sysctl file was applied. Run sudo modprobe tcp_bbr, confirm that bbr appears in net.ipv4.tcp_available_congestion_control, and reload the saved file:

sudo sysctl -p /etc/sysctl.d/99-tcp-bbr.conf

If the error returns after a reboot, check that /etc/modules-load.d/tcp-bbr.conf contains exactly tcp_bbr.

tc: command not found

The minimal image is missing iproute2, which supplies both ip and tc. Install it, then repeat Step 4:

sudo apt update
sudo apt install -y iproute2

tc qdisc show still reports fq_codel

Changing the default scheduler does not necessarily replace the queue already attached to an existing interface. Run the tc qdisc replace command from Step 4 with the real default-route interface; if the command returns Operation not permitted, the VPS does not grant the traffic-control capability and the provider must change it from the host.

FAQ

Does enabling BBR require a firewall rule?

No. BBR is a kernel TCP setting, not a daemon, so it does not listen on a port or change your existing UFW policy. Keep only the inbound rules your applications actually need.

Will BBR make every download faster?

Not necessarily. BBR can improve how TCP uses some congested paths, but the remote server, route, transfer size, and VPS bandwidth cap still matter. Compare the application you care about over several representative connections.

Does BBR affect UDP applications?

No. net.ipv4.tcp_congestion_control applies to TCP only. UDP software must implement its own rate or congestion control, so this setting does not tune DNS, WireGuard, VoIP, or game traffic.

How do I switch back to CUBIC?

Change net.ipv4.tcp_congestion_control = bbr to cubic in /etc/sysctl.d/99-tcp-bbr.conf, then run sudo sysctl -p /etc/sysctl.d/99-tcp-bbr.conf. You can leave tcp_bbr in the module-load file because loading the module does not select it as the active algorithm.

Samrat Ghosh
Written by

Samrat Ghosh

Founder & Infrastructure Engineer

Samrat Ghosh is the founder of VPSLake, where he builds and runs the remote desktop and VPS hosting infrastructure the company is built on. He writes hands-on guides about RDP, Windows Server, VPS management and secure remote access - the practical documentation he wishes had…

Previous Article

How to Enable BBR on Ubuntu 22.04 (Step-by-Step)

Next Article

Fix CredSSP Encryption Oracle Remediation Error in RDP

Write a Comment

Leave a Comment

Your email address will not be published. Required fields are marked *

Subscribe to our Newsletter

Subscribe to our email newsletter to get the latest posts delivered right to your email.
Pure inspiration, zero spam ✨