FreeBSD (netgraph)

Технические вопросы по UTM 5.0
gate
Сообщения: 29
Зарегистрирован: Чт дек 22, 2005 15:25

FreeBSD (netgraph)

Сообщение gate »

сбор статистики ng_ipfw+ng_netflow

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

#!/bin/sh

case "$1" in
        start)
            /usr/sbin/ngctl mkpeer ipfw: netflow 30 iface0
            /usr/sbin/ngctl name ipfw:30 netflow

            /usr/sbin/ngctl msg netflow: setdlt {iface=0 dlt=12}
            /usr/sbin/ngctl msg netflow: setifindex {iface=0 index=5}

            /usr/sbin/ngctl mkpeer netflow: ksocket export inet/dgram/udp
            /usr/sbin/ngctl msg netflow:export connect inet/127.0.0.1:9996
            ;;
        stop)
            /usr/sbin/ngctl shutdown netflow:
            ;;
        restart)
            sh $0 stop
            sleep 5
            sh $0 start
            ;;
        *)
            echo ""
            echo "Usage: `basename $0` { start | stop | restart }"
            echo ""
            exit 64
            ;;
esac
ipfw

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

add 110 ngtee 30 ip from any to any out via ng*
add 111 ngtee 30 ip from any to any in via ng*

gate
Сообщения: 29
Зарегистрирован: Чт дек 22, 2005 15:25

Сообщение gate »

ng_ipfw+ng_nat+ng_netflow

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

#!/bin/sh

case "$1" in
        start)
            /usr/sbin/ngctl mkpeer ipfw: nat 70 out
            /usr/sbin/ngctl name ipfw:70 nat
            /usr/sbin/ngctl connect ipfw: nat: 71 in
            /usr/sbin/ngctl msg nat: setaliasaddr EXT_IP

            /usr/sbin/ngctl mkpeer ipfw: netflow 30 iface0
            /usr/sbin/ngctl name ipfw:30 netflow

            /usr/sbin/ngctl msg netflow: setdlt {iface=0 dlt=12}
            /usr/sbin/ngctl msg netflow: setifindex {iface=0 index=5}

            /usr/sbin/ngctl mkpeer netflow: ksocket export inet/dgram/udp
            /usr/sbin/ngctl msg netflow:export connect inet/127.0.0.1:9996
            ;;
        stop)
            /usr/sbin/ngctl shutdown nat:
            /usr/sbin/ngctl shutdown netflow:
            ;;
        restart)
            sh $0 stop
            sleep 5
            sh $0 start
            ;;
        *)
            echo ""
            echo "Usage: `basename $0` { start | stop | restart }"
            echo ""
            exit 64
            ;;
esac
ipfw

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

add 110 ngtee 30 ip from any to any out via ng*
add 111 ngtee 30 ip from any to any in via ng*
add 200 netgraph 71 all from not LOCAL_NET to EXT_IP in via fxp0
add 201 netgraph 70 all from LOCAL_NET to not LOCAL_NET out via fxp0

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

вобщем-то давно опубликована была ссылка на соотв статью в документации.

prx
Сообщения: 139
Зарегистрирован: Чт дек 01, 2005 18:44

Сообщение prx »

Что-то я не видел в документации про ng_netflow...

Аватара пользователя
XoRe
Сообщения: 458
Зарегистрирован: Ср янв 10, 2007 16:04

Сообщение XoRe »

Не трогать тему!
Я по ней у себя настраивать буду :)
В доке я такого описания не нашел.

winger
Сообщения: 10
Зарегистрирован: Вт апр 24, 2007 21:18

Сообщение winger »

А теперь вопрос такой - как используя вот это организовать правила включения-выключения пользователя в ipfw ??? После правила на нат данные в коллектор не возвращаются а сразу уходят.

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

поставить правила натирования/учета в верхнем диапазоне номеров правил(50000-65000), дальше как обычно.

winger
Сообщения: 10
Зарегистрирован: Вт апр 24, 2007 21:18

Сообщение winger »

00010 430 37351 allow ip from any to me dst-port 22
00020 421 66027 allow ip from me 22 to any
00100 0 0 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
05001 21 1987 allow ip from 10.1.10.1 to any
05002 0 0 allow ip from 10.1.1.5 to any
05004 0 0 allow ip from 10.1.10.2 to any
05006 0 0 allow ip from 10.2.0.1 to any
05006 0 0 allow ip from 20.1.1.4 to any
10000 0 0 deny ip from 10.1.10.1 to any
50000 37 2952 allow ip from 192.168.6.0/24 to 192.168.6.0/24
60000 3 116 ngtee 30 ip from any to any out via ng0
60001 0 0 ngtee 30 ip from any to any in via ng0
60002 3 444 netgraph 71 ip from not 10.0.0.0/8 to 192.168.6.241 in via em0
60003 0 0 netgraph 70 ip from 10.0.0.0/8 to not 10.0.0.0/8 out via em0

Смотрим на ip 10.1.10.1 пакет приходит, подпадает под 5001 правило и все, 60003 срабатываний нет, соотв-но данных тоже :(

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

посмотреть sysctl.conf
net.inet.ip.fw.one_pass: 1
выставить равным нулю, тогда пакет будет проходить дальше
Либо, если политика фаервола по умолчанию - запрет, то правило вместо "allow ip from any to UIP / UIP to any" сделать netgraph N ip from ...
и дальше подобные шаманства =)
Нетграф очень хорошо разрисовывается, сюда же можно пририсовать и политику фаервола, видно станет, как оно должно работать.

AMatvienko
Сообщения: 3
Зарегистрирован: Сб апр 28, 2007 13:10
Откуда: Saint-Petersburg
Контактная информация:

Сообщение AMatvienko »

winger писал(а):А теперь вопрос такой - как используя вот это организовать правила включения-выключения пользователя в ipfw ??? После правила на нат данные в коллектор не возвращаются а сразу уходят.
Я бы еще чутка усложнил задачу:
Классический роутер под раздачу инета пользователям.
1. Необходимо организовать шейпинг трафика для клиента в обе стороны в соответствии с его тарифом.
2. Необходимо включать-выключать интернет пользователям.
3. Необходимо считать трафик.
4. Необходимо "натить" внутренние серые адреса и не "натить" реальные ИП.

Операционная система FreeBSD 6.2 В данный момент схема реализована на IPFW+natd+dummynet+ndsad, однако сервер начинает захлебываться на пиковых нагрузках.
Возникло желание переделать данную связку на ng_ipfw+ng_nat+ng_netflow+dummynet.

AMatvienko
Сообщения: 3
Зарегистрирован: Сб апр 28, 2007 13:10
Откуда: Saint-Petersburg
Контактная информация:

Сообщение AMatvienko »

winger писал(а):00010 430 37351 allow ip from any to me dst-port 22
00020 421 66027 allow ip from me 22 to any
00100 0 0 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
05001 21 1987 allow ip from 10.1.10.1 to any
05002 0 0 allow ip from 10.1.1.5 to any
05004 0 0 allow ip from 10.1.10.2 to any
05006 0 0 allow ip from 10.2.0.1 to any
05006 0 0 allow ip from 20.1.1.4 to any
10000 0 0 deny ip from 10.1.10.1 to any
50000 37 2952 allow ip from 192.168.6.0/24 to 192.168.6.0/24
60000 3 116 ngtee 30 ip from any to any out via ng0
60001 0 0 ngtee 30 ip from any to any in via ng0
60002 3 444 netgraph 71 ip from not 10.0.0.0/8 to 192.168.6.241 in via em0
60003 0 0 netgraph 70 ip from 10.0.0.0/8 to not 10.0.0.0/8 out via em0

Смотрим на ip 10.1.10.1 пакет приходит, подпадает под 5001 правило и все, 60003 срабатываний нет, соотв-но данных тоже :(
По-моем стоит написать так allow ip from 10.1.10.1 to any via "ng*", тогда правило отработает только на внутреннем интерфейсе, а правило ната на внешнем.

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

http://wiki.bsdportal.ru/doc:netgraph_ng_nat
Делал в свое время по этому мануалу, единственное что не получилось - совместить шейпинг с натом. Для реальных IP шейпер работает правильно.

AMatvienko
Сообщения: 3
Зарегистрирован: Сб апр 28, 2007 13:10
Откуда: Saint-Petersburg
Контактная информация:

Сообщение AMatvienko »

mikkey finn писал(а):http://wiki.bsdportal.ru/doc:netgraph_ng_nat
Делал в свое время по этому мануалу, единственное что не получилось - совместить шейпинг с натом. Для реальных IP шейпер работает правильно.
В приведенном тобой примере netflow и nat совмещены в одну цепочку и применяются на внутреннем интерфейсе роутера. привезать туда шейпинг мне тоже не удалось.

weldpua2008
Сообщения: 19
Зарегистрирован: Пн сен 24, 2007 13:02

Сообщение weldpua2008 »

mikkey finn писал(а):посмотреть sysctl.conf
net.inet.ip.fw.one_pass: 1
выставить равным нулю, тогда пакет будет проходить дальше
Либо, если политика фаервола по умолчанию - запрет, то правило вместо "allow ip from any to UIP / UIP to any" сделать netgraph N ip from ...
и дальше подобные шаманства =)
Нетграф очень хорошо разрисовывается, сюда же можно пририсовать и политику фаервола, видно станет, как оно должно работать.
net.inet.ip.fw.one_pass=0

