URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 76379
[ Назад ]

Исходное сообщение
"ng_nat+ng_netflow+flow-capture - не могу скрестить"

Отправлено weldpua2008 , 24-Сен-07 01:30 
Привет Всем
# uname -r
6.2-RELEASE-p7

# pfctl -d
pfctl: pf not enabled

В ядре опции:
options NETGRAPH
options NETGRAPH_ASYNC
options NETGRAPH_BPF
options NETGRAPH_BRIDGE
options NETGRAPH_CISCO
options NETGRAPH_DEVICE
options NETGRAPH_ECHO
options NETGRAPH_EIFACE
options NETGRAPH_ETHER
options NETGRAPH_GIF
options NETGRAPH_GIF_DEMUX
options NETGRAPH_TAG
options NETGRAPH_TCPMSS
options NETGRAPH_FEC
options NETGRAPH_HOLE
options NETGRAPH_IFACE
options NETGRAPH_IP_INPUT
options NETGRAPH_KSOCKET
options NETGRAPH_L2TP
options NETGRAPH_LMI
options NETGRAPH_NETFLOW
options NETGRAPH_ONE2MANY
options NETGRAPH_PPP
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_PPPOE
options NETGRAPH_PPTPGRE
options NETGRAPH_RFC1490
options NETGRAPH_SOCKET
options NETGRAPH_SPLIT
options NETGRAPH_TEE
options NETGRAPH_TTY
options NETGRAPH_UI
options NETGRAPH_VJC
options         NETGRAPH
options         NETGRAPH_IPFW
options         LIBALIAS
options         NETGRAPH_NAT
options         NETGRAPH_NETFLOW
options         NETGRAPH_SPLIT
options         NETGRAPH_KSOCKET
options         NETGRAPH_SOCKET
options         NETGRAPH_BPF
options         NETGRAPH_IFACE
options         NETGRAPH_MPPC_ENCRYPTION
options         NETGRAPH_PPP
options         NETGRAPH_PPTPGRE
options         NETGRAPH_TCPMSS
options         NETGRAPH_VJC

# ifconfig
rl0: 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: 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: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
pfsync0: flags=0<> mtu 2020
        syncpeer: 224.0.0.240 maxupd: 128
pflog0: flags=0<> mtu 33208
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x6
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000

rl0 - смотрит в локалку
rl1 - смотрит в инет


Проблема заключается в том, что без правил ipfw netflow не идет некуда, а с ними - машина не видит сеть, хотя пакеты по правилам(этим трем) проходят, flow-capture работает...

Имею такой скрипт запуска - подсмотрел пример на http://forum.bestcom.ru/htmlart/unix/ngnetflow.html:

#cat /usr/local/etc/rc.d/simple_flow.sh
#!/bin/sh
ipfw="/sbin/ipfw -q "
#/usr/local/sbin/softflowd -i rl1 -n127.0.0.1:2222
$ipfw -flush

$ipfw add 20 netgraph 61 ip from not 10.11.2.0/24 to 192.168.100.99 in via rl1
$ipfw add 21 netgraph 60 ip from 10.11.2.0/24 to not 10.11.2.0/24 out via rl1
$ipfw add 22 netgraph 71 ip from any to any in

$ipfw add 65534 allow all from any to any

/sbin/kldload ng_ipfw
/sbin/kldload  ng_ether
/sbin/kldload  ng_netflow
/sbin/kldload  ng_split

/usr/sbin/ngctl mkpeer ipfw: nat 60 out
/usr/sbin/ngctl name ipfw:60 nat
/usr/sbin/ngctl connect ipfw: nat: 61 in
/usr/sbin/ngctl msg nat: setaliasaddr 192.168.100.99

usr/sbin/ngctl mkpeer ipfw: netflow 71 iface0
/usr/sbin/ngctl name ipfw:71 netflow
/usr/sbin/ngctl connect ipfw: netflow: 70 out0
/usr/sbin/ngctl mkpeer netflow: ksocket export inet/dgram/udp
/usr/sbin/ngctl msg netflow:export connect inet/127.0.0.1:2222

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

/sbin/sysctl net.inet.ip.fw.one_pass=0

/usr/local/bin/flow-capture -n 287 -w /var/db/flows/ 0.0.0.0/127.0.0.1/2222


Содержание

Сообщения в этом обсуждении
"ng_nat+ng_netflow+flow-capture - не могу скрестить"
Отправлено weldpua2008 , 24-Сен-07 01:59 
Может у кого-нить есть готовый скрипт работающий для:
ng_nat + ng_netflow?

"ng_nat+ng_netflow+flow-capture - не могу скрестить"
Отправлено weldpua2008 , 24-Сен-07 03:46 
Так-с
Покопался в Инете и нашел такой скрипт:
Напоминаю rl0 - 10.11.2.1 - за ней 10.11.2.0/24 локалка
Напоминаю rl1 - 192.168.100.99 - за ней инет

~# ./fw start
06400 allow ip from any to any
net.inet.ip.fw.one_pass: 0 -> 0
ipfw: rule 110: setsockopt(IP_FW_DEL): Invalid argument
ipfw: rule 111: setsockopt(IP_FW_DEL): Invalid argument
ipfw: rule 200: setsockopt(IP_FW_DEL): Invalid argument
ipfw: rule 201: setsockopt(IP_FW_DEL): Invalid argument
00200 netgraph 71 ip from not 10.11.2.0/24 to 192.168.100.99 in via rl1
00201 netgraph 70 ip from 10.11.2.0/24 to not 10.11.2.0/24 out via rl1
net.inet.ip.fw.one_pass: 0 -> 0
./fw: /usr/local/sbin/flow-capture: not found
serverb# Read from remote host 192.168.100.99: Connection reset by peer

