Linux VPS 開啟 TCP BBR 擁塞控制教學(Debian、Ubuntu、CentOS、Rocky Linux)

6 分鐘閱讀 16203 次閱讀 163
本文目錄

TCP BBR 是 Google 開發的擁塞控制演算法,自 Linux 核心 4.9 起內建。在高延遲的長距離線路上,例如從 JUSTG 約翰尼斯堡或莫斯科機房的 VPS 傳送資料到亞洲用戶,預設的 CUBIC 演算法只要遇到少量封包遺失就會大幅降速;BBR 則會估算路徑的實際頻寬與往返時間,通常能讓網站、下載、API 與檔案傳輸的 TCP 傳輸速度明顯提升。本文說明如何在 Debian、Ubuntu、CentOS、Rocky Linux 與 AlmaLinux 上以 sysctl 原生開啟 TCP BBR,並驗證是否生效。

為什麼 TCP BBR 能改善長距離線路

CUBIC 這類以遺失為基礎的演算法,會把每一次封包遺失視為壅塞並降低傳送速率。在延遲 150-300 毫秒的跨洲線路上,每次降速後要很久才能恢復,因此單一連線往往跑不滿伺服器的頻寬。BBR 會建立瓶頸頻寬與最小往返時間的模型,依此控制送出封包的節奏。它只改變伺服器端的傳送方式,訪客端不需要安裝任何東西。

步驟 1:檢查核心版本與虛擬化類型

以 root(或具 sudo 權限的使用者)登入 VPS,確認核心版本。BBR 需要 4.9 以上的核心;Debian 11/12、Ubuntu 20.04/22.04/24.04、Rocky Linux 8/9、AlmaLinux 8/9 等目前版本都符合。

uname -r
systemd-detect-virt

若 systemd-detect-virt 顯示 kvm、xen 或 vmware,代表你可以自行控制核心,可以繼續操作。OpenVZ 或 LXC 容器使用的是母機核心,無法在容器內開啟 BBR。

步驟 2:確認系統支援 BBR 模組

列出核心可用的擁塞控制演算法;如果清單中沒有 bbr,先載入模組:

sysctl net.ipv4.tcp_available_congestion_control
modprobe tcp_bbr
sysctl net.ipv4.tcp_available_congestion_control

常見的輸出為 net.ipv4.tcp_available_congestion_control = reno cubic bbr。如果 modprobe 提示找不到模組,表示核心太舊,請參考步驟 6。

步驟 3:用 sysctl 開啟 TCP BBR

BBR 搭配 fq(Fair Queue)佇列排程效果最好。建議建立獨立的設定檔,重新開機後仍會生效,日後也方便移除。Debian/Ubuntu 與 CentOS/Rocky/AlmaLinux 指令完全相同:

printf 'net.core.default_qdisc=fq\nnet.ipv4.tcp_congestion_control=bbr\n' | sudo tee /etc/sysctl.d/99-bbr.conf
sudo sysctl --system

設定會立即套用到新的連線,不需要重新開機;已經建立的連線要重新連線後才會改用 BBR。

步驟 4:驗證 BBR 是否已啟用

執行以下指令檢查:

sysctl net.ipv4.tcp_congestion_control
sysctl net.core.default_qdisc
lsmod | grep bbr

正常應看到 net.ipv4.tcp_congestion_control = bbr 與 net.core.default_qdisc = fq。lsmod 通常會出現含有 tcp_bbr 的一行;但部分核心把 BBR 直接編譯進核心而非模組,只要 sysctl 顯示 bbr,lsmod 沒有輸出也屬正常。想查看實際連線是否使用 BBR,可執行 ss -ti,在輸出中尋找 bbr。

步驟 5:測試實際效果

建議從距離伺服器較遠的用戶端比較開啟前後的速度,例如用亞洲的電腦測試約翰尼斯堡的 VPS。可使用 iperf3:

# Debian / Ubuntu
apt install -y iperf3
# CentOS / Rocky / AlmaLinux
dnf install -y iperf3

# 在伺服器上
iperf3 -s
# 在用戶端(請換成你的伺服器 IP)
iperf3 -c 203.0.113.10 -t 30 -R

測試期間才在防火牆開放 TCP 5201 連接埠,測完記得關閉。結果會受時段與用戶端網路影響,建議多測幾次再比較。

若要改回預設演算法:刪除 /etc/sysctl.d/99-bbr.conf,再執行 sysctl -w net.ipv4.tcp_congestion_control=cubic 與 sysctl --system。

步驟 6:非常舊的核心(舊方法)

CentOS 6/7(核心 2.6/3.10)或 Debian 8 等舊系統沒有內建 BBR。過去社群常用 Teddysun 製作的一鍵腳本,它會安裝較新的主線核心並同時開啟 BBR,且從不支援 OpenVZ。現在我們只把這種做法視為舊方法:在已停止維護的發行版上更換核心,可能導致 VPS 無法開機,也收不到安全更新。較安全的方式是先備份資料,再從客戶中心把 VPS 重灌成目前的作業系統版本,接著依照步驟 1-4 操作。

更換核心前務必先備份。如果更換核心後 VPS 無法開機,可能需要重新安裝作業系統。

常見問題

OpenVZ 可以開啟 TCP BBR 嗎?

不行。OpenVZ 等容器平台與母機共用核心,無法在客體內修改擁塞控制。JUSTG 雲端伺服器採用完整虛擬化,可正常依步驟 1-4 設定。

BBR 能加快 UDP 流量嗎?

不能。BBR 只影響伺服器送出的 TCP 連線,UDP 服務以及伺服器接收的流量不會改變。

用戶端也要開啟 BBR 嗎?

不需要。只要在傳送端開啟即可;對網站或下載伺服器來說,傳送端就是你的 VPS。

如果依照本文操作後仍無法解決,請提交工單,JUSTG 技術支援團隊會協助你處理。

这篇文章有帮助吗?