Re: ng_ipacct
- From
- Eugene Grosbein (2:5006/1)
- To
- Dmitry Dolzenko (2:5054/37.63)
- Date
- 2006-09-03T18:07:42Z
- Area
- RU.UNIX.BSD
Reply-To: eugen@grosbein.pp.ru
30 авг 2006, среда, в 13:09 KRAST, Dmitry Dolzenko написал(а):
AS>> А не проще ли передавать пакет с в nethraph помощью ipfw ngtee ? Или на
AS>> этой
AS>> машине не установлена шестёрка ?
>> 4.11-STABLE. Но за напоминание о ng_ipfw спасибо.
DD> А ты мог бы по завершинии своих исследований написать HOWTO
DD> как сделать ip accounting через netgraph?
Вот рецепт, который работает на 4.11 и выше, конструкция получается
практически один в один с ipacctd, можно использовать те же правила
ipfw divert для заворачивания трафика на считающую софтинку.
Единственное отличие - для съема разультатов обсчета использовать
скрипт такого типа:
ipacctctl ipfw_ip_acct:ipfw checkpoint
ipacctctl ipfw_ip_acct:ipfw show
ipacctctl ipfw_ip_acct:ipfw clear
Ставим ng_ipacct из портов и в /usr/local/etc/ng_ipaccf.conf
пишем:
ng_ipacct_modules_list="netgraph ng_echo ng_ksocket ng_tee ng_ipacct"
ng_ipacct_interfaces="ipfw"
# EXAMPLE 5. Really _divert_ traffic to ng_ksocket
# ipfw add divert 4001 ip from any to any via em0 in
# ipfw add divert 4002 ip from any to any via em0 out
# USER-LEVEL | KERNEL-LEVEL
# |
# div4 *.4001 ->|-> ipfw_ks_in in-(ipfw_echo_in)
# | | |
# | (inet/raw/divert)---(left)-(ipfw_tee_in)-right
# | |
# | left2right---(ipfw_in)
# | |
# | ipfw_ip_acct
# | |
# | left2right---(ipfw_out)
# | |
# | (inet/raw/divert)---(left)-(ipfw_tee_out)-right
# | | |
# div4 *.4002 ->|-> ipfw_ks_out
# div4 *.4002 ->out-(ipfw_echo_out)
#
# ipfw_ks_in - ng_ksocket
# ipfw_ks_out - ng_ksocket
# ipfw_tee_in - ng_tee
# ipfw_tee_out - ng_tee
# ipfw_ip_acct - ng_ipacct
# ipfw_echo_in - ng_echo
# ipfw_echo_out - ng_echo
ng_ipacct_ipfw_dlt="RAW"
ng_ipacct_ipfw_start='
mkpeer ipacct dummy dummy
name .:dummy %%iface%%_ip_acct
mkpeer %%iface%%_ip_acct: tee %%iface%%_in left2right
name %%iface%%_ip_acct:%%iface%%_in %%iface%%_tee_in
mkpeer %%iface%%_ip_acct: tee %%iface%%_out left2right
name %%iface%%_ip_acct:%%iface%%_out %%iface%%_tee_out
mkpeer %%iface%%_tee_in: echo right in
name %%iface%%_tee_in:right %%iface%%_echo_in
mkpeer %%iface%%_tee_out: echo right out
name %%iface%%_tee_out:right %%iface%%_echo_out
mkpeer %%iface%%_tee_in: ksocket left inet/raw/divert
name %%iface%%_tee_in:left %%iface%%_ks_in
msg %%iface%%_ks_in: bind inet/0.0.0.0:4001
mkpeer %%iface%%_tee_out: ksocket left inet/raw/divert
name %%iface%%_tee_out:left %%iface%%_ks_out
msg %%iface%%_ks_out: bind inet/0.0.0.0:4002
rmhook .:dummy
'
ng_ipacct_ipfw_stop='
shutdown %%iface%%_ks_in:
shutdown %%iface%%_ks_out:
shutdown %%iface%%_tee_in:
shutdown %%iface%%_tee_out:
'
ng_ipacct_ipfw_threshold="15000" # '5000' by default
ng_ipacct_ipfw_verbose="no" # 'yes' by default
ng_ipacct_ipfw_saveuid="no" # 'no' by default
ng_ipacct_ipfw_savetime="no" # 'no' by default
ng_ipacct_ipfw_checkpoint_script="/usr/local/adm/showngipacct ipfw"
Скрипт /usr/local/adm/showngipacct должен, используя указанные
выше три команды ipacctctl, куда-нибудь сохранять вывод команды
show. Его же (или команду /usr/local/etc/rc.d/ng_ipacct.sh checkpoint)
нужно вызывать периодически для сброса накопленных данных и предотвращения
переполнения памяти в ng_ipacct.
Командами ipfw divert 4001 организуется обсчет входящего трафика,
ipfw divert 4002 для исходящего. Если нужно считать только одно направление,
можно ненужный трафик и не дивертить.
Это как раз то, что мне надо было. Всем спасибо за советы.
Eugene
--
А ученый уподобляется обученному слону, которого погонщик поставил перед
преградой. Он пользуется силой разума, как слон --- силой мышц, подчиняясь
приказу. Это необычайно удобно: ученый отныне готов на все, так как ни за
что уже не отвечает.
--- slrn/0.9.8.0 (FreeBSD)
* Origin: Svyaz Service JSC (2:5006/1@fidonet)
SEEN-BY: 50/12 203 400/814 450/159 186 1024 451/30 461/43 132 640 469/999
SEEN-BY: 550/196 4616/3 4625/8 4635/4 4641/444 5000/76 5000 5006/1 8 9 10 14
SEEN-BY: 5006/15 16 17 5007/1 5010/70 352 5011/13 5012/46 5015/28 5019/31
SEEN-BY: 5020/18 154 175 194 400 545 549 715 758 982 1057 1523 1604 1630 1909
SEEN-BY: 5020/1922 2142 2238 2395 2450 2590 2871 4441 5021/3 29 5022/128
SEEN-BY: 5025/3 750 5026/45 5027/12 5029/32 5030/49 500 556 966 1063 1080 1900
SEEN-BY: 5030/1957 2828 5031/47 70 5034/10 13 5035/3 38 5036/1 5040/47 5042/13
SEEN-BY: 5045/7 5049/1 50 97 5051/15 5054/1 4 8 9 11 28 35 36 37 45 63 66 67
SEEN-BY: 5054/70 75 84 85 5055/95 5057/1 5059/9 5060/88 5061/15 5062/1 10
SEEN-BY: 5063/3 5064/7 5066/18 5074/9 5075/5 5077/70 5080/80 1003 5082/6
SEEN-BY: 5083/21 5085/13 5090/108 5094/4 5095/20 5096/18 5099/11 6001/3 10
PATH: 5006/1 5020/400 4441 545 5054/1 37