LINUX.ORG.RU

Ответ на: комментарий от svr4

Желательно краткое решение к iptables, сервер не для покупки дешевого роутера поднимал:D

Cherbet
() автор топика
Ответ на: комментарий от nickleiten

Я пытался что-нибудь там накурить, но не понял там ничего. Я же попросил всего лишь как к примеру для одного-нескольких mac адресов зарезать скорость? Ибо когда они жрут трафик, это не есть хорошо. Интернет 50 mb/s, нужно зарезать клиенту до 10 mb/s, и сделать это так, чтобы при смене IP или розетки, в любом вообщем случае у него было 10 mb/s, т.к насчет mac адреса они не догадаются.

Cherbet
() автор топика
Ответ на: комментарий от Cherbet

В общем случае моно написать скрипт, который будет устанавливать параметры шейпера при старте системы. Я его обычно называю /etc/rc.tc.

Чтоб скрипт можно было перезапускать с новыми параметрами, первой строкой удаляем старые классы, дисциплины и фильтры командой:

tc qdisc del dev eth0 root

Далее определяем базовую/корневую дисциплину на интерфейсе с указанием класса по-умолчанию:

tc qdisc add dev eth0 root handle 1: htb default 10

После чего создаём этот класс с дисциплиной. Они будут резать скорость для пакетов по-умолчанию (если не нужно ограничивать, то подставляем скорость интерфейса, например, 100мбит):

tc class add dev eth0 parent 1: classid 1:10 htb rate 100mbit prio 3
tc qdisc add dev eth0 parent 1:10 handle 10 sfq perturb 10

С этого момента мы уже и начинаем резать скорость по критериям. То есть, правила выше не меняются при каждом запуске, а ниже мы уже фомрируем/режем как надо под каждого клиента. Создаём класс и дисциплину с ограничением в 10мбит:

tc class add dev eth0 parent 1: classid 1:101 htb rate 10mbit prio 3
tc qdisc add dev eth0 parent 1:101 handle 101 sfq perturb 10

И указываем фильтром какой именно трафик будет идти в этот класс:

tc filter add dev eth0 parent 1: prio 5 protocol 802_3 u32 match ether dst 00:11:22:33:44:55 match u16 0x0800 0xffff at -2 flowid 1:101
Если не сработает, то придётся фильтр настраивать на L3 уровень с отрицательными смещениями классификатора:
tc filter add dev eth1 parent 1: protocol ip prio 5 u32 match u16 0x0800 0xffff at -2 match u32 0x22334455 0xffffffff at -12 match u16 0x0011 0xffff at -14 flowid 1:101

Целиком скрипт:

#!/bin/sh

DEV="eth0";
DEFRATE="100mbit";

#delete old rules
tc qdisc del dev $DEV root;
#root discipline
tc qdisc add dev $DEV root handle 1: htb default 10
#default class and discipline
tc class add dev $DEV parent 1: classid 1:10 htb rate $DEFRATE prio 3
tc qdisc add dev $DEV parent 1:10 handle 10 sfq perturb 10

#client 1
tc class add dev $DEV parent 1: classid 1:101 htb rate 10mbit prio 3
tc qdisc add dev $DEV parent 1:101 handle 101 sfq perturb 10
tc filter add dev $DEV parent 1: prio 5 protocol 802_3 u32 match ether dst 00:11:22:33:44:55 match u16 0x0800 0xffff at -2 flowid 1:101

#client 2
tc class add dev $DEV parent 1: classid 1:102 htb rate 10mbit prio 3
tc qdisc add dev $DEV parent 1:102 handle 102 sfq perturb 10
tc filter add dev $DEV parent 1: prio 5 protocol 802_3 u32 match ether dst 00:22:33:44:55:66 match u16 0x0800 0xffff at -2 flowid 1:102

Важна уникальность чисел classid/handle/flowid. Перед двоеточием указывается корневой класс (куда прикрепляемся), после свой собственный уникальный номер, то есть комбинации 1:1 (или 10:10) не бывает. По приоритетам, дисциплинам и фильтрованию по классификатору u32/u16/u8 match долго расписывать, это нужно изучать.

PS. Скрипт надо бы проверить, могут быть опечатки.

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

В виде скрипта tc говорит как ею пользоваться, когда в терминале набираю, все нормально. Работу проверю только в понедельник.

Cherbet
() автор топика
Ответ на: комментарий от Cherbet

Все, понял в чем дело, виновата windows.

Cherbet
() автор топика
Ответ на: комментарий от Cherbet

Переписал скрипт немного, теперь работает, но отдачу как зарезать?

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