Saya baru menggunakan tc dan netem . Saya ingin menunda paket yang dikirim ke alamat IP tertentu. Namun, perintah di bawah ini menyebabkan semua paket pada sistem tertunda, bukan hanya ke alamat IP 1.2.3.4:
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:1 handle 2: netem delay 500ms
tc filter add dev eth0 parent 1:0 protocol ip pref 55 handle ::55 u32 match ip dst 1.2.3.4 flowid 2:1
Dugaan saya adalah bahwa saya memerlukan beberapa filter catch-all di akhir untuk menentukan bahwa semua lalu lintas yang tersisa tidak boleh melalui netem. Tapi saya tidak bisa mendapatkan apa pun untuk bekerja. Bagaimana saya bisa membuatnya bekerja?
sumber
Jawaban yang dipilih salah / tidak lengkap. Saya menghadapi masalah yang sama, jawaban yang dipilih memberikan bantuan, tetapi tidak cukup.
Pertama, perintah berikut ini tidak benar-benar dibutuhkan.
Ini akan 'menghapus' root qdisc, tetapi secara tidak langsung akan diganti dengan yang pfifo_fast (sehingga Anda tidak kehilangan konektivitas).
Perintah kedua:
Akan mengganti qdisc pfifo_fast dengan yang prio. Secara default, antrian prio memiliki 3 band (0, 1, 2) masing-masing dikelola oleh satu kelas (1: 1, 1: 2 dan 1: 3).
Paket akan dikirim ke salah satu band tersebut menggunakan bidang TOS dari paket IP. Konfigurasi ini ditampilkan ketika Anda menjalankan:
melihat nilai-nilai 'priomap'.
Kemudian, Anda menambahkan qdisc netem:
Dengan perintah ini, Anda menunda semua lalu lintas menuju pita 1: 1 (hingga filter tersedia).
Tetapi ada dua peringatan:
Berikut ini memecahkan masalah saya agar tidak terpengaruh oleh netem saat filter tidak diterapkan. Alih-alih langkah-langkah di atas, saya melakukan:
Ini akan mengirim semua lalu lintas secara default ke band 1: 3.
Lalu, saya menambahkan aturan untuk menunda lalu lintas:
Ini menciptakan qdisc di band 0, tetapi karena semua traffic menuju ke band 3, itu tidak mempengaruhi saya.
Setelah itu, saya menambahkan filter:
Sekarang dengan filter, hanya IP / port yang dipilih yang akan terpengaruh, karena kami mengarahkan lalu lintas yang dipilih ke band 0.
Semua lalu lintas lainnya terus tidak terpengaruh karena terus mengalir ke band 3.
sumber
Contoh sederhana dari https://wiki.linuxfoundation.org/networking/netem yang memungkinkan Anda menunda paket ke IP yang diberikan tanpa memengaruhi lalu lintas lain, bahkan selama konfigurasi:
sumber
Saya belum berhasil menunda lalu lintas ke satu IP sambil menjaga lalu lintas normal ke yang lain IP normal dengan metode yang dijelaskan dalam utas ini.
Namun, saya berhasil melakukannya dengan menggunakan perintah berikut.
Untuk menunda
15001ms
lalu lintas ke IP1.2.3.4
dari host tempat perintah dijalankan. Perintahhostname -I
ini digunakan untuk mendapatkan IP utama dari host tetapi nilainya dapat diganti langsung di dalam perintah.Saya harus menambahkan filter lain dengan
0ms
penundaan agar sesuai dengan lalu lintas yang datang dari tuan rumah. Pasti tidak elegan tapi saya belum berhasil memiliki sesuatu yang lebih bagus.Perintah terakhir dapat diganti untuk mencocokkan satu port.
Untuk menunda lalu lintas ke port
18583
alih-alih IP1.2.3.4
.Saya juga menemukan metode kedua pada jawaban ini untuk menunda lalu lintas
1.2.3.4:18583
tanpa berdampak pada lalu lintas lainnya.sumber