Тема: Настройка ALTQ+PF в FreeBSD
Необходимо настроить шлюз для раздачи интернета с планировщиком altq. Имеется локальная сеть 192.168.100.0/24, сервер висит на 192.168.100.2. Скорость доступа в интернет - 2 Мбита. При этом скорость по некоторым подсетям (их много, городская сетка) не должна ограничиваться. Интернет каждому пользователю должен раздаваться с некоторой гарантированной скорость и, в случае свободного канала, увеличиваться.
С altq знаком буквально пару дней, поэтому не удается нормально настроить.
Что можно изменить в настройках?
Вот мой /etc/pf.conf :
int_if="rl0"
ext_if="tun0"
users_list="{ 192.168.100.14, 192.168.101.22, 192.168.100.29,\
192.168.100.37, 192.168.100.39, 192.168.100.46, 192.168.100.163,\
192.168.100.241 }"
lan="192.168.100.0/24"
odix="{ 193.22.84.0/24,193.39.118.0/24,194.8.56.0/24,194.44.45.0/24,\
# Здесь все городские IP-шники
212.86.240.0/21,213.155.0.0/19,213.231.0.0/18,217.146.240.0/20 }"
width=15% # Гарантированная пропускная способность для пользователя
set loginterface $ext_if
table <my> {$lan}
table <me> { 192.168.100.2 }
#перечисления пользователей (всего порядка 10-ти, я только часть перечислил)
table <andrey> {192.168.100.37}
table <valera> {192.168.100.29}
table <ksusha> {192.168.100.22}
table <users> {$users_list}
set block-policy return
set skip on lo0
set skip on $int_if
scrub in all
altq on $int_if cbq bandwidth 100Mb queue { inet_in, default_in }
queue inet_in bandwidth 2Mb \
{ \
#пользователи
valera_in, \
andrey_in, \
ksusha_in, \
}
queue valera_in bandwidth $width cbq ( rio, borrow)
queue andrey_in bandwidth $width cbq ( rio, borrow)
queue ksusha_in bandwidth $width cbq ( rio, borrow)
queue default_in bandwidth 97% cbq (default)
altq on $ext_if cbq bandwidth 100Mb queue {inet_out, default_out }
queue inet_out bandwidth 2Mb \
{ \
valera_out, \
andrey_out, \
ksusha_out, \
}
queue valera_out bandwidth $width cbq ( rio, borrow)
queue andrey_out bandwidth $width cbq ( rio, borrow)
queue ksusha_out bandwidth $width cbq ( rio, borrow)
queue default_out bandwidth 97% cbq ( default)
nat on $ext_if from $users_list to any -> ($ext_if)
#antispoof quick for $ext_if
block in on $int_if
block in quick proto tcp from !<my> to port {21, 22}
#здесь доступ в городскую сеть, скорость без ограничений
pass in quick on $int_if from <users> to $odix #queue od_user_out no state
pass out quick on $int_if from $odix to <users> #queue od_user_in no state
#интернет
pass in on $int_if from <valera> to any queue valera_out keep state
pass in on $int_if from <andrey> to any queue andrey_out keep state
pass in on $int_if from <ksusha> to any queue ksusha_out keep state
pass out on $int_if from any to <valera> queue valera_in keep state
pass out on $int_if from any to <andrey> queue andrey_in keep state
pass out on $int_if from any to <ksusha> queue ksusha_in keep state