Sunday, October 6, 2024

Hướng dẫn giới hạn băng thông mạng trên Linux bằng Wondershaper và Trickle

-

Tại sao cần giới hạn băng thông mạng? Có nhiều lý do mà bạn cần giới hạn băng thông mạng trong Linux.

Một trong số đó là giá dịch vụ internet ở nơi bạn sống có thể rất cao, và bạn muốn giới hạn băng thông mạng để giảm chi phí sử dụng internet. Dựa trên kinh nghiệm trước đây với Windows, bạn có thể đã sử dụng phần mềm Netlimiter để làm điều này. Tuy nhiên, bây giờ bạn đã chuyển sang sử dụng Linux và muốn tìm một công cụ thay thế Netlimiter trên hệ điều hành này.

Việc giới hạn băng thông cũng hữu ích khi tốc độ internet thấp. Các ứng dụng sẽ cạnh tranh với nhau để sử dụng băng thông, và việc đặt giới hạn băng thông cho một số ứng dụng cụ thể giúp ưu tiên việc sử dụng băng thông.

Trong một trường hợp khác, một quản trị viên máy chủ cần phải giới hạn lưu lượng ra để máy chủ không bị quá tải do hoạt động nặng trong các thời điểm cao điểm.

Trong bài viết này, bạn sẽ tìm hiểu cách giới hạn băng thông mạng trong Linux tổng quan và cho từng ứng dụng cụ thể bằng hai ứng dụng nhẹ và dễ sử dụng.

Để cài đặt Wondershaper, bạn có thể sử dụng trình quản lý gói của Linux của mình. Wondershaper là một ứng dụng mã nguồn mở và nên có sẵn trong tất cả các phiên bản Linux. Dưới đây là cách bạn nên thực hiện việc cài đặt. Trong Ubuntu và các phiên bản dựa trên Debian khác, bạn có thể chạy lệnh sau:

sudo apt install wondershaper

Nếu bạn muốn cài đặt phiên bản mới nhất của Wondershaper từ GitHub, bạn có thể làm như sau.

git clone https://github.com/magnific0/wondershaper.git
cd wondershaper
sudo make install

Mong rằng việc cài đặt này sẽ diễn ra mà không gặp lỗi. Tuy nhiên, cách này không đảm bảo bằng cách cài đặt phiên bản được cung cấp sẵn trong bản phân phối Linux của bạn. Mình đã kiểm tra việc cài đặt này trên Ubuntu 20.04.3 và nó hoạt động tốt. Nhưng nếu bạn gặp vấn đề với phiên bản từ GitHub, bạn có thể gỡ bỏ nó bằng cách chạy lệnh này từ thư mục bạn đã sao chép từ GitHub:

Gỡ bỏ phiên bản từ GitHub (nếu cần).

sudo make uninstall

Nếu bạn quyết định giữ phiên bản từ GitHub của Wondershaper, hãy nhớ rằng, khác với phiên bản đi kèm với bản phân phối Linux của bạn, phiên bản này sẽ không tự động cập nhật khi có phiên bản mới phát hành. Bạn cần phải cập nhật nó thủ công. Bạn có thể làm điều này bằng cách vào thư mục wondershaper, kéo các cập nhật từ GitHub và cài đặt lại.

Cập nhật phiên bản từ GitHub (nếu cần).

cd wondershaper
git pull 
sudo make install

Nếu bạn là người mới sử dụng Linux, mình đề xuất bạn nên tìm hiểu cơ bản về dòng lệnh Linux để hiểu rõ hơn về các lệnh được sử dụng trong quá trình này.

Học cú pháp của Wondershaper.

Tùy thuộc vào phiên bản của Wondershaper, nó có thể có cú pháp khác nhau để cấu hình. Bạn có thể kiểm tra cú pháp bằng lệnh “man”.

man wondershaper

Kết quả sẽ hiển thị một đầu ra tương tự như sau:

Đó chỉ là một chuỗi gồm tên card mạng, giới hạn tốc download/upload trong trường hợp của mình.

wondershaper [interface] [downlink] [uplink]

Các phiên bản gần đây hơn yêu cầu bạn chỉ định tên tùy chọn:

wondershaper -a [interface] -d [downlink] -u [uplink]

Tìm tên card mạng.

Bây giờ, khi bạn đã biết cú pháp của Wondershaper, bạn chỉ cần tìm tên card mạng để đặt giới hạn trên nó. Trong hầu hết các hệ thống Linux bây giờ, bạn có thể liệt kê các card mạng có sẵn bằng lệnh này.

