Пробую сделать систему ограничения и контроля трафика на 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_passpeer="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
*************************************************************************
советую взять просто пример из какованидь хауту, упростить и двигаться от простого к сложному, а не мудрить свое тупо подставля все подряд параметры
>советую взять просто пример из какованидь хауту, упростить и двигаться от простого
>к сложному, а не мудрить свое тупо подставля все подряд параметрыЯ так и пробовал. Но как видно не получается. Может что БОЛЕЕ дельное подскажите?
>>советую взять просто пример из какованидь хауту, упростить и двигаться от простого
>>к сложному, а не мудрить свое тупо подставля все подряд параметры
>
>Я так и пробовал. Но как видно не получается. Может что БОЛЕЕ
>дельное подскажите?я не буду коментить конкретно ваш пост - ибо зае... надоело коментить посты про пайпы (а также разбираться в вашем фареволах, корые не блешут понятностью) - варианты разные, а ошибки все теже. Просто повторю еще раз простые рекомендации:
1) НАЧНИТЕ С ОЧЕНЬ ПРОСТОЙ СХЕМЫ - поймите как это работает.
2) при конфиге пайпом обращайте внимание на маски - их тип и заначение: папйт исходящего трафика быдет по соур маске и наоборот, значение маски влеят на параметры агрегации.
3) важный параметр net.inet.ip.fw.one_pass
4) КРАЙНЕ ЖЕЛАТЕЛЬНО формулировать правило заворота на пайп в фареволе как можно строже - пакет должен попасть только на предназначенныю ему трубу, он не должен попасть туда дважды и тд - получаемые в случае ошибок глюки сложно интерпретировать и отловить.касаемо вашего - для начала вообще избавтель от очередей - оставте голые пайпы и манипулируйте с ними.
man pf.conf
там есть очень хорошо написаное - как сделать правильную приоритезацию с динамически изменяемой шириной канала - пайп не для таких сложностей
>man pf.conf
>там есть очень хорошо написаное - как сделать правильную приоритезацию с динамически
>изменяемой шириной канала - пайп не для таких сложностейТрололо юноша. IPFW и dummynet это как раз таки то что надо для такой задачи. Если задача объёмнее то ng_ipfw + ng_car. Учите матчасть.
>[оверквотинг удален]
>${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
Вообще, в твоём случае ставь net.inet.ip.fw.one_pass=1 и не парься, обычно one_pass ставят 0 когда ng_nat используют, кстати очень хорошая штука.
И ещё, я очепятался в правиле 1000, я написал
${ipfw} add 1000 100 pass all from ${peer} to any in via ${lancard}
А можно оставить как было у тебя, но skipto ставить не на 1000 а на 100
Сор, устал к вечеру и не заметил сразу
>Сор, устал к вечеру и не заметил сразуты видать сильно устал если залез в уже год как закрытую тему и начал флеймить )
>>Сор, устал к вечеру и не заметил сразу
>
>ты видать сильно устал если залез в уже год как закрытую тему
>и начал флеймить )Я уже устал объяснять вам, молодые люди, смысл конференций подобно этой. Дак вот, смысл их не в том чтобы решать проблемы одного конкретного человека, и не в том чтобы находить невероятно сложные узконаправленные решения, а в том, что находить стандартные решения, стандартных проблем.
Я столкнулся с подобной проблемой и естественно пошел в гугл, который выдал мне этот топик, в котором не было решения, мне пришлось расковыриваться самому, что я и сделал, после чего запостил решение сюда, чтобы другие, идущие моим путем, нашли здесь эту информацию и не тратили время зря, а вот то, что вы делаете - это не флейм, а флуд. Сомневаетесь ? Попробуйте перечитать свой пост и оценить его отношение к проблеме обсуждаемой в топике.
>[оверквотинг удален]
>вот, смысл их не в том чтобы решать проблемы одного конкретного
>человека, и не в том чтобы находить невероятно сложные узконаправленные решения,
>а в том, что находить стандартные решения, стандартных проблем.
>Я столкнулся с подобной проблемой и естественно пошел в гугл, который выдал
>мне этот топик, в котором не было решения, мне пришлось расковыриваться
>самому, что я и сделал, после чего запостил решение сюда, чтобы
>другие, идущие моим путем, нашли здесь эту информацию и не тратили
>время зря, а вот то, что вы делаете - это не
>флейм, а флуд. Сомневаетесь ? Попробуйте перечитать свой пост и оценить
>его отношение к проблеме обсуждаемой в топике.))) кто с дамминетом хочет разобраться - тот разберется, благо все уже обсосано и разжовано за столько лет