И так... если долго мучаться - что-нибудь получится. Я решил написать этот пост для себе подобных новичков как биллинга NoDeny, так и новичков ipfw. Описывать буду всё ещё на старом шейпере, который был с 126 и 127 таблицами, т.к. он прост в освоении и вполне возможно кто-либо решит попилить мой способ раздельного ограничения на все 4 направления.
итак, предположим у нас есть таблица 126, где какой-нибудь захолустье-ix и таблица 127, где наши клиенты альтернативного направления.
[root@gateway ~]# ipfw table 127 list
192.168.0.55/32 1006
192.168.0.207/32 1094
192.168.31.10/32 1134
192.168.31.20/32 1134
Хорошо. У них есть каждому своя одна труба через которую трафик гуляет и туда и сюда. Но предположим это ADSL. Сразу начинается сферический вакуум, если мы хотим давать по 512 на исходящий в захолустье-ix, но получать оттуда мы хотим куда бОльший по скорости трафик. Делема. Труба-то одна. Я (типа) подумав, решил: ок, а давай-ка я в firewall.conf где-нибудь в начале пропишу трубу. И ничего не вышло. Она не обрабатывалась. Конечно я потом нашёл то место, где можно примостить пайп (это была триста какая-то строка), но в диверт видимо она не входила. Т.е. это был не приемлемый вариант. Мы не можем обсчитывать альт. направление. Далее я открыл nofire.pl и глянул в его начало:
&Add_Rule("-f pipe flush");
Т.е. у нас что делается с трубами? Правильно, чистка. Вот потому фокус в файрволе бсд не прошёл. Далее я нашёл места, откуда трафик убегает, и самое главное - куда он
по той же трубе прибегает. Это важно, т.к. я входящий трафик не хотел ловить этой же трубой.
# &SetIpfwRule(qq{pipe tablearg ip from table(126) to table(127)});
Как видим я его просто закомментировал. И что же у меня получилось? Я отправляю по трубе со скоростью, указанной в тарифе в альтернативном направлении трафик и... даже не пытаюсь его ничем словить. В диверт он попадает но на скорости дури вашего канала. А если этот канал общий с инторнетами, то не трудно догадаться, что если напрячь альтернативное направление, кое-кто начнёт ныть про педали инторнета. Итак мы знаем, что пайпы чистятся в начале скрипта. "Хорошо, пусть почистяся", решил я и создал трубу после прочистки труб.
&Add_Rule("pipe 126 config bw 6000kbit/s");
Да, вот такой общий для всех 126-ой пайп на скорости 6 Мбит. Далее мне нужно словить весь входящий из захолустье-ix к клиентам (127) трафик в эту трубу с номером 126. Я вернулся в то место, где я отключил ловлю входящего трафика:
# &SetIpfwRule(qq{pipe tablearg ip from table(126) to table(127)});
и добавил свою строку:
&SetIpfwRule(qq{pipe 126 ip from table(126) to table(127)});
Что означает как "всех кто пришёл из таблицы 126 в 127-ю словить в трубу 126". И у меня всё получилось. Диверт общитывает этот трафик, труба ограничивает этой толпе охоников за пиринговым трафиком скорость в общем. Да, не очень элегантно, но это работает. Скорее всего если дойдут руки - гляну шейпер на 4 направления, но гарантировать не могу - у меня нет пока такой нужды.
И ещё я думаю, что оказал именно помощь новичкам, а не пищу для копипаста. Буду рад, если кому-либо помог с подобной моей ситуацией.
И ещё раз прошу извинений у авторов биллинга за нытё)