URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 4251
[ Назад ]

Исходное сообщение
"ipfw pipe и половина канала"

Отправлено zhukovia , 09-Май-09 12:23 
Пробую сделать систему ограничения и контроля трафика на ipfw с помощью pipe.
При этом хочется ограничивать только внешний канал, а работу из сети с сервером оставить без лимита. Для этого я написал следующую конфигурацию.
Создаю 3 pipe:
pipe 1 (для внутренней сети 1gbit),
pipe 2 (для для трафика от меня в интернет 180kbit),
pipe 3 (для для трафика ко мене из интернета 180kbit).
Затем делаю 6 очередей:
1 и 11 (для внутренней сети pipe 1),
2 (для для трафика от меня в интернет pipe 2 с Высоким преоритетом),
3 (для для трафика от меня в интернет pipe 2 с Низким преоритетом),
22 (для для трафика ко мене из интернета pipe 3 с Высоким преоритетом),
33 (для для трафика ко мене из интернета pipe 3 с Низким преоритетом).
Получается следующая картина:
1. Трафик для внутренней сети почему то тоже запихивается во 2 и 3 pipe и в результате все тормозит доже при отображении telnetа (это если что то еще качать по ftp из инета).
2. Скорость скачки с инета вместо положенных 180 kbit дает только половину (те скорость только 10 kb вместо 22 kb). Но если закоментировать 7 и 8 правило то скорость скачки становится как раз 20 kb, только внутренняя сеть все так же тормозит.
В чем может быть причина?
*************************************************************************
#!/bin/sh
ipfw -f flush
ipfw -f pipe flush
ipfw disable one_pass

peer="192.168.101.136"
localhost="192.168.101.254"
lanaddr="192.168.101.0/24"
inetaddr="84.150.110.16"

ipfw="ipfw -q"
lancard="rl0"
wancard="tun0"

upload="180kbps"
download="180kbps"
highprior="50"
lowprior="2"
highport="20,21,22,23,25,80,110,179,443,2222,3389,8080,8081"

${ipfw} pipe 1 config bw 1000Mbit/s queue 20
${ipfw} pipe 2 config bw ${upload} queue 20
${ipfw} pipe 3 config bw ${download} queue 20
${ipfw} queue 1 config pipe 1 weight 100 queue 20 mask dst-ip 0xffffffff
${ipfw} queue 11 config pipe 1 weight 100 queue 20 mask src-ip 0xffffffff

${ipfw} queue  2 config pipe 2 weight ${highprior} queue 20 mask dst-ip 0xffffffff
${ipfw} queue  3 config pipe 2 weight ${lowprior} queue 20 mask dst-ip 0xffffffff
${ipfw} queue 22 config pipe 3 weight ${highprior} queue 20 mask src-ip 0xffffffff
${ipfw} queue 33 config pipe 3 weight ${lowprior} queue 20 mask src-ip 0xffffffff

#---begin-lan network
${ipfw} add 1 queue  1 ip from ${localhost} to ${lanaddr} out via ${lancard}
${ipfw} add 2 queue 11 ip from ${lanaddr} to ${localhost} in via ${lancard}
#---end-lan network
#---begin-wan network
${ipfw} add 5 queue 22 ip from any to any ${highport} out xmit ${wancard}
${ipfw} add 6 queue 2 ip from any ${highport} to any out xmit ${lancard}
${ipfw} add 7 queue 33 ip from any to any out xmit ${wancard}
${ipfw} add 8 queue 3 ip from any to any out xmit ${lancard}
#---end-wan network
${ipfw} add  100 pass all from ${peer} to any in via ${lancard}
${ipfw} add  101 divert natd  all from ${peer} to any out via ${wancard}
${ipfw} add  102 divert  natd  all from any to any in via ${wancard}
${ipfw} add  103 pass all from me to any out via ${wancard}
${ipfw} add  104 pass all from any to ${peer} out via ${lancard}
${ipfw} add  105 pass all from any to ${peer} in via ${wancard}
${ipfw} add  65000 pass all from any to any
*************************************************************************


