FreeBSD (netgraph)

Технические вопросы по UTM 5.0
LMik
Сообщения: 39
Зарегистрирован: Вт фев 14, 2006 19:55

Сообщение LMik »

Cплит оказалось немножко не то делает :(

Пока вот такая штука получилась, но по этой схеме получается в 2 раза нагрузка на сервер больше на генерацию нетфлоу.

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

            /usr/sbin/ngctl mkpeer ipfw: one2many 30 one
            /usr/sbin/ngctl name ipfw:30 one2many0

            /usr/sbin/ngctl mkpeer one2many0: netflow many0 iface0
            /usr/sbin/ngctl name one2many0:many0 netflow0

            /usr/sbin/ngctl mkpeer one2many0: netflow many1 iface0
            /usr/sbin/ngctl name one2many0:many1 netflow1

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

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

            /usr/sbin/ngctl mkpeer netflow0: ksocket export inet/dgram/udp
            /usr/sbin/ngctl msg netflow0:export connect inet/xx.xx.xx.xx:9996

            /usr/sbin/ngctl mkpeer netflow1: ksocket export inet/dgram/udp
            /usr/sbin/ngctl msg netflow1:export connect inet/xx.xx.xx.xx:9996


LMik
Сообщения: 39
Зарегистрирован: Вт фев 14, 2006 19:55

Сообщение LMik »

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

#!/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: one2many export one
            /usr/sbin/ngctl name netflow:export netflow0

            /usr/sbin/ngctl mkpeer netflow0: ksocket many0 inet/dgram/udp
            /usr/sbin/ngctl msg netflow0:many0 connect inet/xx.xx.xx.xx:9996

            /usr/sbin/ngctl mkpeer netflow0: ksocket many1 inet/dgram/udp
            /usr/sbin/ngctl msg netflow0:many1 connect inet/xx.xx.xx.xx:9996

            ;;
        stop)
            /usr/sbin/ngctl shutdown netflow:
            /usr/sbin/ngctl shutdown netflow0:
            ;;
        restart)
            sh $0 stop
            sleep 5
            sh $0 start
            ;;
        *)
            echo ""
            echo "Usage: `basename $0` { start | stop | restart }"
            echo ""
            exit 64
            ;;
esac
Похоже окончательный вариант получается без лишней генерации копии нетфлоу, а копия уже сгенерированного. :)

LMik
Сообщения: 39
Зарегистрирован: Вт фев 14, 2006 19:55

Сообщение LMik »

Оказалось не окончательный вариант, в этом случае нетфлоу поток делился пополам между двумя конектами :)

Вот вариант правильный:

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

#!/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: hub export one
            /usr/sbin/ngctl name netflow:export netflow0

            /usr/sbin/ngctl mkpeer netflow0: ksocket two inet/dgram/udp
            /usr/sbin/ngctl msg netflow0:two connect inet/91.195.130.3:9996

            /usr/sbin/ngctl mkpeer netflow0: ksocket three inet/dgram/udp
            /usr/sbin/ngctl msg netflow0:three connect inet/91.195.130.57:9996

            ;;
        stop)
            /usr/sbin/ngctl shutdown netflow:
            /usr/sbin/ngctl shutdown netflow0:
            ;;
        restart)
            sh $0 stop
            sleep 5
            sh $0 start
            ;;
        *)
            echo ""
            echo "Usage: `basename $0` { start | stop | restart }"
            echo ""
            exit 64
            ;;
esac

hammer
Сообщения: 286
Зарегистрирован: Сб янв 20, 2007 22:58
Контактная информация:

Re: FreeBSD (netgraph)

Сообщение hammer »

