Страница 1 из 1

FreeBSD 8.2+ipfw+pipe+static channel bw

Добавлено: 2011-07-14 1:32:47
harmless
Всем доброе время суток!
Задался таким вопросом:
-Как организовать в связке, указанной в теме, канал с ограниченной пропускной полосой?
Объясню подробнее:
есть канал в интернет 100мб
есть сеть 10.0.0.0/24 которая ходит в интернет через нат(ipfw nat)
есть разные тарифные планы(1мб, 2мб, 4мб и т.д.)
В данное время все работает на таких условиях(нат, блокировки и все прочее упущено)

Код: Выделить всё

############### USERS 1Mbit/s ###############
${FwCMD} pipe 15 config bw 1Mbit/s queue 20 mask dst-ip 0xffffffff gred 0.05/20/100/0.7
${FwCMD} pipe 16 config bw 1Mbit/s queue 20 mask src-ip 0xffffffff gred 0.05/20/100/0.7

${FwCMD} add 515 pipe 15 ip from not me to table\(100\),1024 out
${FwCMD} add 516 pipe 16 ip from table\(100\),1024 to not me in


${FwCMD} add 1008 allow tcp from table\(100\),1024 to not me in via ${LanIn} setup


############### USERS 2Mbit/s ###############
${FwCMD} pipe 17 config bw 2Mbit/s queue 20 mask dst-ip 0xffffffff gred 0.05/20/100/0.7
${FwCMD} pipe 18 config bw 2Mbit/s queue 20 mask src-ip 0xffffffff gred 0.05/20/100/0.7

${FwCMD} add 517 pipe 17 ip from not me to table\(100\),2048 out
${FwCMD} add 518 pipe 18 ip from table\(100\),2048 to not me in


${FwCMD} add 1009 allow tcp from table\(100\),2048 to not me in via ${LanIn} setup


############### USERS 4Mbit/s ###############
${FwCMD} pipe 19 config bw 4Mbit/s queue 20 mask dst-ip 0xffffffff gred 0.05/20/100/0.7
${FwCMD} pipe 20 config bw 4Mbit/s queue 20 mask src-ip 0xffffffff gred 0.05/20/100/0.7

${FwCMD} add 519 pipe 19 ip from not me to table\(100\),4096 out
${FwCMD} add 520 pipe 20 ip from table\(100\),4096 to not me in


${FwCMD} add 1010 allow tcp from table\(100\),4096 to not me in via ${LanIn} setup


С данной конфигурацией не устраивает то что клиенты получают двойную скорость, поясню на клиенте 10.0.0.145 bw 4Mb
при скачивании данный клиент получает скорость 4мб(все правильно все хорошо), но он может и раздавать на скорости в 4мб в это же время так как трубы то две!!!

Код: Выделить всё

${FwCMD} pipe 19 config bw 4Mbit/s queue 20 mask dst-ip 0xffffffff gred 0.05/20/100/0.7
${FwCMD} pipe 20 config bw 4Mbit/s queue 20 mask src-ip 0xffffffff gred 0.05/20/100/0.7
Вот я и озадачился таким вопросом:
-Как сделать так чтоб канал все же был 4мб суммарно(чтоб отдача вычиталась с приема)?
Есть идея создать трубу с определенной скоростью(4мб), а в ней создать две очереди на вход. и выходящий трафик равных приоритетов

Код: Выделить всё

ipfw pipe 4 config bw 4Mbit/s
ipfw queue 1 config pipe 4 weight 50 mask src-ip 0xffffffff
ipfw queue 2 config pipe 4 weight 50 mask dst-ip 0xffffffff
${FwCMD} add 650 queue 1 ip from not ${NetIn} to table\(100\) out
${FwCMD} add 651 queue 2 ip from table\(100\) to not ${IpIn} in
Но хочу посоветоваться с публикой, может кто-то уже данное решение осилил!
Жду интересных сообщений :smile:

Re: FreeBSD 8.2+ipfw+pipe+static channel bw

Добавлено: 2011-07-14 8:36:46
hizel
последний вариант: на всех ip из таблицы 100 будет выделено всего 4мбита

Re: FreeBSD 8.2+ipfw+pipe+static channel bw

Добавлено: 2011-07-14 8:53:31
rmn
harmless писал(а): -Как сделать так чтоб канал все же был 4мб суммарно(чтоб отдача вычиталась с приема)?
так сделать нельзя. Задержка пакетов в канале (и скорость, соответственно) определяется конфигурацией одного пайпа. Т.е. нельзя настроить так, чтобы скорость в пайпе N зависила от скорости в пайпе M.

На счет pipe и queue с mask xxx-ip 0xffffffff:

Код: Выделить всё

pipe N mask xxx-ip 0xffffffff
динамически создает каналы с указанной конфигурацией для каждого пользователя.

Код: Выделить всё

queue N mask xxx-ip 0xffffffff
распределяет один канал на всех.

Re: FreeBSD 8.2+ipfw+pipe+static channel bw

Добавлено: 2011-07-14 9:23:46
hizel
можно кстати так

Код: Выделить всё

############### USERS 4Mbit/s ###############
${FwCMD} pipe 20 config bw 4Mbit/s queue 20 mask src-ip 0xffffffff gred 0.05/20/100/0.7

${FwCMD} add 519 pipe 20 ip from table\(100\),4096 to not me out via $uplink // upload
${FwCMD} add 520 pipe 20 ip from table\(100\),4096 to not me in via $localnet //download

Re: FreeBSD 8.2+ipfw+pipe+static channel bw

Добавлено: 2011-07-14 9:31:04
rmn
hizel писал(а):можно кстати так

Код: Выделить всё

${FwCMD} pipe 20 config bw 4Mbit/s queue 20 mask src-ip 0xffffffff gred 0.05/20/100/0.7
не-не.
src-ip подходит только для пайпа исходящего трафика. Для входящего нужно dst-ip.
Иначе, если, к примеру, два пользователя качают с одного адреса, второй канал динамически не создастся (на обоих пользователей поделится 4м).

Re: FreeBSD 8.2+ipfw+pipe+static channel bw

Добавлено: 2011-07-14 9:41:47
hizel
два интерфеса, трафик для одного входящий для другого исходящий, см. внематочнее

Re: FreeBSD 8.2+ipfw+pipe+static channel bw

Добавлено: 2011-07-14 9:51:43
rmn
флаг xxx-ip указывает, на основании какого адреса в пакете (источника или приемника) будет приниматься решение о создании динамического канала.

Для src-ip:
на адрес источника накладывается маска 0xffffffff, затем проверяется, есть ли уже динамический канал для этого адреса. Если нет (новый пользователь) - создается новый.

Например, исходящие пакеты:

Код: Выделить всё

192.168.0.1 -> 12.34.56.78
192.168.0.1 -> 23.45.67.89
попадут в один канал, а для

Код: Выделить всё

192.168.0.2 -> 12.34.56.78
будет создан новый, т.к. 192.168.0.1 & 0xffffffff != 192.168.0.2 & 0xffffffff

Тогда как для входящих:

Код: Выделить всё

12.34.56.78 -> 192.168.0.1
12.34.56.78 -> 192.168.0.2
будет использован один канал (4м на двоих), т.к. 12.34.56.78 & 0xffffffff == 12.34.56.78 & 0xffffffff

Re: FreeBSD 8.2+ipfw+pipe+static channel bw

Добавлено: 2011-07-14 10:21:30
hizel
ага, я с утра запутался