Содержание

Сообщения в этом обсуждении
"ipfw pipe и половина канала"
Отправлено Pahanivo , 13-Май-09 13:19 
советую взять просто пример из какованидь хауту, упростить и двигаться от простого к сложному, а не мудрить свое тупо подставля все подряд параметры

"ipfw pipe и половина канала"
Отправлено zhukovia , 15-Май-09 21:38 
>советую взять просто пример из какованидь хауту, упростить и двигаться от простого
>к сложному, а не мудрить свое тупо подставля все подряд параметры

Я так и пробовал. Но как видно не получается. Может что БОЛЕЕ дельное подскажите?


"ipfw pipe и половина канала"
Отправлено Pahanivo , 17-Май-09 09:17 
>>советую взять просто пример из какованидь хауту, упростить и двигаться от простого
>>к сложному, а не мудрить свое тупо подставля все подряд параметры
>
>Я так и пробовал. Но как видно не получается. Может что БОЛЕЕ
>дельное подскажите?

я не буду коментить конкретно ваш пост - ибо зае... надоело коментить посты про пайпы (а также разбираться в вашем фареволах, корые не блешут понятностью) - варианты разные, а ошибки все теже. Просто повторю еще раз простые рекомендации:

1) НАЧНИТЕ С ОЧЕНЬ ПРОСТОЙ СХЕМЫ - поймите как это работает.
2) при конфиге пайпом обращайте внимание на маски - их тип и заначение: папйт исходящего трафика быдет по соур маске и наоборот, значение маски влеят на параметры агрегации.
3) важный параметр net.inet.ip.fw.one_pass
4) КРАЙНЕ ЖЕЛАТЕЛЬНО формулировать правило заворота на пайп в фареволе как можно строже - пакет должен попасть только на предназначенныю ему трубу, он не должен попасть туда дважды и тд - получаемые в случае ошибок глюки сложно интерпретировать и отловить.

касаемо вашего - для начала вообще избавтель от очередей - оставте голые пайпы и манипулируйте с ними.


"ipfw pipe и половина канала"
Отправлено y , 09-Июн-09 14:17 
man pf.conf
там есть очень хорошо написаное - как сделать правильную приоритезацию с динамически изменяемой шириной канала - пайп не для таких сложностей

"ipfw pipe и половина канала"
Отправлено korn , 30-Июн-10 19:08 
>man pf.conf
>там есть очень хорошо написаное - как сделать правильную приоритезацию с динамически
>изменяемой шириной канала - пайп не для таких сложностей

Трололо юноша. IPFW и dummynet это как раз таки то что надо для такой задачи. Если задача объёмнее то ng_ipfw + ng_car. Учите матчасть.


"ipfw pipe и половина канала"
Отправлено korn , 30-Июн-10 14:26 
>[оверквотинг удален]
>${ipfw} add  102 divert  natd  all from any to
>any in via ${wancard}
>${ipfw} add  103 pass all from me to any out via
>${wancard}
>${ipfw} add  104 pass all from any to ${peer} out via
>${lancard}
>${ipfw} add  105 pass all from any to ${peer} in via
>${wancard}
>${ipfw} add  65000 pass all from any to any
>*************************************************************************

Видимо у вас переменная ядра net.inet.ip.fw.one_pass=0, собственно при таком подходе пакеты не уходят из цепочки после пропадания в queue, а лезут в следующий queue.
Решение: после каждого правила с queue ставить аналогичное правило с skipto.
То есть:

/****** всё что выше не меняется ******/