Поставил себе mpd5 (великолепная штука надо сказать и удобная вещь бандлы, не знаю были ли они в 4,но не важно). Следующим щагом выкинул ndsad - cбор статистики организовал по низлежащему топику и для замены опции ndsad ng_lifetime успешно применил /usr/sbin/ngctl msg netflow: settimeouts { active=5 inactive=5 }
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*
С шейпером как рабоать по радиус параметрам нашел топик в разделе Документации и статьи на данном форуме (как я понял через ng_car). Но вот теперь что ещё касается одной интерестной вещи - это сбор статистики в mpd5 доступно через ng_ipaccd - впринципе вкурив данный пример http://www.opennet.ru/prog/info/1393.shtml пришел к выводу что он строится на netgraph и впринципе схож с тем что предложено тут - но хотелось бы уточнить - если он РОДНОЙ для mpd5 не проще ли использовать именно его? Вернее не лучше ли, а если так, то почему и если кто делал через него, то поделитесь плз настроечками, все таки все родное возможно лучше). И вообще есть ли принципиальная разница как организовывать сбор статистики? через ng_netflow или ng_ipaccd? На сколько буде твелик выйгрыш от смены одного надругое?

ЗЫ. ng_nat что то не захотел работать, пока сижу на natd, но навернео это из за того что просто не поковырялся пока с начтройками.

ЗЗЫ. Кто нить вкурсе как можно НОРМАЛЬНО убивать ng интерфейсы?? Ниже скрипт что я щас пользуюсь для отключения узверей от Инета

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

USER_IP="$1"
PID_DIR=/var/run
test -z "$USER_IP" && exit 1
IF=`ifconfig | grep -B 1 "${USER_IP}" | head -n1 | awk {'print $1'} | cut -d ":" -f1`;

### For mpd (interface ng)

ifconfig ${IF} delete;

## uncomment for poptop (FreeBSD interface tun)
# PID=`cat ${PID_DIR}/${IF}.pid 2>/dev/null`;
# test -z "${PID}" && exit 1
# kill -INT ${PID}
# exit 0;
При таком ifconfig ng* delete у абонента остается висеть подключение - в случае с tun сносило по пиду под корень! Из вебморты mpd ифейс убивается на корню - если кто знает какой механизм там используется - подскажите.

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

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

у mpd есть консоль(телнет) и вебморда. ими и рулить.
имхо: лучше ng_netflow, хотя особо разницы быть не должно. любой ng-компонент - кусок нетграфа, все они вместе с mpd родственники. Поэтому mpd позволяет на бандле сразу и генерацию статистики организовать и нат и шейп. И все в ядре ОС.

LMik
Сообщения: 39
Зарегистрирован: Вт фев 14, 2006 19:55

Сообщение LMik »

я если нужно делаю
ifconfig ng* -alias

стата ng_netflow

Про нат выше писалось, все работает.

hammer
Сообщения: 286
Зарегистрирован: Сб янв 20, 2007 22:58
Контактная информация:

Сообщение hammer »

Nat завелся моментом.

ifconfig ng* -alias дает тот же результат

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

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

скрипт отключения пользователя на этом форуме уже летал. Как раз через консоль mpd4.

hammer
Сообщения: 286
Зарегистрирован: Сб янв 20, 2007 22:58
Контактная информация:

Сообщение hammer »

С консолью mpd5 он не торопится рабоать... а вообще вручную примерно такая последовательность действий...
telnet $host $port -> логинемся -> iface ng* -> close -> exit. Все вроде просто надо подумать как теперь эт осделать... было сел писать кастыль на перле, но что то ен получилось и пока отложил в сторону.[/code]

LMik
Сообщения: 39
Зарегистрирован: Вт фев 14, 2006 19:55

Сообщение LMik »

hammer писал(а):Nat завелся моментом.

ifconfig ng* -alias дает тот же результат
Тунель повисит не более таймаута установленного при соединении и отвалилтся в итоге у клиента.

Аватара пользователя
kaN5300
Сообщения: 480
Зарегистрирован: Пт янв 21, 2005 17:27
Откуда: Ыукзгрщм
Контактная информация:

[SOLVED]

Сообщение kaN5300 »

Спасибо за статью. Нат получился без проблем, а вот с netflow грабли. Делал вот так:

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

### Netflow ###
ngctl mkpeer ipfw: netflow 30 iface0
ngctl name ipfw:30 netflow
ngctl msg netflow: setdlt {iface=0 dlt=12}
ngctl msg netflow: setifindex {iface=0 index=5}
ngctl mkpeer netflow: ksocket export inet/dgram/udp
ngctl msg netflow:export connect inet/127.0.0.1:9996
$ADD 800 ngtee 30 ip from any to any out via ng0
$ADD 801 ngtee 30 ip from any to any in via ng0
###############

### NAT ###
ngctl mkpeer ipfw: nat 60 out
ngctl name ipfw:60 nat
ngctl connect ipfw: nat: 61 in
ngctl msg nat: setaliasaddr $ext_ip
$ADD 882 netgraph 60 all from 10.10.0.0/16 to any out via $ext
$ADD 883 netgraph 61 all from any to any in via $ext
###########
ipfw -a -t:

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

00800  38  4042 Tue Mar  4 12:10:34 2008 ngtee 30 ip from any to any out via ng0
00801  26  1936 Tue Mar  4 12:10:34 2008 ngtee 30 ip from any to any in via ng0
00882  26  1936 Tue Mar  4 12:10:34 2008 netgraph 60 ip from 10.10.0.0/16 to any out via fxp0
00883  38  4042 Tue Mar  4 12:10:34 2008 netgraph 61 ip from any to any in via fxp0
kldstat | grep ng_:

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

 4    1 0xc4f7b000 2000     ng_nat.ko
 7    1 0xc4f9d000 3000     ng_ether.ko
 8    1 0xc4fa0000 4000     ng_netflow.ko
 9    1 0xc4fa4000 3000     ng_tee.ko
10    1 0xc4fa7000 2000     ng_ipfw.ko
11    1 0xc4fae000 4000     ng_socket.ko
12    1 0xc527d000 4000     ng_ksocket.ko
14    1 0xc5614000 3000     ng_mppc.ko
16    1 0xc5628000 4000     ng_pptpgre.ko
17    1 0xc562c000 3000     ng_iface.ko
18    1 0xc562f000 5000     ng_ppp.ko
19    1 0xc5656000 2000     ng_tcpmss.ko
ngctl list:

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

There are 18 total nodes:
  Name: ngctl3429       Type: socket          ID: 0000002c   Num hooks: 0
  Name: mpd3328-B-1-mss Type: tcpmss          ID: 0000001e   Num hooks: 2
  Name: mpd3328-stats   Type: socket          ID: 0000001d   Num hooks: 0
  Name: mpd3328-B-1     Type: ppp             ID: 0000001c   Num hooks: 3
  Name: ng0             Type: iface           ID: 0000001b   Num hooks: 1
  Name&#58; <unnamed>       Type&#58; ksocket         ID&#58; 0000001a   Num hooks&#58; 1
  Name&#58; <unnamed>       Type&#58; pptpgre         ID&#58; 00000019   Num hooks&#58; 2
  Name&#58; mpd3328-L-1-lt  Type&#58; tee             ID&#58; 00000017   Num hooks&#58; 2
  Name&#58; mpd3328-eso     Type&#58; socket          ID&#58; 00000016   Num hooks&#58; 0
  Name&#58; mpd3328-cso     Type&#58; socket          ID&#58; 00000015   Num hooks&#58; 0
  Name&#58; mpd3328-lso     Type&#58; socket          ID&#58; 00000014   Num hooks&#58; 1
  Name&#58; nat             Type&#58; nat             ID&#58; 0000000e   Num hooks&#58; 2
  Name&#58; <unnamed>       Type&#58; ksocket         ID&#58; 0000000b   Num hooks&#58; 1
  Name&#58; netflow         Type&#58; netflow         ID&#58; 00000006   Num hooks&#58; 2
  Name&#58; ipfw            Type&#58; ipfw            ID&#58; 00000004   Num hooks&#58; 3
  Name&#58; bge1            Type&#58; ether           ID&#58; 00000003   Num hooks&#58; 0
  Name&#58; bge0            Type&#58; ether           ID&#58; 00000002   Num hooks&#58; 0
  Name&#58; fxp0            Type&#58; ether           ID&#58; 00000001   Num hooks&#58; 0

+ show netflow&#58;
  Name&#58; netflow         Type&#58; netflow         ID&#58; 00000006   Num hooks&#58; 2
  Local hook      Peer name       Peer type    Peer ID         Peer hook
  ----------      ---------       ---------    -------         ---------
  export          <unnamed>       ksocket      0000000b        inet/dgram/udp
  iface0          ipfw            ipfw         00000004        30
