Есть вопросик по netflow. Ситуация такая - есть спутниковый интернет и выделенный сервер в котором собственно и стоит dvb карта и который раздает инет через nat (точнее маскарадинг) в локальную сеть. На интерфейсе смотрящем в локальную сеть запущен netflow-сенсор (/usr/sbin/fprobe -ieth0 -fip localhost:555), который скидывает статистику на коллектор, расположенный на той-же машине (/usr/bin/flow-capture -w /distr/logflow -N 3 0/localhost/555). Потом все это самописным скриптом кидается в базу данных (mysql) из которой уже выбирается все что нужно посредством web-морды. Вот скрипт-парсер:
Код: Выделить всё
#!/bin/sh
# vim: sw=4 ts=4 expandtab ai
TRAFFPATH="/distr/logflow"
FILTER="/home/alex/flow.acl"
DBUSER="admin"
DBPASS="adminpass"
DBHOST="localhost"
DBPORT="3306"
DBBASE="traffic"
Parser () {
for i in $( /usr/bin/find $TRAFFPATH -name ft* -mmin -60 )
do
/usr/bin/flow-cat $i | /usr/bin/flow-nfilter -F $1 -f \
$FILTER | /usr/bin/flow-export -f3 \
-m UNIX_SECS,UNIX_NSECS,DOCTETS,SRCADDR,DSTADDR,SRCPORT,DSTPORT,PROT \
-u "$DBUSER:$DBPASS:$DBHOST:$DBPORT:$DBBASE:$2" &>/dev/null
done
}
Parser "downloadtraff" "download_flow"
Parser "uploadtraff" "upload_flow"Вот набор правил для парсера (он же /home/alex/flow.acl):
Код: Выделить всё
filter-primitive mynet
type ip-address-prefix
permit 192.168.0.0/24
default deny
filter-primitive internet
type ip-address-prefix
deny 192.168.0.0/24
permit 0.0.0.0/0
filter-definition downloadtraff
match ip-source-address internet
match ip-destination-address mynet
filter-definition uploadtraff
match ip-source-address mynet
match ip-destination-address internetВот текущее положение по интерфейсам -
Код: Выделить всё
dvb0_0 Link encap:Ethernet HWaddr хх:хх:хх:хх:хх:хх
inet addr:192.168.255.1 Bcast:192.168.255.255 Mask:255.255.255.255
inet6 addr: fe80::2d0:5cff:fec6:903e/64 Scope:Link
UP BROADCAST RUNNING NOARP MULTICAST MTU:4096 Metric:1
RX packets:183913 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:152871625 (145.7 MiB) TX bytes:0 (0.0 B)
Base address:0x202
eth0 Link encap:Ethernet HWaddr 00:80:48:19:2f:96
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::280:48ff:fe19:2f96/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:9641928 errors:0 dropped:0 overruns:0 frame:0
TX packets:7420947 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1525422717 (1.4 GiB) TX bytes:1920890684 (1.7 GiB)
Interrupt:19 Base address:0xc000
lo ...
ppp9 Link encap:Point-to-Point Protocol
inet addr:92.36.29.105 P-t-P:212.119.106.151 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:2269 errors:0 dropped:0 overruns:0 frame:0
TX packets:13273 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:225015 (219.7 KiB) TX bytes:4691755 (4.4 MiB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:172.хх.хх.33 P-t-P:172.хх.хх.34 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:99245 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:84581474 (80.6 MiB)где
eth0 - интерфейс в локальную сеть
ppp9 - интерфейс исходящего канала. Скайлинковский телефон (cdma). IP динамический.
tun0 - openvpn канал до провайдера. Работает через скайлинковский канал. На нем и висит нат (/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE)
dvb0_0 - интерфейс dvb-карты (читай то что летит на тарелку), на который приходит весь трафик - причем трафик приходит не только для моего адреса а для всех - и потом отбирается по адресу назначения (адрес назначения = адресу интерфейса tun0). Ip адрес для данного интерфейса не имеет значения.
Работает это все по такой схеме (стандартной между прочим)
запрос -> tun0 -> ppp9 -> телепорт_провайдера(он осуществляет запрос нужной страницы в инете) -> спутник -> тарелка -> dvb0_0 -> ответ
Собственно вопрос вот в чем - трафик то считается - но считается только для клиентов сети (ну ещеб - слушаем то на интерфейсе в локалку). А сервер тоже потребляет некоторый трафик (например на dist-upgrade). Только вот как его считать (т е где повесить сенсоры и какие правила применить для flow-nfliter) я не знаю. Очень не хочется вешать сенсор на dvb0_0 т к мусорный поток там просто огромный и соответственно и файлы будут большими и фильтровать их напряжно. Может можно как-то считать весь трафик для самого сервера через loopback? или может еще какое-нить стандартное решение? Какие применяются способы в стандартном случае ? (те с одним интерфейсом в инет а не с такой солянкой)
Всем спасибо.
PS система debian lenny.