Настройка и проверка netflow-потоков

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (50)

просмотр истории страницы
{tip}*Время выполнения инструкции*: 10-20 минут на первичную проверку, далее - зависит от сложности проблемы{tip}

h2. NetFlow коллектор

На сервере по умолчанию включена возможность приема netflow трафика  от NAS-устройств в локальной сети, поэтому включать отдельно этот сервис  не нужно.
*UDP-порт для приема*
\\
\- По умолчанию сервис работает на порту 9996.  Порт должен быть одинаковым на всех NAS-устройствах сети и на сервере  Carbon Billing, поэтому если ваши устройства используют порт отличный от  9996, то укажите его ниже.
*Прием NetFlow потоков с разных источников*
\\
\- обязательно включите  эту опцию если вам нужно принимать NetFlow с нескольких источников в  локальной сети. Так же, чтобы прием был возможен, эти устройства должны  быть перечислены в управлении NAS-устройствами.
h1. Настройка

В большинстве случаев, для сохранения статистики достаточно стандартных настроек NAS и биллинга. Проверьте настройки:
# Должны быть включены опции [collector|Описание работы служб сбора статистики]:
#* *Включить сбор статистики* - служба сбора статистики.
#* *Отправлять агрегированную статистику на Биллинг* - в биллинге появится возможность подсчитывать объём трафика.
#* *Включить bstatd для детальной статистики (снято с поддержки)* или *Сохранять сырую статистику в формате nfcapd для анализа nfsen* - для сохраниния детализации по посещённым ресурсам.
# Создайте NAS
Биллинг принимает статистику только c IP-адресов внесённых в фаервол. Можно добавить адреса несколькими способами:
#* Адреса автоматически добавляются при создании [NAS-серверов интернет|CarbonBilling:Интеграция оборудования интернет].
#* Можно добавить "пустой" NAS по инструкции [CarbonBilling:Пользовательская схема], укажите нужный IP.
#* Добавьте разрешения в фаервол через в ручную с помощью [хука|Дополнительные настройки. hooks. Хуки. Свои правила в firewall]
{code}
#!/bin/bash
if [ "$1" = "/etc/init.d/firewall" -a "$2" = start ]; then
iptables -I nas_clients -s 10.0.1.7/32 -p udp -m udp --dport 9996 -j ACCEPT
iptables -I nas_clients -s 10.0.2.200/32 -p udp -m udp --dport 9996 -j ACCEPT
fi
exit 0
{code}
# Настройте netflow на NAS
В каждой [cтандартной схеме|Стандартные схемы] описана настройка netflow. Укажите IP адрес биллинга и порт(по умолчанию 9996). Загрузите конфигурацию на оборудование. Дополнительно можете ознакомиться:
#* Mikrotik
[Cтатья в официальной документации|https://wiki.mikrotik.com/wiki/Manual:IP/Traffic_Flow].
#* Cisco
Стандартная схема Cisco-ISG - IPoE и PPPoE написана для версии IOS 12. Настройка на версии IOS 15 и выше описана в [заметках|Заметки по схеме. Netflow Cisco].

h1. Проверка netflow-потоков
{note}
Биллинг учитывает и добавляет в расход трафик только по абонентам с *активными* услугами трафика. Исключение, опиция: "Деактивировать, если текущий баланс превысил лимит".
{note}

Если в [расходе|CarbonBilling:Счетчики услуг. Вкладка "Расход".] абонента трафик не появляется, проверьте следующее:
# В первую очередь, убедитесь что коллектор включен:
{code:title=Команда}grep nf_collector.enabled\' /app/collector/cfg/config{code}
{code:title=Вывод}app['nf_collector.enabled']='1'{code}
В примере - коллеткор включен.
Если будет "0", значит коллектор выключен. Включите его [в настройках коллектора|https://docs.carbonsoft.ru/pages/viewpage.action?pageId=126484488#Описаниеработыслужбсборастатистики-Настройкасборастатистики], опция "*Включить сбор статистики*"



h2. Настройки на Carbon Billing

При настройке передачи статистики по netflow указывайте *5-ю версию*. Также статистику по netflow нужно передавать на локальный интерфейс.

Для начала убедитесь, что UDP-порт для приёма указан, по дефолту большая часть NAS-серверов использует 9996 порт.

Проверьте, что сервер действительно слушает на нём:


# Сгенерируйте трафик на хосте абонента. Просмотрите с помощью *tcpdump* с каких IP-адресов приходит netflow.
#* NAS может отсылать IP пакеты с разных локальных IP адресов. Проверьте, что netflow поток приходит с верного адреса.
{code:title=Команда для проверки}
tcpdump -pnni any udp port 9996 -c 100 2>/dev/null| cut -d ' ' -f 3 | sort -u
{code}
{code:title=Результат выполнения команды}
...................
10.0.0.10.9996
10.0.0.20.9996
{code}
В примере на биллинг netflow поток приходит с двух NAS: 10.0.0.10.9996 и 10.0.0.20.9996 порт источника 9996.
#* Убедитесь, что по всем этим адреса в биллинге заведены [NAS интернет|CarbonBilling:Интеграция оборудования интернет] - биллинг принимает netflow только с известных ему адресов маршрутизаторов.
# Если IP NAS корректный, проверьте IP адреса на сервере биллинга. Адрес назначения netflow потока должен быть на одном из интерфейсов.
#* В предидущем примере поток пришел на адрес:
{code}
10.0.0.1
{code}
#* Посмотрите список IP-адресов биллинга, на который он будет принимать netflow:
{code:title=Команда}
ip -4 a | grep inet | grep -vE '169.254|127.0.0.1|10.128.0.1' | sed 's/ inet*//g; s/\/.*//g'
{code}
{code:title=Пример вывода}
10.90.185.127
10.0.0.1
{code}
# Убедитесь что биллинг слушает порт netflow(по умолчанию 9996).
{code:title=Команда}
netstat -apn | grep 9996
{code}
{code:title=Вывод}
h2. Настройки на оборудовании

Почти любом оборудовании настройка netflow потока сводится к указанию адреса и порта netflow-коллектора, в данном случае Carbon Billing.

Порт Carbon Billing по умолчанию - 9996.


h3. Mikrotik

Примечание: все (all) интерфейсы должны быть выбраны в Trafic Flow

По настройке netflow на mikrotik есть [статья в официальной документации|http://www.mikrotik.com/testdocs/ros/2.9/ip/traffic-flow.php] Mikrotik

h3. Cisco

По настройке netflow на cisco есть [отличная статья на opennet|http://www.opennet.ru/base/cisco/netflow_nat.txt.html]










h3. Redback

\#TODO

h3. D-link

Возможно потребуется отключение опции blat attack



h2. Проверка на Carbon Billing

То, что netflow пакеты приходят на Carbon Billing можно проверить следующим образом. Заводим тестового абонента, который ходит в интернет через NAS.

Запускаем на tcpdump на Carbon Billing:

udp 0 0 127.0.0.1:56761 127.0.0.1:9996 ESTABLISHED 6716/sflowtool
udp 0 0 0.0.0.0:9996 0.0.0.0:* 6640/nfcapd
{code}
tcpdump -nvi any udp port 9996
# Если все адреса есть и порт доступен, проверьте что в netflow есть ненулевые данные в трафике. Это удобней всего делать с помощью *tshark*.
{code:title=Установите wireshark}
yum install -y wireshark
{code}
После этого попробуйте сгенерировать пользователем какой-либо трафик, одновременно наблюдая за tcpdump'ом.
Аргументы команды tshar:
{code}
Спустя небольшой промежуток времени после завершения соединения у пользователя вы должны увидеть пришедшие от NAS netflow-пакеты.
i eth0 - интерфейс биллинга, на который приходит netflow
port 9996 - порт netflow
host 10.0.0.10 - IP адрес маршрутизатора
{code}
h3. Решение проблем
{code:title=Запустите tshark}
tshark -nnVi eth0 port 9996 and host 10.0.0.10 -c 1 | egrep 'Packets|Octets' | sort | uniq
{code}
Если в [расходе|CarbonBilling:Счетчики услуг. Вкладка "Расход".] абонента трафик не появляется, проверьте следующее:
# Сгенерируйте трафик на хосте абонента, просмотрите с помощью tcpdump с каких IP-адресов приходит netflow, убедитесь что по всем этим адреса в биллинге заведены [NAS интернет|CarbonBilling:Интеграция оборудования интернет].
# Если все адреса есть, проверьте что в netflow есть ненулевые данные в трафике, это удобней всего делать с помощью *tshark*, по-умолчанию он не установлен и находится в пакете *wireshark*, запустив снифер по IP NAS из учетной записи тестового абонента:
{code}yum install -y wireshark
tshark -nnVi eth0 port 9996 and host 10.20.30.40 -c 1 | egrep 'Packets|Octets' | sort | uniq{code}
Вывод должен быть приблизительно таким:
{code}
{code}Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
1 packet captured
Packets: 11
Packets: 2
Packets: 6{code} 6
{code}
Должны быть ненулевые *Octets*
{info}Описание полей netflow можно посмотреть по ссылке [https://www.plixer.com/support/netflow-v5/]
# Проверьте, что был захвачен как входящий, так и исходящий трафик.
{code}
tshark -nnVi eth0 port 9996 and host 10.0.0.10 -c 100 | grep -E 'Addr|Octets'
{info} {code}
В примере вывода команды видно, что от адреса 91.211.93.128 к адресу 10.0.0.194 передано 349 Octets(байт).
{code}
SrcAddr: 91.211.93.128 (91.211.93.128)
DstAddr: 10.0.0.194 (10.0.0.194)
Octets: 349
{code}
# Если *Octets* ненулевые, убедитесь что трафик проходит IPTABLES по правилу для IP Вашего NAS:
{code}iptables -nvL nas_clients | grep 9996{code}
# Если если IP nas корректный, убедитесь что трафик приходит на IP-адрес биллинга назначенный физическому интерфейсу, bridge в которых есть физические интерфейсы, или bond-интерфейсам.
{code}
iptables -nvL nas_clients | grep 9996
{code}
# Если трафик проходит IPTABLES, [повысьте уровень логирования коллектора netflow|CarbonBilling:Описание работы служб сбора статистики] до уровня DEBUG в настройках коллектора и посмотрите есть ли данные в логе [nf_collector|CarbonBilling:Collector], убедитесь что он отсылает их в /app/collector/var/dump и /app/collector/var/stat/raw
# Если данные отправляются, проверьте что запущен [traf_reporter|CarbonBilling:Collector] и он отсылает данные в биллинг изучив его лог
# Если в /app/collector/var/dump файлов нет, а в /app/collector/var/stat/raw что-то есть, проверьте лог /app/collector/var/log/nf_collector.log - там должны быть записи такого вида:
{code}Mon Apr 13 15:20:05 2020 [8919] user_data_calc(393): id: 1410 ip=10.100.1.125{code}
Где ID: 1410 - это ID [учётной записи|CarbonBilling:Учетная запись. Создание и изменение.], а 10.100.1.125 - назначенный ей IP-адрес.
# Если трафик прошел фаервол, но /app/collector/var/log/nf_collector.log пустой, проверьте что коллектор настроен на обработку нужного типа Netflow.
Посмотреть тип Netflow, который приходит с NAS можно с помощью tshark, 10.20.30.40 - это IP NAS, укажите Ваш:
{code}tshark -nnVi any port 9996 and host 10.20.30.40 -c 1 2>&1 | grep -E 'Cisco NetFlow/IPFIX' -A1{code}
Для разных типов Netflow должны быть следующие [настойки сохранения сырой статистики|https://docs.carbonsoft.ru/pages/viewpage.action?pageId=126484488#Описаниеработыслужбсборастатистики-Настойкисохранениясыройстатистики]
#* *Version: 5*: {color:red}Отключен{color} "Использовать NAT в Netflow v9", {color:red}Отключен{color} "Обрабатывать дополнительные параметры IPFIX"
#* *Version: 9*: {color:green}Включен{color} "Использовать NAT в Netflow v9", {color:red}Отключен{color} "Обрабатывать дополнительные параметры IPFIX"
#* *Version: 10 (IPFIX)*: {color:green}Включен{color} "Использовать NAT в Netflow v9" {color:green}Включен{color} "Обрабатывать дополнительные параметры IPFIX"
# Если все записи только по адресу 0.0.0.0 - возможны два варианта:
#* Проверьте что на тестовом хосте настроен именно тот IP что назначен в учетной записи
#* Проверьте файл */app/collector/mnt/var/lib/collector/users.csv*: есть ли там IP-адреса и какие.
Несколько полезных команд которые могут попочь в диагностике этой проблемы:
{code:title=По каким IP приходила информация в nf_collector среди последних 100000 строк}
tail -n 100000 /app/collector/var/log/nf_collector.log | grep 'ip=' | awk '{print $10}' | sort | uniq
{code}
{code:title=Посмотреть есть ли вообще что-то в users.csv и что именно}
ll /app/collector/mnt/var/lib/collector/users.csv && cat /app/collector/mnt/var/lib/collector/users.csv
{code}
{code:title=Посмотреть какие пароли к API коллектора указаны в конфигурационных файлах}
grep collector.psw /app/asr_billing/cfg/config /app/collector/cfg/config
{code}
{code:title=Убедиться что пароли совпадают: вывод должен быть "1"}
grep $(grep collector.psw /app/asr_billing/cfg/config | sed "s/.*=//g; s/'//g") /app/collector/cfg/config -c
{code}
# Если данные отправляются и с IP в учетке и на хосте все хорошо, проверьте что запущен [traf_reporter|CarbonBilling:Collector] и он отсылает данные в биллинг по логу:
{code}
/app/collector/var/log/reporter.log
{code}
# Если все прочие проверки прошли, убедитесь что timestamp в netflow в настоящем времени. Например, ниже приведён вывод снифера с сожержимым пакета, по которому видно что NAS присылает информацию по трафику в прошлом времени:
{code}tshark -nnVi eth0 port 9996 -d udp.port=9996,cflow -c 1 -w testnf9.pcp | egrep 'Cisco NetFlow/IPFIX' -A10
{code}sqlexec /var/db/buff_traf.gdb "select count(*) from traffic where user_ip=174325762"{code}
{info}Узнать IP в десятичном формате можно в основной БД:
{code}sqlexec "select uf_ip2string(ip),ip from users where abonent_id=1234"{code}
{code}
sqlexec "select uf_ip2string(ip),ip from users where abonent_id=1234"
{code}
Где 1234 - ID абонента (можно посмотреть в адресной строке браузера, открыв карточку абонента){info}
{info}
# Если в *buff_traf.gdb* есть данные по трафику абонента, проверьте нет ли ошибок обработки:
{code}
{code}sqlexec /var/db/buff_traf.gdb "select count(*) from traffic where user_ip=174325762 and error_code_id>=1"{code}
{code}
Ошибки обработки трафика описаны в статье "[CarbonBilling:Описание структуры базы buff_traf.gdb]" под заголовком "*Коды ошибок с описанием*"

h43. Что делать если ни чего не помогло

В первую очередь, попробуйте еще раз пройти по все шагам. Точно выполняйте инструкции на каждом пункте это важно!
Если указанные в статье действия не помогли, включите [уровень логирования коллектора INFO|CarbonBilling:Описание работы служб сбора статистики] и выполните скрипт диагностики:

{code}/app/base/usr/local/bin/billing_check.sh &> billing_check.log{code}
{code}
/app/base/usr/local/bin/billing_check.sh &> billing_check.log
{code}

и приложите его к заявке на портале HelpDesk