ip addr show

Tuy nhiên, một số hệ thống Linux cũ hơn có thể yêu cầu chạy lệnh “ifconfig” từ gói net-tools. Cài đặt gói net-tools và sử dụng lệnh “ifconfig” (nếu cần):

sudo apt install net-tools
ifconfig

Ví dụ trên hệ thống của mình chỉ có card mạng Ethernet có tên là enp0s3.

Nếu bạn có card Wifi thì bạn cũng có thể thấy card mạng Wi-Fi được liệt kê với tên là wlan0 hoặc tên tương tự.

Kiểm tra Wondershaper.

Sau khi biết tên card mạng, bạn có thể kiểm tra Wondershaper. Ví dụ, hãy đặt giới hạn băng thông là 6 MB/s cho tải về và 1 MB/s cho tải lên trên card Ethernet enp0s3.

sudo wondershaper enp0s3 6144 1024

Bây giờ, bạn có thể kiểm tra xem các cài đặt này đã được áp dụng bằng cách kiểm tra tốc độ internet của bạn trên https://speedtest.net và đây là kết quả mình nhận được với các cài đặt này.

Nếu bạn muốn xóa tất cả các giới hạn hãy dùng lệnh này.

sudo wondershaper clear enp0s3

Sau đó kiểm tra lại tốc độ internet của bạn, bạn sẽ nhận kết quả từ https://speedtest.net sau khi xóa giới hạn băng thông.

Lưu ý, nếu bạn đang sử dụng cả kết nối Wi-Fi và Ethernet, hãy đảm bảo bạn đặt giới hạn và kiểm tra trên cùng một card mạng.

Áp dụng chạy Wondershaper sau khi khởi động lại OS.

Sau khi chúng ta khởi động lại OS thì thường cấu hình đã thiết lập sẽ bị mất, để giữ cấu hình này hoạt động sau khi khởi đông lại bạn có thể tạo systemd cho Wondershaper bằng cách vào file cấu hình /etc/systemd/wondershaper.conf.

sudo vi /etc/systemd/wondershaper.conf

Sau đó, dán nội dung sau, bao gồm tên card và các giới hạn của bạn.

[wondershaper]
# Tên card mạng
IFACE="enp0s3"

# Tốc độ tải về (Kbps)
DSPEED="6144"

# Tốc độ upload (Kbps)
USPEED="1024"

Tiếp theo, tạo file service.

sudo vi /etc/systemd/system/wondershaper.service

Với nội dung sau.

[Unit]
Description=Chương trình giới hạn băng thông card mạng
After=network-online.target
Wants=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/systemd/wondershaper.conf
ExecStart=/usr/sbin/wondershaper $IFACE $DSPEED $USPEED
ExecStop=/usr/sbin/wondershaper clear $IFACE

[Install]
WantedBy=multi-user.target

Lưu ý, nếu Wondershaper của bạn sử dụng tên tùy chọn, bạn cần chỉnh sửa các dòng ExecStart và ExecStop thành.

ExecStart=/usr/sbin/wondershaper -a $IFACE -d $DSPEED -u $USPEED
ExecStop=/usr/sbin/wondershaper -c -a $IFACE

Bây giờ, kích hoạt Wondershaper để tự động chạy sau khi bạn khởi động lại hệ thống.

sudo systemctl enable --now wondershaper.service

Bây giờ Wondershaper sẽ chạy ngay cả sau khi bạn khởi động lại hệ thống. Nếu bạn muốn tắt tính năng tự động khi khởi động hệ thống của của Wondershaper, thực hiện lệnh sau:

sudo systemctl disable --now wondershaper.service

Giới hạn băng thông cho từng ứng dụng với Trickle.

Trickle là một công cụ nhẹ để giới hạn băng thông mạng có thể được sử dụng để đặt giới hạn dữ liệu cho từng ứng dụng. Bằng cách sử dụng tính năng Unix loader preloading, nó thêm một phiên bản mới của chức năng truyền dữ liệu cho một ứng dụng thông qua các socket và sau đó giới hạn lưu lượng bằng cách trì hoãn việc gửi và nhận dữ liệu qua một socket. Khác với Wondershaper, Trickle không đòi hỏi quyền root, vì vậy bạn không cần sử dụng sudo khi chạy nó.

Cài đặt Trickle Trickle có sẵn trong hầu hết các bản phân phối Linux. Trong Ubuntu, bạn có thể cài đặt nó bằng lệnh sau.

sudo apt install trickle

