Есть шлюз, который по nat раздает инет по локалке. Хотелось бы по некоторым правилам приоритезировать входящий траффик, и резать некоторый. Если я правильно понимаю tc служит для контроля траффика исходящей очереди, но никак не входящей. Или я неправ? Я сделал следующим образом. Пока для простоты скажем мне просто одной машине в локалке нужно порезать весь входящий траффик. Я в iptables, в таблице mangle добавил правила:
$IPT -t mangle -A FORWARD -s 192.168.1.41 -j CONNMARK --set-mark 5
$IPT -t mangle -A FORWARD -m connmark --mark 5 -j CONNMARK --restore-mark # чтобы переместить метку из CONNMARK в просто MARK
Далее в tc, на интерфейсе локалки вешаю дисциплину htb. Создаю рут и дефолтовый класс на него, с rate = 1000Kbit, ceil = 100000Kbit (100Mb сетка, rate можно было и побольше поставить наверное, незнаю что это я так мало сделал =/) Затем создаю дополнительный класс, тоже htb, с rate=1Kbit, ceil=3Kbit (это класс для ограниченного инета). Далее tc filter вешаю фильтр на fwmark 5, чтобы попадал в этот ограниченный класс. На leaf's вешаю pfifo. Вроде бы все работает, на маркированной машине действительно траффик урезается до 3х кбит =)
Но есть вопросы. Во первых насколько целесобразно так ограничивать траффик? Цель ограничения траффика - его платность. Но ведь я ограничиваю скорость уже на внутреннем интерфейсе. Как в такой ситуации будет вести себя поток траффика? Я вижу 2 варианта.
1. Клиент посылает запрос на сервер, и сервер бесконтрольно, на максимальной скорости для моего интренет соединения. Пакеты попадают на роутер. Пока есть свободные токены у htb, он потихоньку выдает их клиенту, на заданной скорости в 3кбита. Но т.к. скорость интернет соединения намного превышает эти 3кбита, то со временем токены закончаться и пакеты начнут отбрасываться. В результате клиент будет в дальнейшем запрашивать их дополнительно и я вместо экономии получу прибавку паразитного траффика.
2. Клиент посылает запрос на сервер, сервер выдает некоторую часть пакетов и ждет ответа от клиента, об успешной доставки. Пакеты спокойно укладываются в токены и потихоньку уходят клиенту. Клиент получив всю очередь пакетов посылает запрос серверу на очередную порцию. Лишних пакетов нет, траффик искуственно урезан, все довольны. Соб-но это и есть главные вопросы, которые меня ну очень интересуют =)