Tingkat minimal dan masalah kelas default untuk HTB

29

Saya memiliki beberapa keraguan tentang struktur HTB yang saya gunakan.

Tujuan saya adalah membatasi kecepatan unduh dan unggah pengguna di jaringan lokal. Setiap pengguna jaringan memiliki daftar domain pribadi dengan kecepatan turun dan naik untuk domain yang tidak dapat dilampaui.

Ini berarti user1 dapat mengakses accesinya di slashdot.org terbatas pada 8KB saat diunduh dan 3KB untuk diunggah, dan user2 dapat memiliki akses slashdot.org terbatas 4KB turun dan 1KB naik.

Untuk saat ini saya membuat pasangan iptables / tc yang bekerja sangat baik, tetapi dalam skala yang sangat kecil, menggunakan 2 atau 3 host virtual pada saat yang sama (Sayangnya, saya tidak dapat melakukan uji ukuran sebenarnya).

Ini adalah struktur saya saat ini (saya hanya akan menunjukkan yang ada di jalan keluar LAN, yang untuk unggahan hanyalah "salinan" dari yang ini)

HTB qdisc (handle 2 :) terpasang pada antarmuka, kelas traffic default adalah kelas FFFF.

Kelas root 2: 1 langsung di bawah HTB qdisc memiliki untuk menilai dan membatasi kapasitas DOWNLINK.

Kelas default 2: FFFF sebagai anak 2: 1, dengan kecepatan 1kbsp dan langit-langit kapasitas DOWNLINK.

Lalu, ada kelas lain yang ditambahkan secara dinamis ketika ada batasan baru untuk pengguna dari domain tertentu, kelas tc baru ditambahkan untuk mengontrol kecepatan unduh dari domainnya.

Untuk sekarang, inilah yang saya lakukan:

Buat kelas tc baru dengan id unik (diambil dari basis data, bukan titik di sini), sebagai induk kelas 2: 1, nilai rate 1bps, nilai ceil diatur ke kecepatan unduh terbatas.

Berikut adalah perintah tc:

-------------- BEGIN SCRIPT --------------
DOWNLINK=800

## Setting up the static tc qdisc and class

$tc qdisc add dev $LAN_IFACE root handle 2: htb default 0xFFFF

# Main class so the default class can borrow bandwith from the others
$tc class replace dev $LAN_IFACE parent 0x2: classid 0x2:0x1 htb rate $DOWNLINK ceil $DOWNLINKkbps

# add the default class of class id 2:a under the main class of classid 2:1
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0xFFFF htb rate 1kbps ceil $DOWNLINKkbps prio 0

# add to the leaf class 2:10 for default traffic a sfq qdisc
$tc qdisc add dev $LAN_IFACE parent 0x2:0xFFFF handle 0xFFFF: sfq perturb 10

## The dynamic part called each time a new restriction for a couple domain/user is added
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0x$idHex htb rate 1bps ceil $speedDownkbps prio 1

# Add the sfq at the leaf class 2:1$id
$tc qdisc add dev $LAN_IFACE parent 0x2:0x$idHex handle 0x$idHex: sfq perturb 10

# $id is the mark added by iptables for this couple domain/user
$tc filter replace dev $LAN_IFACE parent 0x2:0 protocol ip prio 3 handle 0x$id fw flowid 0x2:0x$idHex
-------------- END SCRIPT --------------

Semua lalu lintas normal (tanpa batasan kecepatan) harus pergi ke kelas default, dan yang terbatas harus dikirim ke kelas tc yang sesuai.

Poin yang saya ragu dengan serius adalah penggunaan kecepatan minimal 1bps untuk kelas default dan kelas terbatas. Saya tidak dapat mengontrol jumlah kelas terbatas yang akan dibuat, dan saya tidak ingin total tingkat kelas terbatas menjadi lebih dari salah satu kelas root.

Poin lain, saya menambahkan default prio 0, dan kelas terbatas prio 1, jadi jika kelas default harus meminjam (hampir selalu sesuai dengan kurs yang sangat lambat), kelas ini akan dilayani sebelum domain terbatas lainnya. Tetapi bukankah domain itu akan kelaparan jika saya membiarkan langit-langit kelas default sebagai salah satu dari kelas root?

Bagaimana saya bisa berhasil memungkinkan pengguna untuk menjaga interaktivitas dan bandwidth yang layak untuk penggunaan yang tidak terbatas, sementara membatasi kecepatan untuk beberapa domain pasangan / pengguna?

Saya juga bertanya-tanya apakah kelas default di sini berguna, karena jika saya tidak menentukan kelas default untuk htb qdisc, paket-paket yang tidak cocok dengan filter akan hilang pada kecepatan perangkat keras. (tapi di sini lagi dengan membuat kelas terbatas kelaparan?)

Saya benar-benar baru untuk tc dan QoS jaringan, jadi saran, kritik (yang konstruktif;)) akan diterima.

Vincent.

Mulot
sumber

Jawaban:

2

Karena Anda tidak termasuk pengklasifikasi, sulit untuk mengurangi lalu lintas apa yang Anda maksudkan secara tepat di setiap kelas. Misalnya, lalu lintas keluar http atau ssh sangat penting untuk interaktivitas, http masuk tidak begitu banyak.

Saya akan menjamin bandwidth tertentu untuk setiap layanan dengan mengatakan: Saya memiliki x kbps untuk lalu lintas httpd yang masuk, dan itu akan dibagi rata di antara para pengguna. Jika Anda memiliki 10 atau 100 pengguna, itu wajar. "Jika Anda memiliki pengguna prioritas tinggi atau pengguna prioritas rendah di setiap layanan ini, Anda perlu memiliki kelas dan pengklasifikasi tambahan untuk mereka.

(Juga saya harap Anda tahu bahwa Anda hanya dapat membentuk lalu lintas keluar dari sebuah antarmuka, BUKAN yang masuk. Itu berarti jika Anda ingin membatasi uplink, Anda harus bekerja dengan antarmuka keluar ke internet atau menggunakan Perangkat Antrian Menengah . Panduan lartc.org adalah sumber yang sangat bagus.)

AndreasM
sumber