#---begin-lan network
${ipfw} add queue  1 ip from ${localhost} to ${lanaddr} out via ${lancard}
${ipfw} add skipto 1000 ip from ${localhost} to ${lanaddr} out via ${lancard}
${ipfw} add queue 11 ip from ${lanaddr} to ${localhost} in via ${lancard}
${ipfw} add skipto 1000 ip from ${lanaddr} to ${localhost} in via ${lancard}
#---end-lan network
#---begin-wan network
${ipfw} add queue 22 ip from any to any ${highport} out xmit ${wancard}
${ipfw} add skipto 1000 ip from any to any ${highport} out xmit ${wancard}
${ipfw} add queue 2 ip from any ${highport} to any out xmit ${lancard}
${ipfw} add skipto 1000 ip from any ${highport} to any out xmit ${lancard}
${ipfw} add queue 33 ip from any to any out xmit ${wancard}
${ipfw} add skipto 1000 ip from any to any out xmit ${wancard}
${ipfw} add queue 3 ip from any to any out xmit ${lancard}
${ipfw} add skipto 1000 ip from any to any out xmit ${lancard}
#---end-wan network
${ipfw} add 1000 100 pass all from ${peer} to any in via ${lancard}
${ipfw} add  101 divert natd  all from ${peer} to any out via ${wancard}
${ipfw} add  102 divert  natd  all from any to any in via ${wancard}
${ipfw} add  103 pass all from me to any out via ${wancard}
${ipfw} add  104 pass all from any to ${peer} out via ${lancard}
${ipfw} add  105 pass all from any to ${peer} in via ${wancard}
${ipfw} add  65000 pass all from any to any


"ipfw pipe и половина канала"
Отправлено korn , 30-Июн-10 14:31 
Вообще, в твоём случае ставь net.inet.ip.fw.one_pass=1 и не парься, обычно one_pass ставят 0 когда ng_nat используют, кстати очень хорошая штука.

"ipfw pipe и половина канала"
Отправлено korn , 30-Июн-10 14:33 
И ещё, я очепятался в правиле 1000, я написал
${ipfw} add 1000 100 pass all from ${peer} to any in via ${lancard}
А можно оставить как было у тебя, но skipto ставить не на 1000 а на 100
Сор, устал к вечеру и не заметил сразу

"ipfw pipe и половина канала"
Отправлено Pahanivo , 02-Июл-10 09:33 
>Сор, устал к вечеру и не заметил сразу

ты видать сильно устал если залез в уже год как закрытую тему и начал флеймить )


"ipfw pipe и половина канала"
Отправлено korn , 03-Июл-10 21:39 
>>Сор, устал к вечеру и не заметил сразу
>
>ты видать сильно устал если залез в уже год как закрытую тему
>и начал флеймить )

Я уже устал объяснять вам, молодые люди, смысл конференций подобно этой. Дак вот, смысл их не в том чтобы решать проблемы одного конкретного человека, и не в том чтобы находить невероятно сложные узконаправленные решения, а в том, что находить стандартные решения, стандартных проблем.
Я столкнулся с подобной проблемой и естественно пошел в гугл, который выдал мне этот топик, в котором не было решения, мне пришлось расковыриваться самому, что я и сделал, после чего запостил решение сюда, чтобы другие, идущие моим путем, нашли здесь эту информацию и не тратили время зря, а вот то, что вы делаете - это не флейм, а флуд. Сомневаетесь ? Попробуйте перечитать свой пост и оценить его отношение к проблеме обсуждаемой в топике.


"ipfw pipe и половина канала"
Отправлено Pahanivo , 05-Июл-10 07:40 
>[оверквотинг удален]
>вот, смысл их не в том чтобы решать проблемы одного конкретного
>человека, и не в том чтобы находить невероятно сложные узконаправленные решения,
>а в том, что находить стандартные решения, стандартных проблем.
>Я столкнулся с подобной проблемой и естественно пошел в гугл, который выдал
>мне этот топик, в котором не было решения, мне пришлось расковыриваться
>самому, что я и сделал, после чего запостил решение сюда, чтобы
>другие, идущие моим путем, нашли здесь эту информацию и не тратили
>время зря, а вот то, что вы делаете - это не
>флейм, а флуд. Сомневаетесь ? Попробуйте перечитать свой пост и оценить
>его отношение к проблеме обсуждаемой в топике.

))) кто с дамминетом хочет разобраться - тот разберется, благо все уже обсосано и разжовано за столько лет