The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"считалка трафика"
Отправлено ronin, 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


 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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