Bagaimana cara membatasi bandwidth pada antarmuka jaringan Linux?

Jawaban:

32

The netem modul kernel, dikendalikan oleh iproute.

Anda perlu mengkompilasi Netem dengan kernel:

Networking -->
   Networking Options -->
     QoS and/or fair queuing -->
        Network emulator

Setelah modul netem dimuat, iproute's tc memungkinkan Anda hal-hal seperti:

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 

(50% paket loss, keterlambatan ekstra 50 ms)

bortzmeyer
sumber
Ya, ini adalah modul yang sangat bagus untuk hal-hal ini. Saya tidak percaya tidak ada yang menjawab ini sampai sekarang ...
Saya menggunakan ini untuk menguji server secara lokal (di localhost) karena sudah standar pada semua distro selama bertahun-tahun. Untuk menambahkan 20ms delay "tc qdisc tambahkan dev lo root handle 1: 0 netem delay 20msec", dan untuk menghapusnya "tc qdisc del dev lo root"
pixelbeat
1
Catatan cepat: modul kernel sch_netem. Umumnya tidak perlu memuatnya secara manual, itu akan dimuat secara otomatis sesuai kebutuhan.
sleske
Inilah tautan yang berfungsi linuxfoundation.org/collaborate/workgroups/networking/netem
Lee Chee Kiam
Versi saya netem (Ubuntu 13.10) juga memiliki opsi untuk membatasi bandwidth menggunakan ratepilihan: tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000. Perhatikan bahwa untuk beberapa perangkat seperti lo(untuk mengakses localhost), Anda perlu mengatur antrian panjang juga: ifconfig lo txqueuelen 1000. Lihat serverfault.com/a/394949/76090
z0r
27

Sisi klien, bukan?

Tetesan harus melakukan apa yang Anda inginkan. Jika Anda menjalankan Ubuntu (atau Debian, saya pikir), Anda dapat menginstalnya dengan sudo apt-get install trickle, dan kemudian menjalankannya. trickle -s -d 10 -u 10 firefox(atau lebih, saya belum menggunakannya dalam beberapa saat) akan menjalankan firefox, membatasi kecepatan unduh dan unggah menjadi 10 kilobyte per detik.

Bernard
sumber
Terima kasih atas tip ini. Untuk beberapa alasan tetesan tidak akan bekerja untuk saya dengan firefox tetapi bekerja dengan baik dengan google-chrome. (Ubuntu 9.10 64bit)
Tom
6
trickle bekerja dengan mencegat panggilan untuk menghubungkan fungsi perpustakaan standar untuk transfer TCP - jika suatu aplikasi memiliki fungsi-fungsi ini terhubung secara statis pada waktu kompilasi maka ini tidak dapat bekerja.
David Spillett
16

Saya menemukan cara untuk menghindari kotak saya dari memakan semua bandwidth yang tersedia di jaringan menggunakan alat yang disebut 'wondershaper' di ubuntu. Saya harap ini ada di destro linux lain juga. Saya dapat membatasi bandwidth apa yang bisa dikonsumsi pc rumah linux saya menggunakan perintah berikut.

sudo wondershaper eth0 1000 200

Ini membatasi batas unduhan hingga 1000 kilobit dan uplaod hingga 200 kilobit. Rujuk ke halaman manual wonderershaper untuk informasi lebih lanjut / opsi.

Harry
sumber
1
Ini bukan apa yang dicari OP (ini tentang menghemat bandwidth, bukan tentang sengaja merusak koneksi), tetapi masih bagus untuk diketahui.
sleske
1
BTW: Ini paket wondershaperdi Debian.
sleske
Ini mengguncang b / c kami mengalami masalah di kantor dengan saturasi bandwidth, ada dukungan yang tidak bisa saya interupsi, dan saya bisa memperbaikinya dalam dua baris sederhana: # apt-get install wondershaper kemudian # wondershaper eth0 9999999 500 terima kasih lagi!
orange80
4
wondershaper tampaknya memiliki beberapa masalah matematika. Untuk mendapatkan jalur naik / turun 1Mb / dtk, kami menggunakan 28096 alih-alih 1024. Tidak tahu mengapa ini terjadi.
boatcoder
Untuk mengatur ulang, gunakan:sudo wondershaper clear eth0
Léo Lam
8

