HTB의 최저 요금 및 기본 클래스 문제 내 현재

사용중인 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를 처음 접하므로 조언, 비평가 (건설적인;))를 환영합니다.

빈센트



답변

분류자를 포함하지 않았으므로 각 클래스에서 정확히 어떤 트래픽을 의미하는지 공제하기가 어렵습니다. 예를 들어, 나가는 http 또는 ssh 트래픽은 상호 작용에 매우 중요하며, 들어오는 http는 그리 많지 않습니다.

다음과 같이 말함으로써 각 서비스 에 대해 특정 대역폭을 보장 할 것 입니다. 들어오는 httpd 트래픽에 x kbps가 있으며 사용자간에 동등하게 나누어집니다. 사용자가 10 명 또는 100 명인 경우 공평합니다. “이러한 각 서비스에 우선 순위가 높은 사용자 또는 우선 순위가 낮은 사용자가있는 경우 추가 클래스 및 분류자가 있어야합니다.

(또한 들어오는 인터페이스가 아닌 인터페이스에서만 나가는 트래픽을 형성 할 수 있다는 것을 알고 싶습니다. 즉, 업 링크를 제한하려면 나가는 인터페이스를 인터넷으로 연결하거나 중간 큐 장치를 사용해야합니다 . lartc.org 안내서는 매우 훌륭한 자료입니다.)


답변