Mensimulasikan koneksi yang lambat dengan tc

9

Saya memiliki kotak linux (Centos 5.5) di mana saya ingin membatasi lalu lintas jaringan. Saya memiliki aplikasi yang kami distribusikan ke klien dan saya ingin mengujinya pada bandwidth minimum yang disarankan 256Mbit / detik. Sejauh ini tutorial tc yang saya lihat tampaknya memungkinkan Anda untuk membatasi bandwidth berdasarkan kriteria tertentu, tetapi saya ingin membatasi bandwidth dalam semua situasi (ke / dari semua alamat IP, tidak peduli seperti apa header IP, dll).

Satu tutorial menyarankan agar saya menggunakan:

tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2

tapi saya mendapatkan kesalahan berikut:

Unknown filter "flowid", hence option 10:2 is unparsable

Adakah ide tentang cara membatasi bandwidth yang masuk / keluar dari eth0 dalam semua keadaan?

rancidfishbreath
sumber

Jawaban:

11

Jika Anda ingin menerapkan batasan untuk semua lalu lintas keluar, Anda tidak perlu filter sama sekali. Cukup tambahkan qdisc Anda ke antarmuka root seperti:

tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540

Jika Anda ingin membentuk / mengatur lalu lintas masuk, ini sedikit lebih rumit. Anda harus menggunakan mis. Antarmuka IFB:

modprobe ifb
ip link set dev ifb0 up
tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#  ^- this is a dummy filter, match u32 0 0 matches all traffic
tc qdisc add dev ifb0 root handle 1: tbf rate 256mbit latency 1ms burst 1540

Berikut pendekatan yang berbeda, menggunakan dua filter sederhana:

tc qdisc add dev eth0 ingress
tc filter add dev eth0 root         protocol ip u32 match u32 0 0 police rate 256mbit burst 10k drop flowid :1
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 police rate 256mbit burst 10k drop flowid :1
Al.
sumber
Saya telah meretas solusi Anda tetapi saya tidak bisa membuatnya bekerja. Saya menjalankan perintah Anda, membuka Firefox, memulai unduhan dan mengunduh dengan terlalu cepat. Ketika saya melakukan ifconfig, saya seharusnya melihat beberapa paket RX dan TX di bawah ifb0 (karena saya tidak)? Terima kasih.
rancidfishbreath
Saya menambahkan pendekatan berbeda yang bekerja tanpa antarmuka ifb.
al.
Pendekatan kedua menggunakan dua filter sederhana ini bekerja dengan baik! Terima kasih banyak. Saya sangat suka solusi ini karena sederhana dan mudah dimengerti.
rancidfishbreath
Luar biasa terima kasih, pertanyaan pemula, bagaimana saya bisa menghapus batas setelah menjalankan tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540:? Terima kasih!
SSH Ini
Bagaimana mematikan throttling dan mengembalikannya kembali seperti semula? Tolong tanggapi versi "pendekatan yang berbeda dengan menggunakan dua filter sederhana" jika Anda mau berbaik hati. "Man tc" adalah ... luar biasa seperti biasa.
Geoffrey Anderson
0

Anda telah menambahkan 1 penggaris seperti ini tc qdisc tambahkan dev eth0 root handle 10: htb default 20

setelah itu seperti Anda

tc filter menambahkan dev eth0 protokol ip parent 10: prio 2 flowid 10: 2

kenalan
sumber