Шейпинг в линуксе (vlan + nat + in/out)?

Знаю, про это написано огромное множество статей, но к сожалению пока что все они ясности не внесли. =(


Есть linux-роутер (в небольшом домовом провайдере, дистр — gentoo), раздающий инет 150+ пользователям.

Необходимо обеспечить ограничение скорости как in, так и out для пользователей согласно их тарифов.

Каждый дом имеет свой vlan, далее все эти vlan-ы приходят в роутер. На выходе один eth интерфейс в интернет. Все юзеры сидят за nat.


Схема получается такая:

{vlan1,vlan2,...,vlann}eth0 => (pc-router)[nat] => eth1


Нужно соответственно ограничить скорость как входящую, так и исходящую для каждого из пользователей согласно его ТП.


Не предлагать: Разнесение по разным тачкам, циску.

Нужно сделать это на одной тачке. По крайней мере фряха с этой задачей в другом сегменте справляется на ура (на неё и перейду, если всё таки не осилю шейпер в линуксе, но всё же сдаваться так просто не хочется).


По идее нужно сделать виртуальный ifb интерфейс, только не могу понять, как его подружить с in+out+nat+vlan.
  • Вопрос задан
  • 4432 просмотра
Пригласить эксперта
Ответы на вопрос 3
nicolnx
@nicolnx
А в чем, собственно, проблема? Маркируйте через iptables в mangle::FORWARD, после чего обычный HTB на vlan* и eth1, через filter fw загоняйте трафик в соотв. классы.
Шейпить будете соответственно исход с интерфейса. NAT абсолютно не помеха поскольку раскраска трафика происходит до него.
Ответ написан
fenrirgray
@fenrirgray
Откровенно говоря шейпер в ipfw НАМНОГО удобнее чем iproute2, так что вполне возможно переход на фряху таки правильное решение… Хоть и сам линуксоид, но все равно.
Ответ написан
@Yur4eg
Шейпер в линукс суров. Синтаксис tc этому только способствует. Особенно если нужно честно разделить входящую полосу, простого нативного способа это сделать я не знаю. Только с костылями в виде IFB или IMQ, лучше IFB он идеологически правилен, и даже вроде не надо патчить ядро и iptables. Исходящий трафик (идущий с роутера, к пользователям в виланы) я бы шейпил прям на их сетевых интрефейсах. Входящий от пользователей, маркировал и заворачивал в IFB. На IFB вешается дерево классов HTB и фильтрами по маркам пользователи попадают каждый на свой листик(leaf). У меня редиректится трафик вот этой чудесной командой
$TC filter add dev $VLAN parent ffff: protocol ip prio 1 u32 match u32 0 0 flowid 1:1 action ipt -j MARK --set-mark $VID action mirred egress redirect dev $IFB
Короче ставте фряху туда, если вы в ней разбираетесь, так будет и вам проще и пользователям надежней
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы