Страница 1 из 1
PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-12 18:02:08
sima
Уважаемые гуру, есть задача сделать шейпинг со следующими параметрами:
во время конкурирующего использования канала офис 1 имеет более высокий приоритет и 70% канала, офис2 соответственно 30% и более низкий.
Если канал не используется одним из офисов, то другой может пользоваться всей пропускной способностью. Канал 512 килобит.
Я набросала такие правила:
Код: Выделить всё
altq on $vpn_if cbq bandwidth 500Kb queue \
{ qffice1, qoffice2 }
queue qffice1 bandwidth 70% priority 3 cbq ( default borrow )
queue qoffice2 bandwidth 30% priority 2 cbq ( borrow )
К сожалению протестировать это я не могу, поскольку офисов как таковых ещё нет, но нужно к их появлению что-бы работало все и сразу.
Больше никаких строчек относящихся к шейпингу в конфиге нету.
Пожалуйста покажите если я где ошиблась.
И ещё такой вопрос: Как поведет себя шейпинг при условии что офисы натятся средствами pf, ведь из ната пакеты уходят уже с подмененным адресом? Если я права, то подскажите как быть?
Схема:
офис1/24 ---|.......|
...............| гейт |---инет
офис2/28----|.......|
Заранее благодарна.
Re: PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-12 19:45:31
paradox
К сожалению протестировать это я не могу, поскольку офисов как таковых ещё нет, но нужно к их появлению что-бы работало все и сразу.
как показывает практика
небывает таких ситуаций что нужно срочно что то поставитьс нуля и что бы работало
тоесть если у вас токо когда то появиться оффис
то время на настройку и откатку всегда будет
поэтому я бы так не волновался насчет того как это построить
зы
правила у вас не полные поскольку нет тех которые забрасывают в очередь
зызы
всегда есть виртуальные машины на которых можно откатать логику
Re: PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-12 20:08:37
iZEN
Вот тут есть примерчики на многие случаи из жизни PF:
http://www.lissyara.su/?id=1833
Re: PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-13 1:52:08
sima
Спасибо за ответы!
2 paradox
Ситуация действительно специфичная, начальство поставило задачу что-бы к старту все было готово, потом на это не будет времени. Да и из тестовых платформ на данный момент есть только ноутбук, поэтому проблематично будет протестировать. Я читала ман, но поскольку негде применить в реальности, для меня это абстрактные слова.
Про правила постановки в очередь я поняла
если я напишу "pass quick on $vpn_if from $office1 to any queue qoffice1" после правил шейпенга, то при прохождении пакета через это правило он будет отправлен в очередь шейпенга... А вот куда он попадет после очереди? С какого правила он продолжет обрабатываться? Или есть смысл правила постановки в очередь ставить последними в списке правил?
И ещё один вопрос, я пыталась нарисовать схему прохождения пакета, получается что все пакеты попадают на шейпинг уже пройдя нат (поскольку я шейплю на внешнем интерфейсе), и имеют адресом отправителя уже адрес сервера и соответственно шейпинг не будет работать?
PS А вобще те правила которые я написала, это правильный вектор размышления, или же я копаю не туда?
2 iZEN
Спасибо, почитаю.
Re: PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-13 2:13:53
paradox
наскоко я помню сначала правилом запихиваеться пакет в очередь а потом уже он может попадать в нат
для обычного человека это можно уточнить токо в документации
лучшая документация на openbsd.org
поскольку pf это ихнее детище))
Re: PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-14 5:10:00
sima
Я набросала правила, если не сложно прокомментируйте пожалуйсто:
Код: Выделить всё
====#
# IF #
#====#
vpn_if="ng0"
ext_if="rl0"
int_if="nfe0"
off_if="xl0"
#=====#
# IPs #
#=====#
ext_ip="172.16.6.6"
int_ip="192.168.1.110"
vpn_srv="172.16.6.252"
off_ip="192.168.2.1"
#=====#
# NET #
#=====#
office1="192.168.1.0/24"
office2="192.168.2.0/28"
#============#
# add tables #
#============#
table <BRUTEFORCERS> persist
#=======#
# OTHER #
#=======#
allow_ports="{ 80, https, aol, ftp, ftp-data, 6667, auth, smtp, pop3, 53, 6112 }"
icmp_types="{ echoreq, unreach }"
set block-policy drop
#===================#
# normalize traffic #
#===================#
scrub in all max-mss 1496 fragment reassemble
scrub out all max-mss 1496 fragment reassemble random-id
#=======#
# SHAPE #
#=======#
altq on $vpn_if cbq bandwidth 245Kb queue \
{ qoffice1, qoffice2 }
queue qoffice1 bandwidth 70% priority 7 cbq ( borrow )
queue qoffice2 bandwidth 30% priority 2 cbq ( default borrow )
#=====#
# NAT #
#=====#
nat on $vpn_if from $office1 to any -> ($vpn_if)
nat on $vpn_if from $office2 to any port $allow_ports -> ($vpn_if)
#===============#
# Default block #
#===============#
block log all
block on $ext_if inet6 all
block in on $ext_if proto { tcp, udp } from 172.16.0.0/16 to any
block in on { $ext_if, $off_if } proto { tcp, udp } from any port { 137, 138, 139, 67 } to any
block in on { $ext_if, $off_if } proto { tcp, udp } from any to any port { 137, 138, 139, 67 }
block in log on $vpn_if inet proto icmp
#=======#
# OTHER #
#=======#
antispoof log quick for { lo0, $ext_if }
set skip on lo0
#=======#
# QUEUE #
#=======#
pass out on $vpn_if from $office1 to any queue qoffice1 modulate state
pass out on $vpn_if from $office2 to any queue qoffice2 modulate state
#==========#
# INTERNAL #
#==========#
pass in on $int_if from $office1 to $int_ip
pass out on { $int_if, $off_if } to any
pass in on $off_if from $office2 to $off_ip
#=======#
# SSH #
#=======#
pass in on $vpn_if proto tcp from any to any port 23 \
synproxy state ( max-src-conn-rate 1/60 overload <BRUTEFORCES> flush global )
#======#
# ICMP #
#======#
pass log inet proto icmp all icmp-type $icmp_types
#==========#
# EXTERNAL #
#==========#
pass quick from 10.0.1.22 to any
pass out on $vpn_if inet from any to any
#traceroute
pass out on { $ext_if, $vpn_if } inet proto udp from any to any \
port 33433 >< 33626 keep state
#Traffic
pass in on $off_if proto { tcp, udp } from $office2 to any port $allow_ports \
flags S/SA keep state
pass in on $int_if from $office1 to any
При таком конфиге на тестовом стенде происходят странные вещи
Из office2 человек получает инет с любой маской подсети.
Хотя по идее должен только с маской /28
Пыталась изменить предпоследнее правило на:
pass in on $off_if:network proto { tcp, udp } from $office2 to any port $allow_ports \
flags S/SA keep state
Инет у офис2 перестаёт работать.
Уважаемые гуру, выручайте. Полноценно протестировать не могу =(
Буду крайне благодарна по любым замечаниям по этому конфигу!
PS смотрю какие пакеты блокируются с помощью tcpdump -n -e -ttt -i pflog0
иногда встречаю конструкции вида block on xxx rule 0043(MATCH)
Это я так понимаю номер правила изза которого был блокирован пакет, а как с помощью pfctl посмотреть это самое правило, не подсчитывать же в конфиге в самом деле?
В man pfctl что-то я этого не нашла.

Re: PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-14 15:26:31
paradox
опция v verbose должна все показать и номера с собачкой в начале вида @номер_правила
Re: PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-14 16:10:27
sima
paradox писал(а):опция v verbose должна все показать и номера с собачкой в начале вида @номер_правила
pfctl -vf /etc/pf.conf
выводит просто правила и то как переменные раскладываются на правила
вот кусок вывода:
Код: Выделить всё
scrub out all random-id max-mss 1496 fragment reassemble
nat on ng0 inet from 192.168.1.0/24 to any -> (ng0) round-robin
nat on ng0 inet from 192.168.2.0/28 to any port = http -> (ng0) round-robin
nat on ng0 inet from 192.168.2.0/28 to any port = https -> (ng0) round-robin
nat on ng0 inet from 192.168.2.0/28 to any port = aol -> (ng0) round-robin
nat on ng0 inet from 192.168.2.0/28 to any port = ftp -> (ng0) round-robin
nat on ng0 inet from 192.168.2.0/28 to any port = ftp-data -> (ng0) round-robin
nat on ng0 inet from 192.168.2.0/28 to any port = 6667 -> (ng0) round-robin
Как видите, ни номера правила, ни темболее номера блокирующих правил нету.
Re: PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-14 16:34:25
paradox
Re: PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-15 2:34:28
sima
А по поводу сетей не подскажите? Почему у меня сети /20 подпадают под правила для сетей /28?
Re: PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-15 2:44:37
paradox
а ты покажи и докажи что они попадают
а то на слово верить я немогу)
Re: PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-15 2:56:30
sima
paradox писал(а):а ты покажи и докажи что они попадают
а то на слово верить я немогу)
Чуть выше я привела свой конфиг.
По задумке на интерфейсе 2.1 разрешена только сеть 192.168.2.0/28.
Ради эксперемента я поставила на виртуалке маску 255.255.240.0 вместо 255.255.255.240, виртуалка как имела достут в интернет, так и имеет.
Что для меня совершенно не обьяснимо.
Re: PF+ALTQ абстрактный вопрос
Добавлено: 2009-01-15 3:05:16
paradox
это не доказательства это абстрактные выводы
логи
tcpdump'пы
выводы комманд
и прочие
тогда можно думать