Страница 1 из 1

Проблема: ng_ipacct+racoon+gif

Добавлено: 2011-03-21 12:09:17
sm4sh
Всем здравствуйте. Ситуация такая: для связи с удаленными филиалами организованы защищенные каналы посредством gif и ipsec-tools (racoon). После этого появилась задача считать трафик на gif-интерфейсах, так как в некоторых точках инет небезлимитный. Мой выбор пал на ng_ipacct+mysql+ipfw. Вот с этим и возникла небольшая проблемка. Исходящий трафик считается нормально, а входящий трафик не весь попадает в статистику. Насколько я знаю, после срабатывания tee, пакет должен приниматься. А в итоге некоторые пакеты проходят "мимо" tee и попадают на нижние правила. И если не добавить еще одно правило в ipfw для "отброшенных" пакетов, то, например, DNS-запросы на разных концах туннеля не работают... В общем, прошу помощи :)

Конфиги такие (FreeBSD 8.1):

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

/etc/rc.firewall
	${fwcmd} add allow ipencap from me to RemoteRealIP
	${fwcmd} add allow ipencap from RemoteRealIP to me
	${fwcmd} add tee 4001 ip from 192.168.0.0/16 to 192.168.0.0/16 in via gif0
	${fwcmd} add tee 4002 ip from 192.168.0.0/16 to 192.168.0.0/16 out via gif0
	${fwcmd} add allow all from 192.168.0.0/16 to 192.168.0.0/16 via gif0

/usr/local/etc/ng_ipacct.conf
	#ng_ipacct_enable="YES"
	ng_ipacct_modules_load="YES"
	ng_ipacct_modules_list="netgraph ng_ether ng_cisco ng_socket ng_tee ng_ipacct"
	ng_ipacct_interfaces="gif0"
	# GIF 0
	ng_ipacct_gif0_dlt="RAW"
	ng_ipacct_gif0_start='
			mkpeer ipacct dummy dummy
			name .:dummy %%iface%%_ip_acct

			mkpeer %%iface%%_ip_acct: ksocket  %%iface%%_in inet/raw/divert
			name %%iface%%_ip_acct:%%iface%%_in  ks_%%iface%%_in
			msg ks_%%iface%%_in:  bind inet/0.0.0.0:4001

			mkpeer %%iface%%_ip_acct: ksocket %%iface%%_out inet/raw/divert
			name %%iface%%_ip_acct:%%iface%%_out ks_%%iface%%_out
			msg ks_%%iface%%_out: bind inet/0.0.0.0:4002

			rmhook .:dummy
	'
	ng_ipacct_gif0_stop='
			shutdown %%iface%%_ip_acct:
	'
	ng_ipacct_gif0_checkpoint_script="/root/ng_ipacct.sh gif0"
	ng_ipacct_gif0_threshold="15000"        # '5000' by default
	ng_ipacct_gif0_verbose="yes"            # 'yes' by default
	ng_ipacct_gif0_savetime="yes"           # 'no' by default

/etc/sysctl.conf
	sysctl net.inet.ipsec.filtertunnel=1

/etc/rc.conf
	cloned_interfaces="gif0"
	gif_interfaces="gif0"
	ifconfig_gif0="inet MyLocalIP RemoteLocalIP netmask 255.255.255.255"
	gifconfig_gif0="MyRealIP RemoteRealIP"
	stat_routes="branch1"
	route_branch1="-net RemoteLocalNetwork/24 -iface gif0"
Если еще какие конфиги нужны, пишите - выложу.

Re: Проблема: ng_ipacct+racoon+gif

Добавлено: 2011-03-30 21:34:58
vadim64
а как проводили вот эти вот наблюдения какие пакеты считаются а какие нет?

Re: Проблема: ng_ipacct+racoon+gif

Добавлено: 2011-04-06 8:05:02
sm4sh
vadim64 писал(а):а как проводили вот эти вот наблюдения какие пакеты считаются а какие нет?
Настроил по такой же схеме сбор статистики на удаленном сервере и сравнил размеры трафика за день. Выполнил один и тот же запрос на обоих серверах. И если на одном сервере сумма была на десятки мегабайт, то на втором - сотни килобайт. Получается, что исходящий трафик считается без проблем, а входящий (дешифрованный) - практически не проходит через ipfw.

Вообще, когда настроил, трафик через gif-интрефейсы вообще не считался. Где-то в документации нашел, что нужно включить фильтрацию туннеля: sysctl net.inet.ipsec.filtertunnel=1. Включил, пришлось добавить правила для ipencap. После этого все закрутилось.

Нашел еще один косяк. Некоторый трафик не попадает в правила tee (или возвращается) и продолжает спускаться по правилам дальше. Например, туда совсем не попадают dns-запросы. Как вообще работает этот tee - загадка. В одном месте читаю, что посылаются копии пакетов, а сами пакеты должны обрабатываться следующими правилами. В другом - что пакет, попавший на tee, автоматически принимается. Где правда?

Re: Проблема: ng_ipacct+racoon+gif

Добавлено: 2011-04-06 12:48:01
rmn
а если заюзать другой способ настройки ng_ipacct?

ng_ipacct.conf

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

ng_ipacct_interfaces="igb0"
ng_ipacct_modules_load="YES"
ng_ipacct_modules_list="ng_ipacct"

ng_ipacct_default_ether_start='
        mkpeer %%iface%%: tee lower right
        name %%iface%%:lower %%iface%%_tee
        connect %%iface%%: lower upper left

        mkpeer %%iface%%_tee: ipacct right2left %%iface%%_in
        name %%iface%%_tee:right2left %%iface%%_ip_acct
        connect %%iface%%_tee: %%iface%%_ip_acct: left2right %%iface%%_out
'

ng_ipacct_default_ether_stop='
        shutdown %%iface%%_ip_acct:
        shutdown %%iface%%_tee:
        shutdown %%iface%%:
'

ng_ipacct_bpf_ether_start='
        mkpeer %%iface%%: tee lower right
        name %%iface%%:lower %%iface%%_tee
        connect %%iface%%: lower upper left

        mkpeer %%iface%%_tee: bpf right2left %%iface%%_in
        name %%iface%%_tee:right2left %%iface%%_bpf
        connect %%iface%%_tee: right2left left2right %%iface%%_out

        mkpeer %%iface%%_bpf: ipacct %%iface%%_match_in %%iface%%_in
        name %%iface%%_bpf:%%iface%%_match_in %%iface%%_ip_acct
        connect %%iface%%_bpf: %%iface%%_ip_acct: %%iface%%_match_out %%iface%%_out
'

ng_ipacct_bpf_ether_stop='
        shutdown %%iface%%_ip_acct:
        shutdown %%iface%%_bpf:
        shutdown %%iface%%_tee:
        shutdown %%iface%%:
'

ng_ipacct_igb0_dlt="EN10MB"      # required line; see ipacctctl(8)
ng_ipacct_igb0_threshold="400000" # '5000' by default
ng_ipacct_igb0_verbose="yes"     # 'yes' by default
ng_ipacct_igb0_savetime="yes"     # 'yes' by default
ng_ipacct_igb0_start=${ng_ipacct_default_ether_start}
ng_ipacct_igb0_stop=${ng_ipacct_default_ether_stop}

ng_ipacct_igb0_checkpoint_script="/usr/local/freebit/ipacct.php igb0"
в ipfw ничего никуда заворачивать не нужно

Re: Проблема: ng_ipacct+racoon+gif

Добавлено: 2011-04-07 3:11:26
sm4sh
Этот конфиг работает только для физических интерфейсов. Для gif я использовал пример №3 из ng_ipacct.conf.sample.
А может все-же дело не в ng_ipacct, а в шифровании? На выходных попробую его отключить и проверить.