The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"считалка трафика"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"считалка трафика"  
Сообщение от mordmord (ok) on 11-Янв-09, 14:58 

делаю bridge для одной только цели. простейшую считалку трафика с ограничением. например, прошло ч-з внешнюю сетевуху 1 GB за сутки отрубаем интырнет. ну или интерфейс кладем. кто, что может предложить.

зы просто считалки не предлагать, супер навороченные билинги не предлагать

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "считалка трафика"  
Сообщение от ronin (??) on 11-Янв-09, 15:43 
>
>делаю bridge для одной только цели. простейшую считалку трафика с ограничением. например,
>прошло ч-з внешнюю сетевуху 1 GB за сутки отрубаем интырнет. ну
>или интерфейс кладем. кто, что может предложить.
>
>зы просто считалки не предлагать, супер навороченные билинги не предлагать

Есть некоторый опыт в этом деле. Вопшем всё выглядит вот так:

brigde1# dmesg | head
Copyright (c) 1992-2006 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD 6.1-RELEASE #3: Tue Jun 10 13:52:55 EEST 2008
    root@brigde1:/usr/src/sys/i386/compile/BRIDGE
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: AMD-K6(tm) 3D processor (350.80-MHz 586-class CPU)
  Origin = "AuthenticAMD"  Id = 0x58c  Stepping = 12
  Features=0x8021bf<FPU,VME,DE,PSE,TSC,MSR,MCE,CX8,PGE,MMX>
  AMD Features=0x80000800<SYSCALL,3DNow>
brigde1#
brigde1# uname -a
FreeBSD brigde1 6.1-RELEASE FreeBSD 6.1-RELEASE #3: Tue Jun 10 13:52:55 EEST 2008     root@brigde1:/usr/src/sys/i386/compile/BRIDGE  i386
brigde1#
brigde1# ifconfig -a
rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet6 fe80::202:44ff:fe43:a333%rl0 prefixlen 64 scopeid 0x1
        inet 172.16.0.254 netmask 0xffff0000 broadcast 172.16.255.255
        ether 00:02:44:43:a3:33
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
rl1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet6 fe80::280:48ff:fe45:c9b4%rl1 prefixlen 64 scopeid 0x2
        inet 172.16.0.253 netmask 0xffff0000 broadcast 172.16.255.255
        ether 00:80:48:45:c9:b4
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
pflog0: flags=0<> mtu 33208
pfsync0: flags=0<> mtu 2020
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x6
        inet 127.0.0.1 netmask 0xff000000
bridge0: flags=8043<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        ether ac:de:48:8e:8e:21
        priority 32768 hellotime 2 fwddelay 15 maxage 20
        member: rl1 flags=3<LEARNING,DISCOVER>
        member: rl0 flags=3<LEARNING,DISCOVER>
brigde1#

brigde1# cat /usr/src/sys/i386/conf/BRIDGE | tail -40

### ADDED OPTIONS ###
option IPFIREWALL
option IPFIREWALL_VERBOSE
option IPFIREWALL_VERBOSE_LIMIT=100
option IPDIVERT
option DUMMYNET
option BRIDGE
device if_bridge

options IPFIREWALL_FORWARD
options IPFIREWALL_FORWARD_EXTENDED

options         IPFILTER
options         IPFILTER_LOG

options         HZ=1000
options         MAXCONS=1024
options         NETGRAPH
options         NETGRAPH_BPF
options         NETGRAPH_ETHER
options         NETGRAPH_IFACE
options         NETGRAPH_KSOCKET
options         NETGRAPH_SOCKET
options         NETGRAPH_TEE

device          pf
device          pflog
device          pfsync

options         ALTQ
options         ALTQ_CBQ
options         ALTQ_RED
options         ALTQ_RIO
options         ALTQ_HFSC
options         ALTQ_CDNR
options         ALTQ_PRIQ

brigde1#

brigde1# cat /etc/rc.conf
# Enable network daemons for user convenience.
# Please make all changes to this file, not to /etc/defaults/rc.conf.
# This file now contains just the overrides from /etc/defaults/rc.conf.

gateway_enable="YES"
keymap="us.iso"
sshd_enable="YES"
sendmail_enable="NONE"

defaultrouter="172.16.0.255"

hostname="brigde1"

firewall_enable="YES"
firewall_script="/opt/lanadmin/bridge.sh"

fsck_y_enable="YES"
background_fsck="NO"

smartd_enable="YES"
brigde1#

файл /opt/lanadmin/bridge.sh выглядит следующим образом (много неинтересных строк опущено):

