LINUX.ORG.RU
решено ФорумAdmin

Шейпер для локальной сети

 ,


3

1

Всем доброго времени суток!

В процессе наладки локальной сети на почти 200 машин, из которых пока только 40 подключены к интернету по 10Мб каналу, мне пришлось столкнуться с жуткими тормозами и абсолютно не честным разделением канала между клиентами. Любой включенный торрент наглухо убивал сетку. Два-четыре видеоролика в фулхд тормозили работу сетки почти до нуля.
Сегодня я, кажется, решил эту проблему и хочу поделиться.

Во-первых, огромная благодарность автору этой статьи: http://www.opennet.ru/base/net/adsl_shaper.txt.html
Статья старая, но вполне рабочая.
Буквальное её применение было для меня неудобно, потому что у меня в 5 раз больше сетка и, вдобавок, фильтрация по mac-адресам.

Собственно, вот результат: http://pastebin.com/zE5iKYf9

Мои добавления видны в строке 78, где происходит чтение списков в формате ip,mac и, далее, расстановка приоритетов для подсетей. Сделано немного топорно, но работает.

P.S. Надеюсь, кому-нибудь пригодится. К тому же, мне самому, в случае чего, здесь будет легче найти это решение, чем на опеннете :)
P.P.S. про htb.init знаю. Хотелось добиться полного понимания управления трафиком.

★★★★★

Последнее исправление: fractaler (всего исправлений: 1)

Судя по конфигу, торренты как забивали, так и будут забивать канал, так как там балансировка при помощи sfq по потокам а не по айпишникам. Чтоб балансировало по айпишникам, нужно вешать nfct-dst. Вот пример:

$TC filter add dev $IF_INT parent 1: protocol ip handle 0x700 fw flowid 1:70
$TC filter add dev $IF_INT parent 1:70 protocol ip handle 0x700 flow hash keys nfct-dst divisor 1024 baseclass 1:70
...и уже внутри 1:70 делать балансировку по потокам:
$TC qdisc add dev $IF_INT parent 1:70 handle 700: sfq perturb 1

P.S: На проце Intel Pentium G2130 и сетевухе rtl без задержек шейпит гигобит инета. OS: Gentoo Linux с натюненым ядром и системой.

iron ★★★★★
()
Последнее исправление: iron (всего исправлений: 1)
Ответ на: комментарий от iron

Спасибо, посмотрю.

Насколько я понимаю, в моём случае трафик сначала разбивается на полосы, и балансировка sfq применяется внутри полос:

        $TC class add dev $DEV_OUT parent 1:1 classid 1:$j htb rate $[$rate]kbit ceil $[cell]kbit prio $prio
        # Создаем фильтры для машин сети.
        $TC filter add dev $DEV_OUT parent 1:0 protocol ip prio $j handle $j fw flowid 1:$j
        # Теперь создаем очереди для машин сети.
        $TC qdisc add dev $DEV_OUT parent 1:$j handle $j: sfq perturb 5

Твоё решение выглядит чуть более простым и понятным. Так что когда не будет срочных дел ни у кого в сети, обязательно попробую. В следующее воскресенье, наверное. А пока недельку потестирую так. Торренты позапускаю, посмотрю.

Пока 12 часов работы — полёт нормальный. Гораздо лучше, чем было до этого.

fractaler ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.