NIST membuat simulator jaringan yang disebut NistNet.

http://snad.ncsl.nist.gov/nistnet/ (tautan tampaknya mati)

http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/

NistNet memungkinkan Anda membuat router yang mengemulasi tautan comms yang Anda pilih.

Untuk operasi paling sederhana, Anda memilikinya di sebuah kotak dengan dua NIC di antara dua jaringan.

Misalnya, saya punya aplikasi yang harus bekerja melalui tautan satelit.

Data dapat melewati tautan 2Mbps dengan latensi BESAR. Kontrol harus menggunakan tautan 128kbps, dengan latensi yang sama.

NistNet membantu agar semuanya berfungsi pada 128kbps.

Menggunakan NistNet saya bisa mensimulasikan tidak hanya bandwidth, tetapi juga latensi, dan itu juga akan menjatuhkan paket untuk Anda, mensimulasikan tautan yang sibuk atau tidak dapat diandalkan.

Jika Anda ingin mensimulasikan koneksi abitrary, jangan hanya membatasi lebar pita, buat latensi naik juga.

Jangan lupa paket fragmen juga. Anda dapat mengatur MTU kecil yang bagus di tautan palsu.

IIRC menambahkan paket jitter akan memungkinkan Anda mengetahui apakah Anda dapat mengatasi paket yang tidak sesuai pesanan.

Tim Williscroft
sumber
NistNet tidak diperbarui dalam waktu yang lama, bukan? IMO, cara terbaik sejauh ini adalah modul netem, yang sudah ada di semua kernel terbaru.
Anda mungkin dapat mensimulasikan mesin dengan 2 NIC menggunakan VM.
Scott
tautan tidak berfungsi
hasen
Tautan berfungsi untuk saya.
tripleee
4

Saya pribadi telah menggunakan wonderershaper di masa lalu untuk ini, meskipun itu ditulis untuk use case yang berlawanan - memanfaatkan koneksi ADSL Anda.

Saya harus mencoba yang lain yang disebutkan di sini.

Thomas Vander Stichele
sumber
3

Anda dapat menggunakan proxy squid yang dipasang secara lokal untuk membatasi bandwidth misalnya untuk menguji halaman web pada tautan lambat:

  1. Instal proxy squid dari distribusi Anda - di Fedora saya semudah itu yum install squid.

  2. Tambahkan yang berikut ke /etc/squid/squid.conf:

    delay_pools 1
    delay_class 1 1
    delay_access 1 allow all
    delay_parameters 1 16000/16000

    Ini akan membatasi bandwidth menjadi sekitar 128 kbps (16000 Bps).

  3. Mulai cumi :/etc/init.d/squid start

  4. Konfigurasikan browser Anda untuk menggunakan localhostport server proxy 3128.

Tometzky
sumber
3

Belum ada yang menyebutkan ip_relay , bernama "iprelay" di repositori Debian. Ini berfungsi sebagai proksi TCP, daripada mencegat panggilan seperti yang dilakukan tetesan , dan akan bekerja dengan aplikasi apa pun yang dapat menggunakan proxy (misalnya browser web) atau menerima port tujuan yang ditentukan pengguna (telnet, ssh, ftp, curl, dan lain-lain ).

Ini sedikit lebih sulit untuk diatur, tetapi sering bekerja dalam situasi di mana tetesan tidak akan terjadi.

CodeGnome
sumber
1
Ini tepat untuk apa yang saya cari! Terima kasih banyak Saya senang saya menggulir ke bawah dan terus membaca.
Jay R. Wren