Điều này làm cho Trickle sẽ được cài đặt và sử dụng cho việc giới hạn băng thông cho từng ứng dụng.

Cách sử dụng Trickle.

Bạn có thể xem tất cả các tùy chọn có sẵn và cách sử dụng Trickle bằng cách sử dụng lệnh “trickle -h” để hiển thị thông báo trợ giúp của Trickle:

trickle -h

Đây là hình ảnh output của lệnh trickle -h.

Thường thì, bạn chỉ cần đặt giới hạn download/upload và tên ứng dụng hoặc lệnh cần giới hạn.

trickle -d [download] -u [upload] [application/command]

Dưới đây là một ví dụ về việc giới hạn tải về 6 MB/s và tải lên 1 MB/s cho trình duyệt Firefox.

trickle -d 6144 -u 1024 firefox

Bạn cũng có thể đặt tốc độ download/upload riêng biệt nếu bạn chỉ muốn giới hạn một trong hai.

Ví dụ đặt giới hạn tốc độ download cho Firefox.

trickle -d 6144 firefox

Bạn cũng có thể giới hạn băng thông mạng cho các lệnh trong Linux. Ví dụ, bạn có thể muốn giới hạn tốc độ download của lệnh “wget”.

trickle -d 512 wget https://releases.ubuntu.com/20.04.3/ubuntu-20.04.3-desktop-amd64.iso

Bạn cũng có thể khởi chạy một dòng lệnh bash với giới hạn băng thông cho tất cả các lệnh.

trickle -d 6144 -u 1024 bash

Để đặt lại giới hạn băng thông, chỉ cần đóng dòng lệnh bash bằng lệnh “exit” hoặc bằng cách nhấn tổ hợp phím Ctrl+Q.

Bạn cũng có thể thêm một số tùy chọn nâng cao vào lệnh Trickle của bạn bằng cách đọc mô tả chi tiết về mỗi tùy chọn bằng lệnh “man” để biết cách sử dụng nó.

man trickle

Ở đó, bạn có thể tìm hiểu, ví dụ tùy chọn smoothing time làm gì. Tùy chọn smoothing time xác định khoảng thời gian mà Trickle sẽ cố gắng để cho phép ứng dụng truyền dữ liệu. Giá trị nhỏ sẽ tạo ra một phiên liên tục (mượt mà) hơn, trong khi các giá trị lớn hơn có thể tạo ra các đợt trong việc gửi và nhận dữ liệu. Giá trị nhỏ (0,1 – 1 giây) thích hợp cho các ứng dụng tương tác, trong khi giá trị hơi lớn hơn (1 – 10 giây) thích hợp cho các ứng dụng cần truyền dữ liệu hàng loạt.

Trickle với rsync.

Có một sự khác biệt nhỏ trong việc sử dụng Trickle với rsync để sao chép file qua ssh. Nếu bạn chỉ đơn giản đặt lệnh Trickle trước lệnh rsync, nó sẽ không hoạt động vì rsync tạo ra một tiến trình ssh con. Do đó, ssh sẽ chạy mà không có giới hạn từ Trickle. Để gọi rsync với giới hạn Trickle, hãy chạy nó như sau:

rsync --rsh="trickle -d 6144 -u 1024 ssh" destination

Kiểm tra Trickle.

Chúng ta có thể kiểm tra Trickle tương tự như cách kiểm tra Wondershaper trên https://speedtest.net. Hãy đặt giới hạn download cho Firefox và thêm một giá trị smoothing nhỏ vì nó là một ứng dụng tương tác.

Kiểm tra Trickle với giới hạn download cho Firefox.

trickle -d 6144 -u 1024 -t 0.1 firefox

Cài đặt này cho kết quả tốc độ mạng sau đây.

Bạn cũng có thể kiểm tra Trickle với wget.

trickle -d 512 wget https://releases.ubuntu.com/20.04.3/ubuntu-20.04.3-desktop-amd64.iso

Bạn sẽ thấy rằng tốc độ bị giới hạn thành 547KB/s:

Áp dụng chạy Trickle sau khi khởi động lại OS.

Tương tự như Wondershaper, sau khi chúng ta khởi động lại OS thì thường cấu hình đã thiết lập sẽ bị mất, để giữ cấu hình này hoạt động sau khi khởi động lại bạn tiếp tục làm theo các bước sau.

Để xem tất cả các tùy chọn của trickled, bạn có thể sử dụng lệnh “trickled -h” hoặc “man trickled” để xem thông báo trợ giúp:

trickled -h

Hình ảnh Output của lệnh trickled -h.

