Есть 2 канала в интернет. Необходимо, что бы определенные ip ходили через один канал, а другие через другой. Все это я с успехом реализовал. Схема приблизительно следующая:# Пользователи 1-го канала
pass in route-to ($ext_if1 $ext_gw1) from 192.168.0.1 to any queue q_user1
pass in route-to ($ext_if1 $ext_gw1) from 192.168.0.2 to any queue q_user2
...
pass in route-to ($ext_if1 $ext_gw1) from 192.168.0.N1 to any queue q_userN1# Пользователи 2-го канала
pass in route-to ($ext_if2 $ext_gw2) from 192.168.0.11 to any queue q_user11
pass in route-to ($ext_if2 $ext_gw2) from 192.168.0.12 to any queue q_user12
...
pass in route-to ($ext_if2 $ext_gw2) from 192.168.0.N2 to any queue q_userN2# DOWNLOAD
pass out on $int_if from any to 192.168.0.1 queue d_user1
...Вся эта схема работает. Все замечательно, если бы не одно НО!! Пакеты, которые проходят правила типа
pass in route-to ($ext_if1 $ext_gw1) from 192.168.0.N1 to any queue q_userN1 и
pass in route-to ($ext_if2 $ext_gw2) from 192.168.0.N2 to any queue q_userN2
они не попадают в свои очереди q_userN1 и q_userN2, а попадают в очереть DEFAULT, в следствии чего невозможно залимитировать UPLOAD-трафик и как следствие подскакивают пинги. Если кто-то имеет какие-либо соображения по этому поводу, пожалуйста выскажите.Заранее благодарен.
Имхо, юзеров каждого канала проше загнать в таблицу, либо в конфиге, либо "persist file", проще читать конфиг будет, но это если только для кажного юзверя не требуется своей отдельной очереди.
т.е.table <ch1_users> persist file "/etc/ch1_users.txt"
table <ch2_users> persist file "/etc/ch2_users.txt"altq on $ext_if1 cbq bandwidth 10Mb queue {ch1_def_queue,ch1_users_download,ch1_users_upload}
queue ch1_def_queue bandwidth 40% priority 2 cbq(default)
queue ch1_users_download bandwidth 30% priority 1
queue ch1_users_upload bandwidth 30% priority 1altq on $ext_if2 cbq bandwidth 10Mb queue {ch2_def_queue,ch2_users_download,ch2_users_upload}
queue ch2_def_queue bandwidth 40% priority 2 cbq(default)
queue ch2_users_download bandwidth 30% priority 1
queue ch2_users_upload bandwidth 30% priority 1pass in route-to ($ext_if1 $ext_gw1) from <ch1_users> to any queue ch1_users_upload
pass in route-to ($ext_if2 $ext_gw2) from <ch2_users> to any queue ch2_users_uploadpass out on $int_if from any to <ch1_users> queue ch1_users_download
pass out on $int_if from any to <ch2_users> queue ch2_users_downloadИмхо вот так все будет красиво зарезано =)
Юзеров каждого канала в таблицу я загнал, что бы можно было НАТ запустить. Использовать предложенную Вами схему возможности не имею, т.к. нужно строго ограничить каждому юзверю свой канал и свою очередь. Но по большому счету разницы между
pass in route-to ($ext_if1 $ext_gw1) from <ch1_users> to any queue ch1_users_upload и
pass in route-to ($ext_if1 $ext_gw1) from 192.168.0.2 to any queue ch1_user1_up я не вижу.Единственно что, очереди для download правил я пишу для внутреннего интерфейса, т.е.
altq on $int_if cbq bandwidth 10Mb queue {ch1_def_dw, ch1_user1_dw, ch2_user2_dw, ...}
...
Правда ограничение скорости по download'у работает правильно. Единственная проблема заключается в том, что весь аплоуд попадает в очереди дефолт (ch1_def_up, ch2_def_up)Спасибо за отклик
мб тогда и аплоуд на внутреннем интерфейсе резать?
pass in on $int_if from 192.168.0.Xn to any queue user_Xn_up
pass in route-to ($ext_if1 $ext_gw1) from 192.168.0.Xn to anyмоя ошибка - забыл объявить altq на внутренний интерфейс и прикручиваю queue от внешнего:
>pass out on $int_if from any to <ch1_users> queue ch1_users_download
>pass out on $int_if from any to <ch2_users> queue ch2_users_downloadмежду прочим на openbsd.org в факах аплоуд режут именно на внутреннем
http://www.openbsd.org/faq/pf/queueing.html#example2
> мб тогда и аплоуд на внутреннем интерфейсе резать?
> pass in on $int_if from 192.168.0.Xn to any queue user_Xn_up
> pass in route-to ($ext_if1 $ext_gw1) from 192.168.0.Xn to any
> моя ошибка - забыл объявить altq на внутренний интерфейс и прикручиваю queue
> от внешнего:
>>pass out on $int_if from any to <ch1_users> queue ch1_users_download
>>pass out on $int_if from any to <ch2_users> queue ch2_users_download
> между прочим на openbsd.org в факах аплоуд режут именно на внутреннем
> http://www.openbsd.org/faq/pf/queueing.html#example2напишите полностью свой конфиг, у меня такая же проблема, не могу разобраться