Дальше идет риверс - типа неправильный нат, но куда Я не понял :(
~# ping 10.11.2.1
PING 10.11.2.1 (10.11.2.1) 56(84) bytes of data.
64 bytes from 192.168.100.99: icmp_seq=1 ttl=128 time=0.271 ms
64 bytes from 192.168.100.99: icmp_seq=2 ttl=128 time=0.239 ms

# cat /fw
#!/bin/sh

case "$1" in
        start)
        EXT_IP="192.168.100.99"
        LOCAL_NET="10.11.2.0/24"
            /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=2}

            /usr/sbin/ngctl mkpeer netflow: ksocket export inet/dgram/udp
            /usr/sbin/ngctl msg netflow:export connect inet/127.0.0.1:2222
      
        /sbin/ipfw add 6400 allow all from any to any
        /sbin/sysctl net.inet.ip.fw.one_pass=0
        ipfw delete 110
        ipfw delete 111
        ipfw delete 200
        ipfw delete 201
#       /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 in via rl1
        /sbin/ipfw add 201 netgraph 70 all from $LOCAL_NET to not $LOCAL_NET out via rl1    
        /sbin/sysctl net.inet.ip.fw.one_pass=0
        /usr/local/sbin/flow-capture -n 287 -w /var/db/flows/ 0.0.0.0/127.0.0.1/2222
        /usr/local/bin/flow-capture -n 287 -w /var/db/flows/ 0.0.0.0/127.0.0.1/2222


        ;;
        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


"ng_nat+ng_netflow+flow-capture - не могу скрестить"
Отправлено weldpua2008 , 24-Сен-07 04:07 
В общем насколько Я понял вся загвозка в том что у Меня по умолчанию DENY all в ipfw

"ng_nat+ng_netflow+flow-capture - не могу скрестить"
Отправлено Gray , 27-Сен-07 07:56 
>В общем насколько Я понял вся загвозка в том что у Меня
>по умолчанию DENY all в ipfw

Нет. Вся загвоздка в том, что netgraph нада еще настраивать и настраивать. Сам по себе ng_nat ничем тебе не поможет.
Итак, начнем по порядку....
1. Скомпилировать ядро с поддержкой ng_nat+ng_netflow. Это сделано.
2. Установить flow-tools из портов. Тоже, вроде сделано.
3. В netgraph "Нарисовать" схему того, что, собственно требуется. (netGRAPH, как ни как... ) По этой теме есть хорошая сцылка http://www.citrin.ru/netgraph/
4. Заворачивать с помощью ipfw пакеты в netgraph (например так: ipfw add 1000 netgraph ХХХ ip from any to any in via ${inet_iface}; ipfw add 1100 netgraph YYY ip from any to any out via ${inet_iface}; )
5. Запустить flow-capture со всеми необходимыми параметрами.

Есть хинт: Поскольку flow-capture сваливает сурцы в своем, хитрожопом формате, то посмотреть их можно только с помощью утилиты flow-print. Однако, сам flow-capture имеет очень полезную опцию -R /myscript. Эта опция предписывает запускать указанный скрипт (или не скрипт) после каждго сброса дампа на диск.


"ng_nat+ng_netflow+flow-capture - не могу скрестить"
Отправлено Gray , 27-Сен-07 08:12 
А, пардон - не увидел. С настойкой netgraph вы уже разобрались...
Я бы предложил такой вариант скрипта для настройки:

ngctl="/usr/sbin/ngctl"

alias="192.168.100.99 "

nfport="4444"


${ngctl} mkpeer ipfw: split 111 mixed
${ngctl} name ipfw:111 split111

${ngctl} mkpeer ipfw: nat 222 in
${ngctl} name ipfw:222 nat222

${ngctl} mkpeer nat222: split out mixed
${ngctl} name nat222:out split111

${ngctl} mkpeer split222: netflow out iface0
${ngctl} name split222:out flowsensor

${ngctl} connect split111: flowsensor: out iface1
${ngctl} connect flowsensor: split111: out0 in
${ngctl} connect flowsensor: split222: out1 in

${ngctl} mkpeer flowsensor: ksocket export inet/dgram/udp
${ngctl} name flowsensor:export flowsend

${ngctl} msg nat222: setaliasadr ${alias}
${ngctl} msg flowsensor: setdlt { iface=0 dlt=12 }
${ngctl} msg flowsensor: setdlt { iface=1 dlt=12 }

${ngctl} msg flowsensor: setifindex { iface=0 index=0 }
${ngctl} msg flowsensor: setifindex { iface=1 index=0 }

${ngctl} msg flowsensor: settimeouts { inactive=10 active=10 }

${ngctl} msg flowsend: connect inet/127.0.0.1/${nfport}

Использоать так:
ipfw add 1000 netgraph 111 ip from any to any in via ${inet_iface}
ipfw add 1100 netgraph 222 ip from any to any out via ${inet_iface};


"ng_nat+ng_netflow+flow-capture - не могу скрестить"
Отправлено weldpua2008 , 27-Сен-07 21:17 
Вот трабла со всеми данными - ХЕЛП МИ!!!!!
http://www.netup.ru/phpbb/viewtopic.php?t=4010&postdays=0&po...