Bạn có thể đặt giới hạn băng thông mặc định cho tất cả các ứng dụng được khởi chạy với lệnh “trickle”.

trickled -d 6144 -u 1024 -s

Bây giờ, mọi ứng dụng bạn khởi chạy bằng “trickle application” sẽ có các giới hạn này và bạn không cần phải chỉ định tốc độ tải về và tải lên tối đa. Để giữ cho các tùy chọn này cố định sau khi khởi động lại hệ thống, bạn có thể thêm lệnh này vào file “~/.bashrc” hoặc “/etc/profile” nếu bạn muốn cài đặt này có hiệu lực cho tất cả người dùng.

Để xác định cách các giới hạn này được chia sẻ bởi mỗi ứng dụng, bạn cần thêm chúng vào file “trickled.conf”. Mở file cấu hình:

sudo nano /etc/trickled.conf

Sau đó, thêm mỗi ứng dụng theo định dạng sau:

[service]
Priority = <giá trị>
Time-Smoothing = <giá trị>
Length-Smoothing = <giá trị>

Trong đó, tham số “Time-Smoothing” đã được đề cập ở trên. Mục đích của tham số “Length-Smoothing” cũng tương tự, khác biệt duy nhất là nó được định nghĩa bằng KB và là một sự dự phòng của tùy chọn smoothing time.

Tham số “Priority” xác định cách dữ liệu được ưu tiên giữa các ứng dụng. Giá trị thấp có ưu tiên cao hơn và do đó các ứng dụng có giá trị thấp hơn sẽ có băng thông nhiều hơn so với ứng dụng có giá trị cao hơn.

Dưới đây là một ví dụ về cách file “trickled.conf” thực tế có thể trông như thế nào:

[www]
Priority = 1
Time-Smoothing = 1

[ssh]
Priority = 2
Time-Smoothing = 0.1
Length-Smoothing = 2

[ftp]
Priority = 8
Time-Smoothing = 5
Length-Smoothing = 10

Để tạo file cấu hình chạy Trickled khi mở các ứng dụng đồ họa, bạn có thể mở file cấu hình application.desktop.

sudo nano /usr/share/applications/application.desktop

Ví dụ, để chỉnh sửa application Firefox, hãy tạo một bản sao lưu và chỉnh sửa file gốc:

sudo cp /usr/share/applications/firefox.desktop /usr/share/applications/firefox.desktop.backup
sudo nano /usr/share/applications/firefox.desktop

Tìm các dòng bắt đầu bằng “Exec=” và chỉnh sửa chúng bằng cách thêm “trickle” vào mỗi lệnh. Có ba dòng như vậy trong “firefox.desktop”:

Exec=trickle -d 6144 -u 1024 firefox %u
...
Exec=trickle -d 6144 -u 1024 firefox -new-window
...
Exec=trickle -d 6144 -u 1024 firefox -private-window

Dưới đây là hình ảnh của nó.

Bây giờ, mỗi khi bạn nhấp vào Firefox trong menu, nó sẽ khởi chạy Firefox với lệnh đã được chỉnh sửa và giới hạn băng thông mạng.

Nếu bạn muốn loại bỏ các giới hạn này, khôi phục bản sao lưu:

sudo cp /usr/share/applications/firefox.desktop.backup /usr/share/applications/firefox.desktop

Một số ứng dụng có thể không có các file “application.desktop” trong “/usr/share/applications/”. Điều này xảy ra với các ứng dụng AppImages, snap và flatpak. Bạn có thể dễ dàng tạo một file applications tùy chỉnh cho nó.

Kết luận.

Mình đã cố gắng cung cấp hướng dẫn đơn giản và rõ ràng về cách giới hạn băng thông mạng trong Linux bằng Wondershaper và Trickle mà không cần chi tiết kỹ thuật. Tôi hy vọng rằng các hướng dẫn này đã giúp bạn cấu hình băng thông mạng trên Linux của mình và tiết kiệm thời gian cũng như tiền bạc.

Nếu bạn muốn tìm hiểu thêm về kỹ thuật của Trickle, bạn có thể đọc bài viết kỹ thuật về Trickle. Để có thông tin thêm về Wondershaper, hãy truy cập trang GitHub của Wondershaper.

Nếu bạn biết thêm các công cụ dễ sử dụng hơn để giới hạn băng thông mạng trong Linux, hãy chia sẻ chúng trong phần bình luận dưới đây.

Tài liệu tham khảo tại https://averagelinuxuser.com/limit-bandwidth-linux/

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories