PF + неверный подсчет трафика?

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Doxtur
проходил мимо

PF + неверный подсчет трафика?

Непрочитанное сообщение Doxtur » 2010-01-02 22:36:45

Проблема следующего характера...
на сервере настроен PF, все крутится, все работает. Есть два виртуальных интерфейса ng0 и ng1. Появилась идея рисовать графики в rrdtool, на которых собственно и обнаружилось, что статистика исходящего трафика на ng0 суммируется с исходящим трафиком на ng1. Сбор трафика при помощи netstat и сравнение с ng0 - ng1 это подтвердило. Внимание вопрос, это косяк правил фильтра или что-то еще?

Код: Выделить всё

# uname -a
FreeBSD bsd8.***.ru 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sun Dec 20 18:20:09 MSK 2009     ***@bsd8.***.ru:/usr/obj/usr/src/sys/SMP-***-KERNEL  i386

Код: Выделить всё

# cat /etc/pf.conf

# ISP-1
ext_if_a        = "ng0"
ext_gw_a        = "1.1.1.1"
ext_ip_a        = "1.1.1.2"

# ISP-2
ext_if_b        = "ng1"
ext_gw_b        = "2.2.2.1"
ext_ip_b        = "2.2.2.2"

# ISP-2 local
ext_if_c        = "fxp1"
ext_gw_c        = "10.0.0.1"

# LAN
int_if_a        = "em0"
net             = "192.168.0.0/24"
int_ip_a        = "192.168.0.1"
win2003         = "192.168.0.11"
radio           = "192.168.0.12"

tcp_svc_a       = "21 80 2020 411 8000 8003 27015 31337"
tcp_svc_b       = "80 2020 411 31337"
udp_svc_a       = "27015"
udp_svc_b       = ""

icmp_types      = "echoreq"

set block-policy return
set skip on lo0
set skip on xl0
set skip on re0
set loginterface $ext_if_a
scrub in

nat on $ext_if_a inet from !(self) -> ($ext_if_a:0)
nat on $ext_if_b inet from !(self) -> ($ext_if_b:0)

rdr pass on $ext_if_a inet proto tcp to $ext_if_a:0 port { 25, 110, 82, 83, 2525, 4901, 8080 } tag EXT_IF_A -> $win2003
rdr on $ext_if_b inet proto tcp to $ext_if_b:0 port { 25, 110, 82, 83, 2525, 4901, 8080 } tag EXT_IF_B -> $win2003

rdr pass inet proto tcp from any to any port { 4900 8112 9112 } -> $radio
rdr pass inet proto udp from any to any port { 8212 9212 } -> $radio

rdr pass inet proto tcp from any to any port { 30001 } -> $win2003
rdr pass inet proto udp from any to any port { 30002 } -> $win2003

rdr-anchor "ftp-proxy/*"
rdr on $int_if_a proto tcp from any to !(self) port ftp -> 127.0.0.1 port 8021
anchor "ftp-proxy/*"

block log (all) all

pass on $int_if_a
pass out

pass in quick inet proto udp from { 192.168.0.11, 192.168.0.10 } to any port 27015

pass in quick reply-to ($ext_if_a $ext_gw_a) tagged EXT_IF_A keep state
pass in quick reply-to ($ext_if_b $ext_gw_b) tagged EXT_IF_B keep state

# ICMP
# ISP-1
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) inet proto icmp to ($ext_if_a) tag EXT_IF_A icmp-type echoreq code 0
# ISP-2
pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) inet proto icmp to ($ext_if_b) tag EXT_IF_B icmp-type echoreq code 0

pass in quick on $int_if_a route-to ($ext_if_a $ext_gw_a) inet proto tcp from { 192.168.0.11 } to !(self) port { 25, 110 }
pass in quick on $int_if_a route-to ($ext_if_a $ext_gw_a) from { 192.168.0.12, 192.168.0.10, 192.168.0.3 } to !(self)
pass in quick on $int_if_a route-to ($ext_if_b $ext_gw_b) from { 192.168.0.11 } to !(self)

# ISP-1
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) inet proto tcp to ($ext_if_a) port { $tcp_svc_a }
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) inet proto udp to ($ext_if_a) port 27015
# ISP-2
pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) inet proto tcp to ($ext_if_b) port { $tcp_svc_b }
#pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) inet proto udp to ($ext_if_b) port { $udp_svc_b }


# routig policy for outbound packets into chanel
pass out quick route-to ($ext_if_a $ext_gw_a) from ($ext_if_a) to !(self:network)
pass out quick route-to ($ext_if_b $ext_gw_b) from ($ext_if_b) to !(self:network)

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
zar0ku1
сержант
Сообщения: 238
Зарегистрирован: 2008-02-29 4:38:05
Откуда: Южно-Сахалинск
Контактная информация:

Re: PF + неверный подсчет трафика?

Непрочитанное сообщение zar0ku1 » 2010-01-05 11:02:52

Думаю проблема в настройке rrdtool

на беглый взгляд ошибок в фаерволе нет
На фоне дураков четче хорошие люди прорисовываются.
(с) Граффити

Doxtur
проходил мимо

Re: PF + неверный подсчет трафика?

Непрочитанное сообщение Doxtur » 2010-01-05 11:59:57

Увы, если бы это было так. Я непосредственно брал данные из PF (pfctl -sI -vv -i ng0 | grep "Out4/Pass" | awk '{print $6}') и считал разность по времени, выходило гораздо больше Mbps чем есть на самом деле. То есть проблема точно где-то в пакетном фильтре.

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: PF + неверный подсчет трафика?

Непрочитанное сообщение FreeBSP » 2010-01-05 20:40:55

обрати внимание на 8 главу книги The book of PF
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Doxtur
проходил мимо

Re: PF + неверный подсчет трафика?

Непрочитанное сообщение Doxtur » 2010-01-06 17:13:50

Поменял default gateway на ng1 и ситуация переменилась на диаметрально противоположную, то есть теперь трафик ng0 добавляется к ng1. Получается, что любой исходящий пакет от системы сперва обрабатывается ядром (таблицей маршрутизации), и далее попадает в PF, где идентифицируется как пакет идущий через DG?

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: PF + неверный подсчет трафика?

Непрочитанное сообщение FreeBSP » 2010-01-15 11:29:36

интересно, что скажет по этому поводу IPFW

Код: Выделить всё

ifaces="ng0 ng1 fxp1 em0"
i=11 # номер правила, с которого начинаются считалки трафика
for iface in $ifaces do
    ${fwcmd} add $i count all from any to me in via $iface
    ${fwcmd} add $i+1 count all from me to any out via via $iface
    i=`expr $i + 2`
done
${fwcmd} add 65500 pass all
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!