2ой день долблюсь головой о стену. За каждым углом коварно поджидают грабли. Решил спросить у умных людей.
Итак, дано. Есть шлюз на Debian Wheezy. У шлюза, кроме всего прочего, есть внешний интерфейс eth2 и 2 внутренних влана eth1.10 и eth1.20.
В eth2 приходит 30 мбит от провайдера. На eth1.10 и eth1.20 100мбит локалки, которые активно общаются друг с другом и ходят в интернет через нат на этом самом шлюзе.
Провайдер регулирует полосу дропом пакетов. Предположительно, из-за этого у пользователей периодически рвутся соединения.
Очевидное решение - попытаться мягко ограничить на шлюзе входящую полосу и надеяться, что это будет работать.
Есть ньюанс. Условно говоря, eth1.10 - для випов и мажоров. eth1.20 - для плебеев. Соответственно, нужно приоретизировать входящий трафик в зависимости от его пункта назначения в локальной сети.
Из ньюанса вытекает, что я не могу шейпить входящий трафик на eth2, потому что qdisc, насколько я понимаю, работает до попадания пакета в PREROUTING, в котором происходит nat. Соответственно, в этот момент я еще не знаю, куда предназначается трафик (плюс, насколько я понял, ingress qdisc умеет только полисить. Методом дропа. Так что смысл теряется).
Из ньюанса так же вытекает, что я не могу шейпить трафик, выходящий из eth1.10 и eth1.20, потому что qdisc локальный для интерфейса, и я не могу сопоставить приоритеты на разных интерфейсах.
Не совсем понимаю, как работает IFB (в том смысле, каким путем трафик этот самый IFB покидает, и где на диаграмме netflow он оказывается), но судя по всему, я мог бы связать eth1.10 и eth1.20 через IFB. Мог бы. Если бы не одно но. На IFB, насколько я понял, нет нетфильтра. И он не видит нетфильтровские метки MARK. Можно только делать u32 match. Но у u32 match нет реверс матча. А поскольку локалки eth1.10 и eth1.20 общаются между собой на всех 100 мегабитах, мне внутренний трафик шейпить совсем не хочется, и нужно исключить из шейпера определенный диапазон адресов.
Куда попадают пакеты, прошедшие через IFB? (например, на этой диаграмме http://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg)
Как обрабатывать эти пакеты в iptables? (скажем, гипотетически, если я повешу ifb0 на eth2 ingress qdisc, то какой интерфейс нужно будет использовать для правил iptables, чтобы обрабатывать входящий на eth2 трафик? -i ifb0?)
Как разрулить проблему с 2мя внутренними интерфейсами (или натом)?