Назад | Перейти на главную страницу

Формирование трафика с использованием tc

У меня есть ссылка на 1,5 Мбит / с, которой я хочу поделиться со 150 пользователями.

Моя установка следующая:

Коробка Linux с 3 сетевыми картами eth0 - общедоступный IP-адрес eth1 - подсеть A - 50 пользователей (статические IPS) eth2 - подсеть B - 100 пользователей (через DHCP)

Я использую squid в качестве прозрачного прокси на порту 3128. DHCP-сервер, использующий порты 67 и 68.

Я создавал, но думаю, что пакеты не попадают в нужные очереди

#!/bin/bash
DEV=eth0

RATE_MAIN=2048kbit 
CEIL_MAIN=2048kbit
BURST=1b
CBURST=1b

RATE_DEFAULT=1024kbit 
CEIL_DEFAULT=$CEIL_MAIN
PRIO_DEFAULT=3

RATE_P2P=1024Kbit
CEIL_P2P=$CEIL_MAIN
PRIO_P2P=4

RATE_IND=32kbit
CEIL_IND=$CEIL_DEFAULT

tc qdisc del dev $DEV root

tc qdisc add dev $DEV root handle 1: htb default 30
tc class add dev $DEV parent 1: classid 1:1 htb rate $RATE_MAIN ceil $CEIL_MAIN
tc class add dev $DEV parent 1:1 classid 1:10 htb rate $RATE_DEFAULT ceil $CEIL_MAIN burst $BURST cburst $CBURST prio $PRIO_WEB

## some other sub class for p2p other traffic
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $RATE_P2P ceil $CEIL_P2P burst $BURST cburst $CBURST prio $PRIO_P2P

$IPS_NET1=50
$IPS_NET2=100
let $IPS=$IPS_NET1+$IPS_NET2
for ((i=1; i<= $IPS; i++))
do
    let CLASSID=($i+100)
    let HANDLE=($i+100)

    tc class add dev $DEV parent 1:10 classid 1:$CLASSID htb rate $RATE_IND ceil $CEIL_IND

    tc qdisc add dev $DEV parent 1:$CLASSID handle $HANDLE: sfq perturb 10
done

## Generate IP addresses ##
IP_ADDRESSES=""

# Subnet A
BASE_IP=10.10.10.
for ((i=2; i<=$IPS_NET1+1; i++))
do
 TEMP="$BASE_IP$i"
 IP=ADDRESSES="$IP_ADDRESSES $TEMP"
done

# Subnet B
BASE_IP=192.168.0.

for ((i=2; i<=$IPS_NET2+1; i++))
do
 TEMP="$BASE_IP$i"
 IP_ADDRESSES="$IP_ADDRESSES $TEMP"
done

## FILTERS ##
j=1
U32="tc filter add dev $DEV protocol ip parent 1:0 prio $PRIO_DEFAULT u32"
for NET in $IP_ADDRESSES; do
 let CLASSID=($j+100)
 $U32_DEFAULT match ip src $NET/32 flowid 1:$CLASSID
 $U32_DEFAULT match ip dst $NET/32 flowid 1:$CLASSID
 let j=j+1
done

Вы можете помочь мне понять, что с этим не так?

в основном я хочу, чтобы мои классы были

1: 1 (1,5 Мбит) 1:10 (1024 Кбит) 1:20 (1024 Кбит) (200 кадров в секунду по 32 Кбит)

Я все еще занимаюсь формированием трафика и нашел Руководство пользователя HTB Linuxqueuing - руководство пользователя отличное чтение. Его примеры почти точно описывают то, что вы делаете.

Похоже, вы пытаетесь создать один класс для каждого IP-адреса, как правило, этого не происходит, особенно когда у вас для начала такая крошечная пропускная способность.

Я бы сначала попробовал что-нибудь вроде wondershaper.

Но 1,5 Мбит / с на 150 пользователей? Скорее всего, это просто не сработает. Вы не сказали, что собираются делать эти пользователи, я надеюсь, что они заблокировали машины, на которых разрешено запускать только приложение интрасети.

Если ваша ссылка составляет всего 1,5 Мбит / с, почему у вас RATE_MAIN 2048 Кбит (что превышает 2 Мбит / с)? Если вы лжете в tc относительно вашей абсолютной максимальной пропускной способности, он никогда не сможет управлять пропускной способностью даже близко к тому, как вы ее настроили.

Также обратите внимание, что обычно 1,5 Мбит / с составляют 1500 кбит / с и 1500000 бит / с. Однако в tc 1 мбит равен 1024 кбит, что равно 1048576 бит / с.

Если ваш канал составляет 1,5 Мбит / с, ваш теоретический максимум составляет 187500 бит / с (в tc bps означает БАЙТЫ в секунду, а не бит в секунду, как мы привыкли), и для эффективной фильтрации трафика вам обычно нужно уменьшить ее на некоторый реалистичный процент. Если нет дополнительных накладных расходов протокола (кроме TCP / IP, но это уже учитывается tc автоматически), то вы забираете, возможно, 90% от этого. Если у вас есть линия DSL за ним (возможно, с SNAP + LLC + PPPoE + AAL5 + ATM), вам лучше взять только 80% от этого.

И последнее, но не менее важное: вы пытаетесь дать каждому пользователю класс размером 32 кбит (в tc это 32 * 1024 кбит / с).

150 * 32 = 4800

Вы знаете, что это ПУТЬ НАД скорость вашей линии, а?

Если вы ожидаете, что HTB будет работать правильно и так, как ожидает большинство людей, сумма ставок и потолков всех дочерних классов не может превышать скорость и потолок его родительского класса. И вы уже преодолели это (1024 - значение вашего родительского класса).