#!/bin/sh


### SETUP_BRIDGE ###

/sbin/ifconfig bridge0 create
/sbin/ifconfig bridge0 addm rl0
/sbin/ifconfig bridge0 addm rl1
/sbin/ifconfig rl0 up
/sbin/ifconfig rl1 up
/sbin/ifconfig bridge0 up
/sbin/ifconfig rl0 inet 172.16.0.254 netmask 255.255.0.0
/sbin/ifconfig rl1 inet 172.16.0.253 netmask 255.255.0.0
/sbin/route add default 172.16.0.255


### SETUP_FIREWALL ###

/sbin/ipfw add 1 allow mac-type arp

/sbin/ipfw add 3000 deny tcp from 172.16.0.0/16 to any not established tcpflags fin,syn,rst,psh,urg,ack
/sbin/ipfw add 3010 deny tcp from 172.16.0.0/16 to any not established tcpflags !fin,!syn,!rst,!psh,!urg,!ack
/sbin/ipfw add 3020 deny tcp from 172.16.0.0/16 to any not established tcpflags fin


/sbin/ipfw add 10001 count ip from not 172.16.0.0/16 to 172.16.0.1 out
/sbin/ipfw add 10002 count ip from not 172.16.0.0/16 to 172.16.0.2 out
/sbin/ipfw add 10003 count ip from not 172.16.0.0/16 to 172.16.0.3 out
/sbin/ipfw add 10004 count ip from not 172.16.0.0/16 to 172.16.0.4 out
...
...
...


/sbin/ipfw add 20001 count ip from 172.16.0.1 to not 172.16.0.0/16 out
/sbin/ipfw add 20002 count ip from 172.16.0.2 to not 172.16.0.0/16 out
/sbin/ipfw add 20003 count ip from 172.16.0.3 to not 172.16.0.0/16 out
/sbin/ipfw add 20004 count ip from 172.16.0.4 to not 172.16.0.0/16 out
...
...
...


/sbin/ipfw add 40001 pipe 40001 ip from not 172.16.0.0/16 to 172.16.0.1 out
/sbin/ipfw add 50001 pipe 50001 ip from 172.16.0.1 to not 172.16.0.0/16 out
/sbin/ipfw pipe 40001 config bw 128kbit
/sbin/ipfw pipe 50001 config bw 128kbit

/sbin/ipfw add 40002 pipe 40002 ip from not 172.16.0.0/16 to 172.16.0.2 out
/sbin/ipfw add 50002 pipe 50002 ip from 172.16.0.2 to not 172.16.0.0/16 out
/sbin/ipfw pipe 40002 config bw 64kbit
/sbin/ipfw pipe 50002 config bw 64kbit

/sbin/ipfw add 40003 pipe 40003 ip from not 172.16.0.0/16 to 172.16.0.3 out
/sbin/ipfw add 50003 pipe 50003 ip from 172.16.0.3 to not 172.16.0.0/16 out
/sbin/ipfw pipe 40003 config bw 64kbit
/sbin/ipfw pipe 50003 config bw 64kbit

/sbin/ipfw add 40004 pipe 40004 ip from not 172.16.0.0/16 to 172.16.0.4 out
/sbin/ipfw add 50004 pipe 50004 ip from 172.16.0.4 to not 172.16.0.0/16 out
/sbin/ipfw pipe 40004 config bw 64kbit
/sbin/ipfw pipe 50004 config bw 64kbit

...
...
...

/sbin/ipfw add 65500 allow ip from 172.16.0.0/16 to any
/sbin/ipfw add 65510 allow ip from any to 172.16.0.0/16

exit $?

#EOF


Краткое описание:


простая машина, класса "тазик", без особых наворотов или возможностей,

сетвые интерфейсы - rl0, rl1 - rtl8139d

бридж-интерфейс как и следовало бы ожидать - bridge0 :-)  (создаётся скриптом /opt/lanadmin/bridge.sh при старте машины)

строки в конце файла конфигурации кернела обеспечивают поддержку всего необходимого для создания моста плюс некоторые навороты, которые, впрочем, не юзаю (пока что :-) )
самое важное там - вот это:

option IPFIREWALL
option IPFIREWALL_VERBOSE
option IPFIREWALL_VERBOSE_LIMIT=100
option IPDIVERT
option DUMMYNET
option BRIDGE
device if_bridge

options IPFIREWALL_FORWARD
options IPFIREWALL_FORWARD_EXTENDED

Внимание: эти опци меняются от версии к версии и могут не работать под бздёй 7.х  Под 5.х точно не будет - там название некоторых девайсов и опций чуть другое.

