사용중인 HTB 구조에 대해 의구심이 있습니다.
나의 목표는 로컬 네트워크에서 사용자의 다운로드 및 업로드 속도를 제한하는 것입니다. 네트워크의 각 사용자는 초과 할 수없는 도메인의 다운 및 업 속도를 가진 개인 도메인 목록을 가지고 있습니다.
이는 user1이 slashdot.org에 대한 액세스를 다운로드시 8KB로 제한하고 업로드를 위해 3KB로 제한 할 수 있고, user2는 slashdot.org에서 4KB 및 1KB를 제한적으로 액세스 할 수 있음을 의미합니다.
지금은 훌륭하게 작동하지만 동시에 2 또는 3 개의 가상 호스트를 사용하여 아주 작은 규모로 iptables / tc 커플을 설정했습니다 (불행히도 실제 크기 테스트를 수행 할 수는 없습니다).
여기 내 현재 구조가 있습니다 (LAN 출구에서 하나만 보여줄 것입니다. 업로드에 대한 것은 단순히 "복사본"입니다)
인터페이스에 연결된 HTB qdisc (핸들 2 :), 기본 트래픽 클래스는 클래스 FFFF입니다.
HTB qdisc 바로 아래의 루트 클래스 2 : 1은 다운 링크 용량을 평가하고 상한값을 갖습니다.
기본 클래스 2 : FFFF는 2 : 1의 자식으로, 1kbsp의 속도와 다운 링크 용량의 ceil입니다.
그런 다음 특정 도메인의 사용자에 대한 새로운 제한이있을 때 동적으로 추가 된 다른 클래스가 있으며 도메인에서 다운로드 속도를 제어하기 위해 새로운 tc 클래스가 추가됩니다.
지금은 내가 한 일입니다.
클래스 2 : 1의 부모로서 비율 값이 1bps이고 ceil 값이 제한된 다운로드 속도로 설정되어있는 고유 ID (여기서는 포인트가 아닌 데이터베이스에서 가져옴)로 새 tc 클래스를 작성하십시오.
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 --------------
모든 일반 트래픽 (속도 제한 없음)은 기본 클래스로 이동하고 제한된 트래픽은 해당 tc 클래스로 전송되어야합니다.
내가 심각하게 의심하는 것은 기본 클래스와 제한된 클래스에 최소 1bps 속도를 사용한다는 것입니다. 생성 될 제한된 클래스 수를 제어 할 수 없으며 제한된 클래스의 총 속도를 루트 클래스 중 하나 이상으로 유지하고 싶지 않습니다.
또 다른 요점은 기본 prio 0과 제한된 클래스 prio 1을 추가했기 때문에 기본 클래스가 빌려야 할 경우 (거의 항상 느린 속도에 따라)이 클래스는 다른 제한된 도메인보다 먼저 제공됩니다. 그러나 기본 클래스의 ceil을 루트 클래스 중 하나로 유지하면 해당 도메인이 고갈되지 않습니까?
여러 도메인 / 사용자의 속도를 제한하면서 사용자가 제한되지 않은 사용에 대해 적절한 상호 작용 성과 대역폭을 유지할 수 있도록하려면 어떻게해야합니까?
htb qdisc에 기본 클래스를 지정하지 않으면 필터와 일치하지 않는 패킷이 하드웨어 속도로 대기열에 들어가기 때문에 기본 클래스가 유용한 지 궁금합니다. (그러나 여기에 다시 제한된 등급의 굶주림을 만드는가?)
나는 tc와 네트워크 QoS를 처음 접하므로 조언, 비평가 (건설적인;))를 환영합니다.
빈센트