Tôi có một số nghi ngờ về cấu trúc HTB tôi đang sử dụng.
Mục đích của tôi là giới hạn tốc độ tải xuống và tải lên của người dùng trong mạng cục bộ. Mỗi người dùng của mạng có một danh sách tên miền riêng với tốc độ giảm và tăng cho tên miền mà anh ta không thể vượt quá.
Điều đó có nghĩa là user1 có thể có các điểm nhấn của anh ấy trên slashdot.org bị giới hạn ở 8KB khi tải xuống và 3KB để tải lên, và user2 có thể có trên slashdot.org quyền truy cập hạn chế 4KB xuống và 1KB.
Hiện tại tôi đã thiết lập một cặp iptables / tc hoạt động tuyệt vời, nhưng ở quy mô rất nhỏ, sử dụng 2 hoặc 3 máy chủ ảo cùng một lúc (Thật không may, tôi không thể thực hiện kiểm tra kích thước thực).
Đây là cấu trúc hiện tại của tôi (tôi sẽ chỉ hiển thị cấu trúc ở đầu ra của mạng LAN, cấu trúc cho tải lên chỉ đơn giản là một "bản sao" của cái này)
Một HTB qdisc (xử lý 2 :) được đính kèm trên giao diện, lớp lưu lượng mặc định là lớp FFFF.
Lớp gốc 2: 1 trực tiếp theo HTB qdisc có tỷ lệ và vượt quá khả năng TẢI XUỐNG.
Lớp 2 mặc định: FFFF là con 2: 1, với tỷ lệ 1kbsp và trần công suất DOWNLINK.
Sau đó, có các lớp khác được thêm động khi có một hạn chế mới cho người dùng từ một tên miền nhất định, một lớp tc mới được thêm vào để kiểm soát tốc độ tải xuống từ miền của nó.
Bây giờ, đây là những gì tôi đã làm:
Tạo một lớp tc mới với một id duy nhất (được lấy từ cơ sở dữ liệu, không phải điểm ở đây), vì là cha mẹ của lớp 2: 1, giá trị tốc độ là 1bps, giá trị trần được đặt ở tốc độ tải xuống có giới hạn.
Dưới đây là các lệnh 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 --------------
Tất cả lưu lượng truy cập bình thường (không có giới hạn tốc độ) sẽ chuyển đến lớp mặc định và lưu lượng bị hạn chế sẽ được gửi đến lớp tc tương ứng của nó.
Điểm tôi nghi ngờ nghiêm trọng là việc sử dụng tốc độ 1bps tối thiểu cho lớp mặc định và lớp bị hạn chế. Tôi không thể kiểm soát số lượng các lớp bị hạn chế sẽ được tạo và tôi không muốn tổng tỷ lệ của lớp bị hạn chế vượt quá một trong các lớp gốc.
Một điểm khác, tôi đã thêm mặc định là ưu tiên 0 và lớp bị hạn chế là ưu tiên 1, vì vậy trong trường hợp lớp mặc định nên mượn (hầu như luôn luôn theo tốc độ rất chậm), lớp này sẽ được phục vụ trước miền bị hạn chế khác. Nhưng những tên miền đó sẽ không chết đói nếu tôi giữ trần của lớp mặc định là một trong các lớp gốc?
Làm cách nào tôi có thể thành công để cho phép người dùng giữ tương tác và băng thông tốt cho việc sử dụng không bị hạn chế, trong khi giới hạn tốc độ cho một vài tên miền / người dùng?
Tôi cũng tự hỏi liệu lớp mặc định ở đây có hữu ích không, vì nếu tôi không chỉ định một lớp mặc định cho htb qdisc, các gói không khớp với các bộ lọc sẽ bị mất ở tốc độ phần cứng. (nhưng ở đây một lần nữa với việc làm cho lớp bị hạn chế chết đói?)
Tôi thực sự mới đối với Qc và mạng QoS, vì vậy mọi lời khuyên, phê bình (mang tính xây dựng;)) sẽ được hoan nghênh.
Vincent.