Перейти до

ipfw


Рекомендованные сообщения

було на freebsd 7

 

${fwcmd} pipe `expr ${ID} + 101` config bw ${SPEED}"."Kbit/s");

${fwcmd} pipe `expr ${ID} + 102` config bw ${SPEED}"."Kbit/s");

 

${fwcmd} add `expr ${ID} '*' 10 + 10002` pipe `expr ${ID} + 101` ip from any to ${IP}

${fwcmd} add `expr ${ID} '*' 10 + 10003` pipe `expr ${ID} + 102` ip from ${IP} to any

 

Поставив 8ку, скопіював ті самі скрипти

 

спідтести показували рівно в 2 рази меншу швидкість.

 

Погуглив, додав in,out , все стабілізувалося :

 

${fwcmd} add `expr ${ID} '*' 10 + 10002` pipe `expr ${ID} + 101` ip from any to ${IP} out

${fwcmd} add `expr ${ID} '*' 10 + 10003` pipe `expr ${ID} + 102` ip from ${IP} to any in

 

 

Перестали працювати Онлайн ігри... не розумію чому

Ссылка на сообщение
Поделиться на других сайтах

ИИ))

 

шось з нумерацією незрозуміле, для кожного послідуючого юзера одна труба на вхід і вихід O_o

 

12183 pipe 320 ip from 10.10.0.2 to any in
12192 pipe 320 ip from any to 10.10.5.10 out
12193 pipe 321 ip from 10.10.5.10 to any in
12232 pipe 324 ip from any to 10.10.3.25 out
12233 pipe 325 ip from 10.10.3.25 to any in
12242 pipe 325 ip from any to 10.10.0.38 out

Ссылка на сообщение
Поделиться на других сайтах

ID в стг не унікальне в скрипті OnConnect?

 

 

~

 

# id - уникальный целочисленный идентификатор пользователя

# принимает значений от 0 до максимального кол-ва пользователей

 

в мене це значення повторюється, стг 2406 ((

Ссылка на сообщение
Поделиться на других сайтах

ИИ))

 

шось з нумерацією незрозуміле, для кожного послідуючого юзера одна труба на вхід і вихід O_o

 

12183 pipe 320 ip from 10.10.0.2 to any in
12192 pipe 320 ip from any to 10.10.5.10 out
12193 pipe 321 ip from 10.10.5.10 to any in
12232 pipe 324 ip from any to 10.10.3.25 out
12233 pipe 325 ip from 10.10.3.25 to any in
12242 pipe 325 ip from any to 10.10.0.38 out

 

 

ааааааааааааа, і таких правил для 500 юзерів онлайн рівно 1000 штук, я в шоці.

Ссылка на сообщение
Поделиться на других сайтах

не і а трохи подумавши можна розробити схемку.

 

наприклад, таблиця 10 містить адреси і номери пайпів з інету до юзерів

таблиця 11 містить адреси і номери пайпів від юзерів в інет

 

тоді всі ці правила можна замінити лише двома

 

ipfw add 1000 pipe tablearg ip from any to "table(10)"

ipfw add 1100 pipe tablearg ip from "table(11)" to any

 

якщо one_pass = 0, тоді треба додати ще два правила

 

ipfw add 1200 allow ip from any to "table(10)"

ipfw add 1300 allow ip from "table(11)" to any

 

тепер від старгезера все що потрібно це тільки конфігурувати пайпи і додавати/забирати адреси з номером пайпа в таблиці 10 і 11

Ссылка на сообщение
Поделиться на других сайтах

Хе)

До таблиць в ipfw я не "довчився" ще)

 

Щоб не переривати весь гугл і форуми, не могли б ви кинути робочий конфіг ? :rolleyes:

