Làm cách nào tôi có thể giới hạn băng thông Tải xuống / Tải lên?


77

Làm cách nào tôi có thể giới hạn Tải xuống / Tải lên băng thông cho:

  • Toàn bộ hệ điều hành.
  • Một giao diện mạng.
  • Ứng dụng duy nhất.

Tôi đã nộp một lỗi cho wondershapervấn đề trong Ubuntu 17.10, có thể tương tự như những gì đang xảy ra với @Zeromatiker trong Ubuntu 17.04: bugs.launchpad.net/ubuntu/+source/wondershaper/+bug/1745421
aguadopd

Câu trả lời:


42

Giới hạn giao diện đơn là dễ dàng, nhưng giới hạn tỷ lệ toàn cầu cần các quy tắc phức tạp hơn như quy tắc dựa trên ứng dụng. Tôi không nói rằng nó không thể được thực hiện, nhưng nó đòi hỏi khá nhiều để đào sâu vào các phần bên trong của mạng.

Dưới đây là cách nhanh chóng để thiết lập giới hạn cho mỗi giao diện

Nếu bạn thực sự muốn thiết lập các quy tắc dựa trên ứng dụng, bạn nên xem xét một số khung tường lửa, như shorewall , có các tính năng trợ giúp để định cấu hình. Ngay cả với các công cụ này, nó đòi hỏi khá nhiều suy nghĩ và thử nghiệm để đưa nó vào vị trí. Làm một cái gì đó như thế này không hoàn toàn dễ dàng.


wonderershaper không hoạt động Tôi không biết tại sao (thậm chí wondershaper eth0 1000 1000 không có băng thông internet. Tôi cần giới hạn tất cả băng thông eth0 không chỉ các ứng dụng cụ thể. Làm thế nào để làm điều đó?
Arash

67

Mặc dù đây là một câu hỏi cũ, tôi đã gặp nó khi tìm câu trả lời cho cùng một câu hỏi. Các giới hạn hệ điều hành và giao diện đã được giải quyết trong một câu trả lời trước đó, vì vậy đây là một cách để thiết lập các giới hạn cụ thể của ứng dụng. Sử dụng một ứng dụng gọi là nhỏ giọt. Vì vậy, làm sudo apt-get install trickle. Bạn có thể giới hạn tải lên / tải xuống cho một ứng dụng cụ thể bằng cách chạy

trickle -u (upload limit in KB/s) -d (download limit in KB/s) application

Điều này sẽ khởi chạy ứng dụng với các giới hạn được chỉ định. Bạn cũng có thể chỉ định thời gian "làm mịn", để các mẫu nhỏ giọt trong khoảng thời gian mong muốn trong trường hợp ứng dụng của bạn có mức tiêu thụ băng thông lớn và bạn muốn các vụ nổ được cho phép miễn là mức trung bình nằm trong thông số kỹ thuật của bạn.


14
Cảm ơn rât nhiều! Giải pháp này là hoàn hảo để kiểm soát băng thông trên cơ sở mỗi ứng dụng. Xin đừng bao giờ ngần ngại gửi câu trả lời, ngay cả khi câu hỏi đã cũ. Để tham khảo trong tương lai: Bạn có thể được trình bày với một thông báo lỗi như trickle: Could not reach trickled, working independently: No such file or directory. Bạn có thể xóa cảnh báo này bằng cách thực hiện nhỏ giọt trong chế độ độc lập với trickle -s.
Glutimate

Làm thế nào để tôi loại bỏ giới hạn bởi nhỏ giọt?
Chuột ẩn danh

2
Trickle sẽ chạy ứng dụng cho bạn với các giới hạn được thi hành. Vì vậy, tất cả những gì bạn phải làm là khởi động lại ứng dụng mà không cần sử dụng lệnh nhỏ giọt.
SMeznaric

1
cảm ơn rất nhiều vì câu trả lời này, đó là điều chính xác mà tôi đang tìm kiếm
Ali

1
Chính xác những gì tôi cần, khi cố gắng mô phỏng kết nối mạng chậm.
Ethan Kaminski

5

Nếu bạn muốn giới hạn băng thông cho một địa chỉ IP cụ thể, bạn có thể sử dụng điều này:

tc qdisc add dev eth1 root handle 1: htb default 12
tc class add dev eth1 parent 1: classid 1:10 htb rate 2500kbps
tc class add dev eth1 parent 1: classid 1:11 htb rate 2500kbps
tc class add dev eth1 parent 1: classid 1:12 htb rate 5000kbps

tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.2.105 flowid 1:10
tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.2.106 flowid 1:11

4
đó là khá phức tạp. Một vài #comments sẽ đi một chặng đường dài. Chẳng hạn, bạn có thể thêm các liên kết hoặc giải thích cho qdiscs, classids, htb, v.v.
oligofren

Vì vậy, theo mặc định, ở trên giới hạn mọi thứ ở mức 5000 kbps trừ khi được lọc vào một số hàng đợi khác? Nếu chúng ta không muốn giới hạn mọi thứ thì sao?
Ken Sharp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.