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

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

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

просмотр истории страницы


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


h2. Что сделать в первую очередь

h3. Проверьте что IP-адреса всех NAS-серверов заведены в билллинг

Биллинг принимает статистику только с известных ему IP-адресов. Поэтому в [списке NAS-серверов интернет|CarbonBilling:Интеграция с оборудованием] должны быть IP-адреса всех маршрутизаторов с которых отправляется Netflow, даже если это _border_ или _маршрутизаторы ядра_.

Если Netflow приходит не с NAS, то просто добавьте в список NAS по инструкции [CarbonBilling:Пользовательская схема] или добавьте хук фаервола, например:
В большинстве случаев, для сохранения статистики достаточно стандартных настроек 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].

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

При настройке передачи статистики по netflow указывайте *5-ю версию*. Также статистику по netflow нужно передавать на локальный интерфейс.
Если в [расходе|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#Описаниеработыслужбсборастатистики-Настройкасборастатистики], опция "*Включить сбор статистики*"

Для начала убедитесь, что 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 трафика  от NAS-устройств в локальной сети, поэтому включать отдельно этот сервис  не нужно.
*UDP-порт для приема*
\\
\- По умолчанию сервис работает на порту 9996.  Порт должен быть одинаковым на всех NAS-устройствах сети и на сервере  Carbon Billing, поэтому если ваши устройства используют порт отличный от  9996, то укажите его ниже.
*Прием NetFlow потоков с разных источников*
\\
\- обязательно включите  эту опцию если вам нужно принимать NetFlow с нескольких источников в  локальной сети. Так же, чтобы прием был возможен, эти устройства должны  быть перечислены в управлении NAS-устройствами.

h1. Настройки на оборудовании

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

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


h2. Mikrotik

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

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

h2. Cisco

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

h2. D-link

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



h1. Проверка на 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}
h2. Решение проблем
{code:title=Запустите tshark}
tshark -nnVi eth0 port 9996 and host 10.0.0.10 -c 1 | egrep 'Packets|Octets' | sort | uniq
{info} {code}
Внимание: Трафик биллинг учитывает и добавляет в расход по умолчанию только по абонентам с *активными* услугами трафика. Если услуга трафика неактивна - в расход трафик добавлен не будет.
{info}

Если в [расходе|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#Описаниеработыслужбсборастатистики-Настройкасборастатистики], опция "*Агрегировать статистику*"
# Сгенерируйте трафик на хосте абонента, просмотрите с помощью 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/]{info} \\
# Проверьте, что был захвачен как входящий, так и исходящий трафик.
{code}
tshark -nnVi eth0 port 9996 and host 10.0.0.10 -c 100 | grep -E 'Addr|Octets'
{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|CarbonBilling:Интеграция с оборудованием] - биллинг принимает netflow только с известных ему адресов маршрутизаторов \\ \\
# Если если IP nas корректный, убедитесь что трафик приходит на IP-адрес биллинга назначенный физическому интерфейсу, bridge в которых есть физические интерфейсы, или bond-интерфейсам.
#* Посмотрите список 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}\\ \\
{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 \\ \\
# Если в /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} {color:red}Отключен{color} "Использовать NAT в Netflow v9", {color:red}ВЫКЛЮЧЕН{color} {color:red}Отключен{color} "Обрабатывать дополнительные параметры IPFIX"
#* *Version: 9*: {color:green}ВКЛЮЧЕН{color} {color:green}Включен{color} "Использовать NAT в Netflow v9", {color:red}ВЫКЛЮЧЕН{color} {color:red}Отключен{color} "Обрабатывать дополнительные параметры IPFIX"
#* *Version: 10 (IPFIX)*: {color:green}ВКЛЮЧЕН{color} "Использовать NAT в Netflow v9" {color:green}ВКЛЮЧЕН{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}
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}
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}
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} \\
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
FlowSet Id: (Data) (256)
FlowSet Length: 1384
{code} \\
# Если трафик дошел до [traf_reporter|CarbonBilling:Collector], в netfow корректное время, проверьте попал ли трафик в БД */var/db/buff_traf.gdb*
{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]" под заголовком "*Коды ошибок с описанием*"

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

В первую очередь, попробуйте еще раз пройти по все шагам. Точно выполняйте инструкции на каждом пункте это важно!
Если указанные в статье действия не помогли, включите [уровень логирования коллектора 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