ฉันจะ จำกัด แบนด์วิดท์ดาวน์โหลด / อัพโหลดได้อย่างไร


77

ฉันจะ จำกัด แบนด์วิดท์ดาวน์โหลด / อัพโหลดสำหรับ:

  • ระบบปฏิบัติการทั้งหมด
  • อินเตอร์เฟซเครือข่ายหนึ่ง
  • แอปพลิเคชันเดียว

ฉันได้ยื่นข้อบกพร่องสำหรับwondershaperปัญหาใน Ubuntu 17.10 ซึ่งอาจคล้ายกับสิ่งที่เกิดขึ้นกับ @ Zeromatiker ใน Ubuntu 17.04: bugs.launchpad.net/ubuntu/+source/wondershaper/+bug/1745421
aguadopd

คำตอบ:


42

การ จำกัด อินเทอร์เฟซเดียวนั้นง่าย แต่การ จำกัด อัตราทั่วโลกต้องการกฎที่ซับซ้อนมากขึ้นเช่นเดียวกับกฎที่ใช้แอปพลิเคชัน ฉันไม่ได้บอกว่ามันทำไม่ได้ แต่มันต้องมีการขุดลึกเข้าไปใน internals ของเครือข่าย

นี่เป็นวิธีด่วนในการตั้งค่าขีด จำกัด ต่ออินเตอร์เฟส

หากคุณต้องการตั้งค่ากฎตามแอปพลิเคชันจริงๆคุณควรตรวจสอบกรอบงานไฟร์วอลล์บางอย่างเช่นshorewallซึ่งมีคุณสมบัติตัวช่วยในการกำหนดค่าการปรับรูปร่าง แม้จะใช้เครื่องมือเหล่านี้ แต่ก็ต้องมีการคิดล่วงหน้าและทดสอบเพื่อนำไปใช้จริง การทำอะไรที่คล้ายกันนี้ยังไม่ง่ายนัก


wondershaper ไม่ทำงานฉันไม่รู้ว่าทำไม (แม้wondershaper eth0 1000 1000 ไม่มีแบนด์วิธอินเทอร์เน็ตฉันต้อง จำกัด แบนด์วิดธ์ของ eth0 ทั้งหมดไม่เพียง แต่เฉพาะแอปพลิเคชั่นเท่านั้นจะทำเช่นนั้นได้อย่างไร
Arash

67

แม้ว่านี่จะเป็นคำถามเก่า แต่ฉันก็พบสิ่งนี้เมื่อมองหาคำตอบของคำถามเดียวกัน ขีด จำกัด ระบบปฏิบัติการและอินเทอร์เฟซได้รับการแก้ไขแล้วในคำตอบก่อนหน้าดังนั้นนี่คือวิธีตั้งค่าขีด จำกัด เฉพาะแอปพลิเคชัน ใช้แอปพลิเคชันที่เรียกว่าหยด ทำเช่นsudo apt-get install trickleนั้น คุณสามารถ จำกัด การอัปโหลด / ดาวน์โหลดสำหรับแอพที่ต้องการโดยการเรียกใช้

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

วิธีนี้จะเปิดแอปพลิเคชันด้วยขีด จำกัด ที่ระบุ นอกจากนี้คุณยังสามารถระบุเวลา "ปรับให้เรียบ" เพื่อให้หยดตัวอย่างในช่วงเวลาที่ต้องการในกรณีที่แอปพลิเคชันของคุณมีปริมาณการใช้แบนด์วิดท์และคุณต้องการอนุญาตให้มีการระเบิดตราบเท่าที่ค่าเฉลี่ยอยู่ในข้อกำหนดของคุณ


14
ขอบคุณมาก! โซลูชันนี้สมบูรณ์แบบสำหรับการควบคุมแบนด์วิดท์ตามแอปพลิเคชัน โปรดอย่าลังเลที่จะโพสต์คำตอบแม้ว่าคำถามจะมีอายุปีก็ตาม สำหรับการอ้างอิงในอนาคต: คุณอาจได้รับข้อความแสดงข้อผิดพลาดtrickle: Could not reach trickled, working independently: No such file or directoryดังนี้ trickle -sคุณสามารถลบคำเตือนนี้โดยการดำเนินการหยดในโหมดสแตนด์อโลนกับ
Glutanimate

ฉันจะลบขีด จำกัด ได้อย่างไรโดยการหยด
เมาส์นิรนาม

2
Trickle จะเรียกใช้แอปพลิเคชั่นสำหรับคุณโดยมีการบังคับใช้ข้อ จำกัด ดังนั้นสิ่งที่คุณต้องทำก็คือรีสตาร์ทแอปพลิเคชั่นโดยไม่ต้องใช้คำสั่งหยดน้ำ
SMeznaric

1
ขอบคุณมากสำหรับคำตอบนี้มันเป็นสิ่งที่ฉันกำลังค้นหาจริงๆ
อาลี

1
สิ่งที่ฉันต้องการเมื่อพยายามจำลองการเชื่อมต่อเครือข่ายที่ช้า
อีธานคามินสกี

5

หากคุณต้องการ จำกัด แบนด์วิดท์สำหรับที่อยู่ IP เฉพาะคุณสามารถใช้สิ่งนี้:

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
มันค่อนข้างซับซ้อน #comments ไม่กี่จะไปไกล ตัวอย่างเช่นคุณสามารถเพิ่มลิงก์หรือคำอธิบายสำหรับ qdiscs, classids, htb เป็นต้น
oligofren

ดังนั้นโดยค่าเริ่มต้นข้างต้น จำกัด ทุกอย่างไว้ที่ 5,000 kbps เว้นแต่จะถูกกรองลงในคิวอื่น ๆ ? สิ่งที่เกี่ยวกับถ้าเราไม่ต้องการที่จะ จำกัด การทุกอย่าง ?
เคนคม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.