Перейти до

Возможность реализации


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

Уважаемые разработчики, у меня такая ситуация:

Локальная сеть на 6 человек, думаю будет расширена до 12 :-)

Это не много, но, что есть то есть . :-)

Юзерам динамически выдается траффик украинский до 8 Мбит , мировой трафик до 128 кбит. Анлимитед.

Хотел бы реализовать такую систему:

Анлим, но по достижению некоторого значения выкачанного (закачанного) трафика скорость снижается, например:

до 1 ГБ - 8 Мбит

1-2 ГБ - 2 Мбит

3-4 - 1 Мбит

4-10 512 Кбит

10+ 256 Кбит

 

Для этого всего есть машинка:

Пень-233 256 ОЗУ, винт 8 ГБ.

Могу конечно проапдейтить её эдак до 400-533 Mhz, но это не желательно.

Возможно ли реализовать то, что я хочу на том, что есть? :-)

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

Легко...

Если чуть в никсах волокешь вот те заготовка, накидал за 5 мин, могут быть недочеты

!#/bin/sh

# Правила фаера для фсех
#${fwcmd} pipe 101 config bw 128Kbit/s
#${fwcmd} pipe 102 config bw 256Kbit/s
#${fwcmd} pipe 103 config bw 512Kbit/s
#${fwcmd} pipe 105 config bw 1Mbit/s
#${fwcmd} pipe 106 config bw 2Mbit/s
#${fwcmd} pipe 107 config bw 5Mbit/s


# Правила в фаере для каждого:
#${fwcmd} add 10001 pipe ip from $IP to any via xl0
#${fwcmd} add 10002 pipe ip from any to $IP via xl0
#${fwcmd} add 10005 allow ip from $IP to any
#${fwcmd} add 10006 allow ip from any to $IP

#
#
#


# ИП кого желаем проверить на колличество скаченного
IP=$1

# Входячие байты номер правила
RIN=$2

# Исходячие байты номер правила
ROUT=$3

# Почта админа с мылом мол такомуто снижена скорость
EMAIL=сусадмин@хостема.ком

size_in=`ipfw show $RIN | awk '{ print $3 }'`
size_out=`ipfw show $ROUT | awk '{ print $3 }'`


# 10 MB  = 10737418 байт
# 50 MB  = 54975581 байт
# 100 MB = 109951162 байт
# 1 GB   = 1073741824 байт
# 2 GB   = 2147483648 байт
# 5 GB   = 5368709120 байт
# 8 GB   = 8589934592 байт




if [ $size_in -gt 8589934592 ]; then
size_in_M = `expr $size_in / 1024 / 1024`
echo "IP: $IP смолотил 8 GB, пользователю снижена скорость до  1 Mbit/s. \
Скачано $size_in_M мегабайт всякого хлама. \
..." | mail $EMAIL
 ipfw delete $RIN $ROUT
 ipfw add 10001 pipe 105 ip from $IP to any via xl0
 ipfw add 10002 pipe 105 ip from any to $IP via xl0


elif [ $size_in -gt 5368709120 ]; then
size_in_M = `expr $size_in / 1024 / 1024`
echo "IP: $IP смолотил 5 GB, пользователю снижена скорость до  2 Mbit/s. \
Скачано $size_in_M мегабайт всякого хлама. \
..." | mail $EMAIL
 ipfw delete $RIN $ROUT
 ipfw add 10001 pipe 106 ip from $IP to any via xl0
 ipfw add 10002 pipe 106 ip from any to $IP via xl0

elif [ $size_in -gt 5368709120 ]; then
echo "И так далее..."
fi

 

 

Тесто замесил, теперь лепите, кому что по душе... Кодик можа сбацать покороче и динамичнее, но... нэмае часу :)

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

Советую сделать произвести некоторые изменения..

Добавь нижеуказанное в /etc/sysctl.conf

 

# TCP/UDP TUNING
net.inet.tcp.blackhole=2
net.inet.tcp.rfc1644=1
net.inet.tcp.msl=7500
net.inet.udp.blackhole=1
net.inet.icmp.icmplim=50
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=1
net.inet.icmp.maskrepl=0
net.inet.ip.redirect=0
net.inet.ip.forwarding=1
net.inet.ip.accept_sourceroute=0
net.inet.ip.sourceroute=0
net.inet.ip.fw.dyn_fin_lifetime=20
net.inet.ip.fw.dyn_rst_lifetime=20
net.inet.ip.ttl=127
net.link.ether.inet.max_age=1200

# IPFW CONF
net.inet.ip.fw.one_pass=0
net.inet.ip.dummynet.expire=0

# KERNEL CONF
kern.polling.enable=1
kern.polling.user_frac=50
kern.ipc.somaxconn=32768
kern.corefile=/tmp/%U.%N.%P.core

# OTHERS
net.local.stream.recvspace=65535
net.local.stream.sendspace=65535
net.inet.tcp.sendspace=65535
net.inet.tcp.recvspace=65535

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

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

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

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

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

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

Вхід

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

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

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

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