Ссылка на сообщение
Поделиться на других сайтах
в мене це значення повторюється, стг 2406 ((

унрил

 

pipe 10256 ip from table(22) to any in recv em1

pipe 10512 ip from table(23) to any in recv em1

pipe 11024 ip from table(24) to any in recv em1

pipe 12048 ip from table(25) to any in recv em1

pipe 14096 ip from table(26) to any in recv em1

pipe 20256 ip from any to table(22) out xmit em1

pipe 20512 ip from any to table(23) out xmit em1

pipe 21024 ip from any to table(24) out xmit em1

pipe 22048 ip from any to table(25) out xmit em1

pipe 24096 ip from any to table(26) out xmit em1

 

 

Пам парам пам пам. При онконнект робимо add table $SOMESPEED_TABLE $IP тай всьо. При дісконнект вєстімо del.

Ссылка на сообщение
Поделиться на других сайтах

Тобто завести таблиці зі швидкостями і видаляти/додавати користувачів?

 

в фаєрволі при завантаженні,створюєм таблиці, нарізаєм для них швидкості , от наприклад таблиця з 1 мбіт:

ipfw add pipe 1000 ip from any to table(22) out xmit IFACE
ipfw add pipe 1001 ip from table(22) to any in recv IFACE2

ipfw pipe 1000 config mask dst-ip 0xffffffff bw 1024kbit/s
ipfw pipe 1001 config mask src-ip 0xffffffff bw 1024kbit/s

 

 

стг просто додає видаляє іпи:

#додаєм
ipfw add table 22 $IP

#Видаляєм
ipfw del table 22 $IP

 

 

Правильно?

 

І чи буде в таблиці 22 нарізатися швидкість для кожного іп в 1 мбіт, чи це швидкість на всю таблицю?

 

Дякую :rolleyes:

Ссылка на сообщение
Поделиться на других сайтах

правильно, але трошки не так

 

в фаєрволі стврюєм правила

ipfw add 1000 pipe tablearg ip from any to "table(22)" via $localiface out
ipfw add 1001 pipe tablearg ip from "table(23)" to any via $localiface in

 

 

 

в скрипті onConnect чи як там він називаеться в старгезері робим так

 

ipfw table 22 add $ip $num_pipe_in
ipfw table 23 add $ip $num_pipe_out

ipfw pipe $num_pipe_in config bw ${speed_in)Kbit/s
ipfw pipe $num_pipe_out config bw ${speed_out)Kbit/s

 

тобто, все що треба передати в скрипт це адрес клієнта, номери пайпа на вхід і вихід, швидкість або номер пакету і в залежності відномеру вказати макрос із швидкістю, якщо швидкості симетричні то вистачить одного номера пайпа.

номери пайпів можна генерувати на основі id або ip клієнта

Ссылка на сообщение
Поделиться на других сайтах
І чи буде в таблиці 22 нарізатися швидкість для кожного іп в 1 мбіт, чи це швидкість на всю таблицю?

 

dst-ip 0xffffffff же - кожному.

Ссылка на сообщение
Поделиться на других сайтах

Просю перевірить:

 

Протестив з 2 компів, швидкість нарізається, в таблички додається/видаляється.

 

Є 1 проблема. Якщо я зиіню тариф користувачу, який в онлайні то ІП залишиться в старій табличці на страрій швидкості ( . Тобто ІП клієнта буде в 2 таблицях одночасно. Думаю це виправить видаленням ІП в скрипті OnChange. Правильно?

 

 

І ще в догонку. Як зробити редірект, користувачу в якого негативний баланс, з будь-якого сайту на сторінку з повідомленням типу host:8080. Можна з ipnat, але як це зробити динамічно, так як потрібно додати правило потім перезавантажити...

 

 

Фух, дякую

 

Скрипти:

 

rc.firewall

 

#!/bin/sh                    

fwcmd="/sbin/ipfw -q add"
fw="/sbin/ipfw -q"       
flush=`${fw} -f flush`   
flush_table=`${fw}  table all flush`
flush_pipe=`${fw} pipe flush`       
local_if="em0"                      
global_if="em1"                     

${flush}
${flush_table}
${flush_pipe}

${fwcmd} pipe 1000 ip from any to table\(1\) out xmit ${local_if}
${fwcmd} pipe 1001 ip from table\(1\) to any in recv ${local_if}
${fw} pipe 1000 config mask dst-ip 0xffffffff bw 128kbit/s
${fw} pipe 1001 config mask src-ip 0xffffffff bw 128kbit/s

${fwcmd} pipe 1002 ip from any to table\(2\) out xmit ${local_if}
${fwcmd} pipe 1003 ip from table\(2\) to any in recv ${local_if}
${fw} pipe 1002 config mask dst-ip 0xffffffff bw 256kbit/s
${fw} pipe 1003 config mask src-ip 0xffffffff bw 256kbit/s

${fwcmd} pipe 1004 ip from any to table\(3\) out xmit ${local_if}
${fwcmd} pipe 1005 ip from table\(3\) to any in recv ${local_if}
${fw} pipe 1004 config mask dst-ip 0xffffffff bw 512kbit/s
${fw} pipe 1005 config mask src-ip 0xffffffff bw 512kbit/s

${fwcmd} pipe 1006 ip from any to table\(4\) out xmit ${local_if}
${fwcmd} pipe 1007 ip from table\(4\) to any in recv ${local_if}
${fw} pipe 1006 config mask dst-ip 0xffffffff bw 1024kbit/s
${fw} pipe 1007 config mask src-ip 0xffffffff bw 1024kbit/s

${fwcmd} pipe 1008 ip from any to table\(5\) out xmit ${local_if}
${fwcmd} pipe 1009 ip from table\(5\) to any in recv ${local_if}
${fw} pipe 1008 config mask dst-ip 0xffffffff bw 1536kbit/s
${fw} pipe 1009 config mask src-ip 0xffffffff bw 1536kbit/s

${fwcmd} pipe 1010 ip from any to table\(6\) out xmit ${local_if}
${fwcmd} pipe 1011 ip from table\(6\) to any in recv ${local_if}
${fw} pipe 1010 config mask dst-ip 0xffffffff bw 2048kbit/s
${fw} pipe 1011 config mask src-ip 0xffffffff bw 2048kbit/s

${fwcmd} pipe 1012 ip from any to table\(7\) out xmit ${local_if}
${fwcmd} pipe 1013 ip from table\(7\) to any in recv ${local_if}
${fw} pipe 1012 config mask dst-ip 0xffffffff bw 3072kbit/s
${fw} pipe 1013 config mask src-ip 0xffffffff bw 3072kbit/s

${fwcmd} pipe 1014 ip from any to table\(8\) out xmit ${local_if}
${fwcmd} pipe 1015 ip from table\(8\) to any in recv ${local_if}
${fw} pipe 1014 config mask dst-ip 0xffffffff bw 4096kbit/s
${fw} pipe 1015 config mask src-ip 0xffffffff bw 4096kbit/s

${fwcmd} pipe 1016 ip from any to table\(9\) out xmit ${local_if}
${fwcmd} pipe 1017 ip from table\(9\) to any in recv ${local_if}
${fw} pipe 1016 config mask dst-ip 0xffffffff bw 5120kbit/s
${fw} pipe 1017 config mask src-ip 0xffffffff bw 5120kbit/s

${fwcmd} pipe 1018 ip from any to table\(10\) out xmit ${local_if}
${fwcmd} pipe 1019 ip from table\(10\) to any in recv ${local_if}
${fw} pipe 1018 config mask dst-ip 0xffffffff bw 10240kbit/s
${fw} pipe 1019 config mask src-ip 0xffffffff bw 10240kbit/s

${fwcmd} pipe 1020 ip from any to table\(11\) out xmit ${local_if}
${fwcmd} pipe 1021 ip from table\(11\) to any in recv ${local_if}
${fw} pipe 1020 config mask dst-ip 0xffffffff bw 20480kbit/s
${fw} pipe 1021 config mask src-ip 0xffffffff bw 20480kbit/s

${fwcmd} pipe 1000 ip from any to table\(12\) out xmit ${local_if}
${fwcmd} pipe 1001 ip from table\(12\) to any in recv ${local_if}
${fw} pipe 1000 config mask dst-ip 0xffffffff bw 102400kbit/s
${fw} pipe 1001 config mask src-ip 0xffffffff bw 102400kbit/s

 

 

OnConnect

 

billing-host# cat stargazer/OnConnect 
#!/bin/sh                             
LOGIN=$1                              
IP=$2                                 
CASH=$3                               
ID=$4                                 
fwcmd="/sbin/ipfw"
SPEED=`/etc/stargazer/speed $LOGIN`

if [ ${SPEED} = 128 ]
then                 
${fwcmd} table 1 add ${IP} 
else                       
fi                         
if [ ${SPEED} = 256 ]      
then
${fwcmd} table 2 add ${IP}
else
fi
if [ ${SPEED} = 512 ]
then
${fwcmd} table 3 add ${IP}
else
fi
if [ ${SPEED} = 1024 ]
then
${fwcmd} table 4 add ${IP}
else
fi
if [ ${SPEED} = 1536  ]
then
${fwcmd} table 5 add ${IP}
else
fi
if [ ${SPEED} = 2048 ]
then
${fwcmd} table 6 add ${IP}
else
fi
if [ ${SPEED} = 3072 ]
then
${fwcmd} table 7 add ${IP}
else
fi
if [ ${SPEED} = 4096 ]
then
${fwcmd} table 8 add ${IP}
else
fi
if [ ${SPEED} = 5120 ]
then
${fwcmd} table 9 add ${IP}
else
fi
if [ ${SPEED} = 10240 ]
then
${fwcmd} table 10 add ${IP}
else
fi
if [ ${SPEED} = 20480 ]
then
${fwcmd} table 11 add ${IP}
else
fi
if [ ${SPEED} = 102400 ]
then
${fwcmd} table 12 add ${IP}
else echo NO SPEED
fi

 

 

OnDisconnect

 

#!/bin/sh                                                                                                                 
LOGIN=$1                                                                                                                  
IP=$2
CASH=$3
ID=$4
fwcmd="/sbin/ipfw -q"
SPEED=`/etc/stargazer/speed $LOGIN`

if [ ${SPEED} = 128 ]
then
${fwcmd} table 1 delete ${IP}
else
fi
if [ ${SPEED} = 256 ]
then
${fwcmd} table 2 delete ${IP}
else
fi
if [ ${SPEED} = 512 ]
then
${fwcmd} table 3 delete ${IP}
else
fi
if [ ${SPEED} = 1024 ]
then
${fwcmd} table 4 delete ${IP}
else
fi
if [ ${SPEED} = 1536  ]
then
${fwcmd} table 5 delete ${IP}
else
fi
if [ ${SPEED} = 2048 ]
then
${fwcmd} table 6 delete ${IP}
else
fi
if [ ${SPEED} = 3072 ]
then
${fwcmd} table 7 delete ${IP}
else
fi
if [ ${SPEED} = 4096 ]
then
${fwcmd} table 8 delete ${IP}
else
fi
if [ ${SPEED} = 5120 ]
then
${fwcmd} table 9 delete ${IP}
else
fi
if [ ${SPEED} = 10240 ]
then
${fwcmd} table 10 delete ${IP}
else
fi
if [ ${SPEED} = 20480 ]
then
${fwcmd} table 11 delete ${IP}
else
fi
if [ ${SPEED} = 102400 ]
then
${fwcmd} table 12 delete ${IP}
else
fi

Ссылка на сообщение
Поделиться на других сайтах
Є 1 проблема. Якщо я зиіню тариф користувачу, який в онлайні то ІП залишиться в старій табличці на страрій швидкості ( . Тобто ІП клієнта буде в 2 таблицях одночасно. Думаю це виправить видаленням ІП в скрипті onchange. Правильно?

є такий ефект, але на справді враховуючи той факт шо в ончейндж потрібно виловлювати ІР по логіну простіше просто при заміні тарифного плану робити автоматом юзеру disabled/change_tariff/enabled. Власне так і роблю.

 

 

І ще в догонку. Як зробити редірект, користувачу в якого негативний баланс, з будь-якого сайту на сторінку з повідомленням типу host:8080.

засунути в табличку неактивних юзерів і зробити fwd куди треба.

Ссылка на сообщение
Поделиться на других сайтах

fwd HOST_WITH_MESSAGE,80 tcp from CLIENT_IP to any

 

 

Якби пакети через фаєрвол проходять, але все одно відкривається сторінка, а не перенаправляється

Ссылка на сообщение
Поделиться на других сайтах

Я делал виртуалхост на 81-ом порту в Апаче и форвардил в Онконнекте клиента на него.

 

 

як форвардив?

Ссылка на сообщение
Поделиться на других сайтах

HOST_WITH_MESSAGE - той же хост, на 8080 порту висить сторінка з повідомленням, що нема грошей

CLIENT_IP - ip клієнта

 

ipfw add 50 fwd HOST_WITH_MESSAGE,8080 ip from CLIENT_IP to not HOST_WITH_MESSAGE dst-port 8080

 

 

 

Не перекидає на потрібну сторінку :huh:

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...