Saya ingin mensimulasikan skenario berikut: mengingat bahwa saya memiliki 4 mesin server ubuntu A, B, C dan D. Saya ingin mengurangi bandwidth jaringan sebesar 20% antara mesin A dan mesin C dan 10% antara A dan B. Cara apakah ini menggunakan alat simulasi jaringan / pelambatan?
ubuntu
networking
tcp
linux-networking
bandwidth
Yehia Elshater
sumber
sumber
tc
tidak ketika digunakan dengan tanda iptables.Jawaban:
Untuk melakukan ini, Anda dapat menggunakan
tc
sendiri denganu32
filter atau dikombinasikan dengan tanda iptables (mungkin lebih mudah jika Anda tidak ingin mempelajari sintaksis filter kompleks). Saya akan di posting berikut merinci solusi sebelumnya.Mensimulasikan pengaturan Anda
Sebagai contoh, mari kita pertimbangkan A, B, C dan D yang menjalankan antarmuka virtual 10 Mbit / s .
Anda pada dasarnya ingin:
Untuk mensimulasikan ini, saya akan membuat 4 ruang nama jaringan dan antarmuka ethernet virtual dicolokkan ke jembatan.
Tentu saja, dalam kasus Anda, Anda akan bekerja dengan NIC nyata dan jembatan akan menjadi gateway atau switch Anda tergantung pada infrastruktur Anda.
Jadi dalam simulasi saya, kami akan memiliki pengaturan berikut, dalam jaringan 10.0.0.0/24:
Pertama, tahap persiapan agar Anda dapat memahami apa itu terbuat, lewati jika Anda tidak terbiasa dengan itu, bukan masalah besar. Namun yang harus Anda ketahui adalah bahwa perintah
ip netns exec <namespace> <command>
memungkinkan untuk mengeksekusi perintah di namespace jaringan (yaitu di salah satu kotak gambar sebelumnya). Ini akan digunakan di bagian selanjutnya juga.Jadi pada titik ini kita memiliki pengaturan yang dijelaskan sebelumnya.
Membentuk traffic
Sudah waktunya untuk masuk ke kontrol lalu lintas untuk mendapatkan apa yang Anda inginkan. The
tc
alat memungkinkan Anda untuk menambahkan disiplin antrian:Muncul dengan 3 gagasan: qdisc , kelas dan filter . Gagasan tersebut dapat digunakan untuk mengatur manajemen aliran paket yang kompleks dan memprioritaskan lalu lintas berdasarkan kriteria / kriteria apa pun yang Anda inginkan.
Singkatnya:
Semua ini biasanya berfungsi sebagai pohon di mana daun adalah qdisc dan kelas adalah simpul. Akar pohon atau subtree akan dinyatakan sebagai
<id>:
dan simpul anak-anak akan dinyatakan sebagai<parent_id>:<children_id>
. Ingat sintaks ini.Untuk kasus Anda, mari kita ambil A dan render pohon yang ingin Anda atur
tc
:Penjelasan:
1:
adalah qdisc root yang terpasang pada perangkat vethA, itu akan diambil secara eksplisit sepertihtb
untuk Hierarchy Token Bucket (qdisc default perangkat adalahpfifo
ataupfifo_fast
tergantung pada OS). Ini secara khusus sesuai untuk manajemen bandwidth. Paket yang tidak cocok dengan filter yang ditentukan pada level ini akan masuk ke1:30
kelas.1:1
akan menjadihtb
kelas yang membatasi seluruh lalu lintas perangkat hingga 10 Mbit / s.1:10
akan menjadihtb
kelas yang membatasi lalu lintas keluaran hingga 9 Mbit / detik (90% dari 10 Mbit / detik).1:20
akan menjadihtb
kelas yang membatasi lalu lintas keluaran hingga 8 Mbit / detik (80% dari 10 Mbit / detik).1:30
akan menjadihtb
kelas yang membatasi lalu lintas hingga 10 Mbit / s (mundur).:10, :20, :30
adalahsfq
qdisc untuk Antrian Stochastic Justice. Dengan kata lain qdiscs ini akan memastikan keadilan dalam jadwal transmisi berdasarkan arus.Semua ini diatur oleh perintah berikut:
Hal terakhir yang kita butuhkan adalah menambahkan filter sehingga paket IP dengan IP tujuan sama dengan B akan masuk ke
1:10
kelas dan paket IP dengan IP tujuan sama dengan C akan masuk ke1:20
kelas:Sekarang setelah Anda mendapatkan idenya, Anda perlu menambahkan
tc
aturan serupa ke B dan C sehingga transmisi menuju A dari rig ini juga dibentuk.Pengujian
Sekarang mari kita coba. Untuk ini saya secara pribadi digunakan untuk bermain
iperf
, itu hanya terdiri dari biner tunggal yang dapat dijalankan sebagai klien atau server dan secara otomatis akan mengirimkan lalu lintas sebanyak mungkin antara kedua host.Antara A dan B:
Kami mendapatkan batas bandwidth 9 Mbit / s kami .
Antara A dan C:
Kami mendapatkan batas bandwidth 8 Mbit / s kami .
Antara A dan D:
Di sini kita memiliki antarmuka virtual kecepatan penuh 10 Mbit / s tercapai.
Perhatikan bahwa ledakan ukuran pertama dari setiap proses dapat ditangani dengan lebih baik di
htb
kelas dengan menyesuaikan parameter yang memadai.Membersihkan
Untuk menghapus :
1:
:tc filter del dev vethA parent 1: prio 1 u32
.1:
:tc filter del dev vethA parent 1:
.1:20
dan anak-anaknya:tc class del dev vethA parent 1:1 classid 1:20
.tc qdisc del dev vethA
.Untuk membersihkan set simulasi:
sumber
Ubuntu memiliki IPFW porting dari FreeBSD, dan IPFW memiliki DUMMYNET yang memungkinkan untuk mengelola berbagai parameter jaringan - bandwidth, penundaan, tingkat kehilangan paket, dll.
sumber
Yang terbaik adalah menggunakan alat tc dengan modul netem yang sekarang terintegrasi (setidaknya dalam server Ubuntu). Anda dapat menemukan lebih banyak info di artikel ini dari Stackoverflow .
sumber
Trickle bekerja dengan baik.
Diskusi ini menunjukkan beberapa batasan: /unix/109973/how-to-change-speed-limit-of-running-trickle-instance
sumber