Политика deny all

ng_nat+ng_netflow+mpd4


Примеры что в Инете - у Меня не работают в том числе и вышеприведённый:
Весь затык на правилах ipfw - пакеты туды попадают, но дальше никуда не выходят в том числе в
ipfw add allow all from any to any
И все - получаю непингуемую машину

# ifconfig

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

rl0&#58; flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet 10.11.2.1 netmask 0xffffff00 broadcast 10.11.2.255
rl1&#58; flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet 192.168.100.99 netmask 0xffffff00 broadcast 192.168.100.255
plip0&#58; flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
pfsync0&#58; flags=0<> mtu 2020
        syncpeer&#58; 224.0.0.240 maxupd&#58; 128
pflog0&#58; flags=0<> mtu 33208
lo0&#58; flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000 
rl0 - локалка
rl1 - инет
flow-capture - работает, причем даже с ng_netflow -
#ngctl -f /ng_netflow

#cat /ng_netflow

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

mkpeer rl1&#58; tee lower left
name rl1&#58;lower tee0
connect rl1&#58; rl1&#58;lower upper right
mkpeer tee0&#58; one2many left2right many0
name tee0&#58;left2right one2many0
connect tee0&#58;  one2many0&#58; right2left many1
mkpeer one2many0&#58; netflow one iface0
name one2many0&#58;one netflow
mkpeer netflow&#58; ksocket export inet/dgram/udp
msg netflow&#58; setifindex &#123; iface=0 index=2 &#125;
msg netflow&#58;export connect inet/127.0.0.1&#58;2222
Такой скрипт (ng_nat+ng_netflow - для подсчета любого трафика отправленого ipfw не работает) :

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

#!/bin/sh
        EXT_IP="192.168.100.99"
        LOCAL_NET="10.11.2.0/24"

             /usr/sbin/ngctl mkpeer ipfw&#58; nat 70 out
            /usr/sbin/ngctl name ipfw&#58;70 nat
            /usr/sbin/ngctl connect ipfw&#58; nat&#58; 71 in
            /usr/sbin/ngctl msg nat&#58; setaliasaddr $EXT_IP
            /usr/sbin/ngctl mkpeer ipfw&#58; netflow 30 iface0
            /usr/sbin/ngctl name ipfw&#58;30 netflow
            /usr/sbin/ngctl msg netflow&#58; setdlt &#123;iface=0 dlt=12&#125;
            /usr/sbin/ngctl msg netflow&#58; setifindex &#123;iface=0 index=1&#125;

            /usr/sbin/ngctl mkpeer netflow&#58; ksocket export inet/dgram/udp
            /usr/sbin/ngctl msg netflow&#58;export connect inet/127.0.0.1&#58;2222
       
        /sbin/ipfw add 6400 allow all from any to any
        /sbin/sysctl net.inet.ip.fw.one_pass=0
       /sbin/ipfw add 110 ngtee 30 ip from any to any out via ng*
       /sbin/ipfw add 111 ngtee 30 ip from any to any in via ng*
        /sbin/ipfw add 200 netgraph 71 all from not $LOCAL_NET to $EXT_IP out via rl1
        /sbin/ipfw add 201 netgraph 70 all from $LOCAL_NET to not $LOCAL_NET in via rl1     
        /usr/local/bin/flow-capture -n 287 -w /var/db/flows/ 0.0.0.0/127.0.0.1/2222

weldpua2008
Сообщения: 19
Зарегистрирован: Пн сен 24, 2007 13:02

Сообщение weldpua2008 »

Так-с наблюдается следующая ботва - если Я использую такие правила:
/sbin/ipfw add XXX ngtee XXX ip from any to any in/out via XXX
/sbin/ipfw add XXX netgraph XX all from not XXX to XXX in/out via XX

То Я либо получаю непингуемую машину либо под праила ничего не подпадает

Что Я делаюб не так?
Правила ipfw менял местами значения - не работает и все ng_nat :(

Ответить