> ## Documentation Index
> Fetch the complete documentation index at: https://help.freakhosting.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Enable BBR TCP Congestion Control on Linux

> Enable BBR on Linux: set net.core.default_qdisc=fq and net.ipv4.tcp_congestion_control=bbr in /etc/sysctl.d/, run sudo sysctl --system, and confirm with sysctl.

To enable BBR on Linux, create `/etc/sysctl.d/99-bbr.conf` with `net.core.default_qdisc=fq` and `net.ipv4.tcp_congestion_control=bbr`, then run `sudo sysctl --system`. Check it with `sysctl net.ipv4.tcp_congestion_control`, which should print `bbr`. BBR needs kernel 4.9 or newer, so every current Ubuntu, Debian, AlmaLinux and Rocky release supports it. It affects new TCP connections only.

| Difficulty | Time | Works on | Needs |
| - | - | - | - |
| Beginner | 5 minutes | Ubuntu 22.04/24.04, Debian 12/13, AlmaLinux/Rocky 9/10 | sudo access, a kernel you control (KVM VPS or dedicated server) |

## Before you start

* **TCP congestion control** decides how fast a server sends data and how it reacts to loss. The algorithm your server uses now is shown by the first command below (often `cubic`). **BBR**, developed by Google, estimates the available bandwidth and round-trip time instead of waiting for packet loss, which often gives higher throughput on long or slightly lossy paths.
* BBR changes how **your server sends** TCP data, such as web pages, downloads and file transfers. It doesn't change incoming traffic or UDP traffic, such as most game server traffic.
* Commands use `sudo`; as root, leave it out.

## How to check which algorithm you use now

```bash theme={null}
sysctl net.ipv4.tcp_congestion_control
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.core.default_qdisc
```

```text theme={null}
net.ipv4.tcp_congestion_control = cubic
net.ipv4.tcp_available_congestion_control = reno cubic
net.core.default_qdisc = fq_codel
```

If `bbr` isn't in the available list yet, the kernel module isn't loaded. The steps below load it.

## How to enable BBR

**1. Check the kernel version**

```bash theme={null}
uname -r
```

BBR is included in Linux 4.9 and later. Ubuntu 24.04, Debian 13 and AlmaLinux/Rocky 9 and 10 all ship newer kernels.

**2. Load the BBR module**

```bash theme={null}
sudo modprobe tcp_bbr
echo "tcp_bbr" | sudo tee /etc/modules-load.d/bbr.conf
```

The second line loads the module at every boot.

**3. Create the sysctl file**

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

Files in `/etc/sysctl.d/` are read at boot on every systemd distribution, so this survives reboots.

**4. Apply the settings**

```bash theme={null}
sudo sysctl --system
```

The output lists each file it reads, ending with your `99-bbr.conf` values.

## How to check it worked

```bash theme={null}
sysctl net.ipv4.tcp_congestion_control
sysctl net.core.default_qdisc
```

```text theme={null}
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
```

Existing connections keep their old algorithm. To see new connections using BBR, open a new SSH session and run:

```bash theme={null}
ss -ti | grep -o bbr | head -1
```

## Why set the qdisc to fq?

A **qdisc** (queueing discipline) decides how outgoing packets wait in the queue. Early BBR needed the `fq` qdisc to pace packets. According to Google's [BBR quick-start](https://github.com/google/bbr/blob/master/Documentation/bbr-quick-start.md), Linux 4.20 and later can pace packets inside TCP, so any qdisc works, but `fq` still performs better on busy servers. That's why this guide sets both. Ubuntu's default is `fq_codel`.

## How to undo BBR

```bash theme={null}
sudo rm /etc/sysctl.d/99-bbr.conf /etc/modules-load.d/bbr.conf
sudo sysctl -w net.ipv4.tcp_congestion_control=cubic
sudo sysctl --system
```

The qdisc returns to your distribution's default after a reboot.

> [!NOTE]
>
> On container-based virtualisation (for example LXC or OpenVZ), the kernel belongs to the host and you usually can't change these settings. A KVM VPS or a dedicated server runs its own kernel.

## Frequently asked questions

### Does BBR reduce ping in games?

No. BBR changes how fast TCP sends data; it doesn't shorten the network path, and most game traffic uses UDP. It can help downloads, web pages and file transfers from your server, especially to distant users.

### Should I use BBR or cubic?

On servers that send a lot of data over long distances, BBR often gives better throughput. Measure before and after with [iperf3](https://help.freakhosting.com/portals/other/how-to-test-network-speed-with-iperf3.md) from a distant machine and keep whichever performs better for you.

### Do I need to set BBR on the client too?

No. Congestion control is chosen by the sender. Enabling it on the server affects data the server sends.

### Is BBR available on Windows Server?

This guide covers Linux only. Windows Server has its own TCP stack and settings.

## Related guides

> [card] [VPS and dedicated server guides](https://help.freakhosting.com/portals/other/vps-and-dedicated-server-guides.md)
>
> Every guide in this section.

> [card] [Kernel settings with sysctl](https://help.freakhosting.com/portals/other/how-to-secure-shared-memory-and-kernel-settings-with-sysctl.md)
>
> How sysctl files work.

> [card] [Test speed with iperf3](https://help.freakhosting.com/portals/other/how-to-test-network-speed-with-iperf3.md)
>
> Measure the difference.

> [card] [Diagnose network latency](https://help.freakhosting.com/portals/other/how-to-diagnose-network-latency-issues.md)
>
> Find where lag starts.

> [card] [Tune Linux for game servers](https://help.freakhosting.com/portals/other/how-to-tune-linux-for-game-servers.md)
>
> More performance settings.

***

> [!NOTE]
>
> **Checked against the [Linux kernel IP sysctl documentation](https://docs.kernel.org/networking/ip-sysctl.html) and Google's [BBR quick-start guide](https://github.com/google/bbr/blob/master/Documentation/bbr-quick-start.md)** on 4 November 2026; the check commands (`sysctl`, `ss -ti`) were run on Ubuntu 24.04 LTS; the steps that change kernel settings were not run there. Commands can differ on other distributions or releases.

> [!NOTE]
>
> ### Need Extra Help?
>
> If you encounter any issues, our support team is ready to assist:
>
> * **Live Chat:** Quick assistance via our website.
> * **Support Ticket:** [Open a Ticket](https://freakhosting.com/clientarea/submitticket.php)
> * **Discord:** [Join our Community](https://discord.gg/freakhosting)
> * **Email:** [support@freakhosting.com](mailto:support@freakhosting.com)

> [!TIP]
>
> ### Save on Your Hosting
>
> Ready to upgrade your hosting? Use code **KB20** at checkout for **20% off** your first order!

***

**Last Updated:** November 2026


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.