+ show ipfw&#58;
  Name&#58; ipfw            Type&#58; ipfw            ID&#58; 00000004   Num hooks&#58; 3
  Local hook      Peer name       Peer type    Peer ID         Peer hook
  ----------      ---------       ---------    -------         ---------
  61              nat             nat          0000000e        in
  60              nat             nat          0000000e        out
  30              netflow         netflow      00000006        iface0
+
tcpdump -i lo0 port 9996 пусто =(

UPD: Еще раз перезагрузил скрипт вроде начал считать...

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

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

hammer писал(а):С консолью mpd5 он не торопится рабоать... а вообще вручную примерно такая последовательность действий...
telnet $host $port -> логинемся -> iface ng* -> close -> exit. Все вроде просто надо подумать как теперь эт осделать... было сел писать кастыль на перле, но что то ен получилось и пока отложил в сторону.[/code]

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

#!/bin/sh
MHOST="адрес" # mpd host
MPORT="порт" # mpd telnet port
mpduser="пользователь"
mpdpass="пароль"
IP="$1"
test -z "$IP" && exit 1
#echo $IP
#echo `printf "$mpduser\r$mpdpass\rbundle\r" | /usr/bin/nc $MHOST $MPORT | grep 'B\-' | awk '&#123;print $1&#125;'`
for bundle in `printf "$mpduser\r$mpdpass\rbundle\r" | /usr/bin/nc $MHOST $MPORT | grep &#91;color=red&#93;'B-'&#91;/color&#93; | awk '&#123;print $1&#125;
do
if printf "$mpduser\r$mpdpass\rbundle $bundle \rshow iface\r" | /usr/bin/nc $MHOST $MPORT | grep $IP >/dev/null 2>&1
then
printf "$mpduser\r$mpdpass\rbundle $bundle\rclose\r\r" |/usr/bin/nc $MHOST $MPORT >/dev/null 2>&1
fi
done;
exit 0
в данном случае шаблон бандла описан по имени B
На его основе создаются динамические бандлы B-1, B-2 и т.д.
Соотв, чтоб пробежаться по открытым бандлам не надо искать Open, надо искать "ИМЯШАБЛОНА-цифра" или просто "ИМЯШАБЛОНА-"
Такой скрипт работает.

z0rg
Сообщения: 13
Зарегистрирован: Вт янв 20, 2009 16:23

Сообщение z0rg »

никак не могу разобраться по примерам.
У меня на серваке 3 интерфейса: два внутренних и один наружный. как быть в таком случае? надо просто экспортировать статистику в ЮТМ и пока ничего больше

user 1012
Сообщения: 10
Зарегистрирован: Вт дек 29, 2009 21:18

Сообщение user 1012 »

#!/bin/sh
MHOST="адрес" # mpd host
MPORT="порт" # mpd telnet port
mpduser="пользователь"
mpdpass="пароль"
IP="$1"
test -z "$IP" && exit 1
#echo $IP
#echo `printf "$mpduser\r$mpdpass\rbundle\r" | /usr/bin/nc $MHOST $MPORT | grep 'B\-' | awk '{print $1}'`
for bundle in `printf "$mpduser\r$mpdpass\rbundle\r" | /usr/bin/nc $MHOST $MPORT | grep 'B-' | awk '{print $1}
do
if printf "$mpduser\r$mpdpass\rbundle $bundle \rshow iface\r" | /usr/bin/nc $MHOST $MPORT | grep $IP >/dev/null 2>&1
then
printf "$mpduser\r$mpdpass\rbundle $bundle\rclose\r\r" |/usr/bin/nc $MHOST $MPORT >/dev/null 2>&1
fi
done;
exit 0
объясните пожалуйста, что делает выделеная строчка в выше указаном скрипте, и что это за color=red 'B-' /color>??

gil
Сообщения: 355
Зарегистрирован: Вт ноя 11, 2008 14:28

Сообщение gil »

for bundle in `printf "$mpduser\r$mpdpass\rbundle\r" | /usr/bin/nc $MHOST $MPORT | grep 'B-' | awk '{print $1}'`

перебирает все бандлы, которые берет с удаленного сервера (берет с помощью nc, выбирает строки, где есть "B-", потом выводит первую часть строки, что до любого пробельного символа)..

Ответить