далее - начальная конфигурация сетевых интерфейсов через /etc/rc.conf (см. выше)
В принципе, айпишники на физических интерфейсах нафик не нужны, держу просто "на всякий случай".

Из /etc/rc.conf вызывается /opt/lanadmin/bridge.sh, который, собственно, и конфигурит всё.

Правила типа

/sbin/ipfw add 10001 count ip from not 172.16.0.0/16 to 172.16.0.1 out
/sbin/ipfw add 20001 count ip from 172.16.0.1 to not 172.16.0.0/16 out

являются счётчиками пакетов/байтов (первое для даунлоад, второе - для аплоад). Их значения поминутно заносятся в базу данных. Ограничения по трафику при привышении обьёма переданного не реализованы, но легко добавляются в эту схему (считывание данных за текущий день из БД и вставка определённого блокирующего правила в фаерволл или понижение скорости уже существующими правилами типа

/sbin/ipfw add 40001 pipe 40001 ip from not 172.16.0.0/16 to 172.16.0.1 out
/sbin/ipfw add 50001 pipe 50001 ip from 172.16.0.1 to not 172.16.0.0/16 out
/sbin/ipfw pipe 40001 config bw 128kbit
/sbin/ipfw pipe 50001 config bw 128kbit

(первые 2 строки создают пайпы для даунлоада и аплоада для конкретной клиентской машины, вторые 2 строки - конфигурят скорость по этим пайпам)

).

Есть ещё кронджобы

brigde1# crontab -l
0 * * * * /usr/sbin/ntpdate 172.16.0.1

*/5 0 * * * /opt/lanadmin/ip_shaper.sh day
*/5 9-23 * * * /opt/lanadmin/ip_shaper.sh day
*/5 1-8 * * * /opt/lanadmin/ip_shaper.sh night
brigde1#

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

/sbin/ipfw pipe 40001 config bw 2Mbit/s
/sbin/ipfw pipe 50001 config bw 64kbit


Вот в кратце и всё. Есть вопросы - обращайтесь.

respect,
ronin


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "считалка трафика"  
Сообщение от mordmord (ok) on 11-Янв-09, 17:05 

>Ограничения по трафику при привышении обьёма переданного не реализованы, но легко >добавляются в эту схему (считывание данных за текущий день из БД и вставка определённого >блокирующего правила в фаерволл

а вот это то как раз и есть, то ради чего весь огород...
что мне тож в крон ставить некую проверку? дабы ежеминутно проверял?
а как получить эти данные? неужели нет чего-нить "покрасивше"?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "считалка трафика"  
Сообщение от ronin (??) on 11-Янв-09, 18:28 
>
>>Ограничения по трафику при привышении обьёма переданного не реализованы, но легко >добавляются в эту схему (считывание данных за текущий день из БД и вставка определённого >блокирующего правила в фаерволл
>
>а вот это то как раз и есть, то ради чего весь
>огород...
>что мне тож в крон ставить некую проверку? дабы ежеминутно проверял?
>а как получить эти данные? неужели нет чего-нить "покрасивше"?

Ну, у меня изначально не стояла задача зарубить клиента при превышении лимита закачки. Нужно было только ограничить трафик по скорости и менять это в зависимости от времени суток. Но в этой схеме отруб клиента при привышении лимита закачек реализуется довольно легко. И не обязательно ежеминутно проверять это. Можно каждые 15 минут :-)

Если интересуют детали записи статистики трафика в базу и как на её основе сделать ограничение - напишу :-)
Здесь я подал только общую схему, а не старался дать исчерпывающий ответ. И боюсь что полностью моё решение всё равно не подойдёт, поскольку слишком "тяжеловесно" - статистика пишется в Постгрес на удалённой тачке (вместе со статистикой с других машин), но это легко переделывается - главное общая схема, а детали всегда допилим :-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "считалка трафика"  
Сообщение от fvl email on 11-Янв-09, 20:10 
>
>делаю bridge для одной только цели. простейшую считалку трафика с ограничением. например,
>прошло ч-з внешнюю сетевуху 1 GB за сутки отрубаем интырнет. ну
>или интерфейс кладем. кто, что может предложить.
>
>зы просто считалки не предлагать, супер навороченные билинги не предлагать

netams

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "считалка трафика"  
Сообщение от ronin (??) on 12-Янв-09, 01:57 
Не знаю как у Вас, но у меня с нетамс были проблемы даже на этапе омпиляции. Потому и перешёл на доморощенные скрипты.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру