Время выполнения инструкции: 10-20 минут на первичную проверку, далее - зависит от сложности проблемы |
Настройки на Carbon Billing
Что сделать в первую очередь
Проверьте что IP-адреса всех NAS-серверов заведены в билллинг
Биллинг принимает статистику только с известных ему IP-адресов. Поэтому в списке NAS-серверов интернет должны быть IP-адреса всех маршрутизаторов с которых отправляется Netflow, даже если это border или маршрутизаторы ядра.
Если Netflow приходит не с NAS, то просто добавьте в список NAS по инструкции Пользовательская схема или добавьте хук фаервола, например:
#!/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
Убедитесь что биллинг слушает порт 9996
При настройке передачи статистики по netflow указывайте 5-ю версию. Также статистику по netflow нужно передавать на локальный интерфейс.
Для начала убедитесь, что UDP-порт для приёма указан, по дефолту большая часть NAS-серверов использует 9996 порт.
Проверьте, что сервер действительно слушает на нём:
netstat -apn | grep 9996
NetFlow коллектор
На сервере по умолчанию включена возможность приема netflow трафика от NAS-устройств в локальной сети, поэтому включать отдельно этот сервис не нужно.
UDP-порт для приема
- По умолчанию сервис работает на порту 9996. Порт должен быть одинаковым на всех NAS-устройствах сети и на сервере Carbon Billing, поэтому если ваши устройства используют порт отличный от 9996, то укажите его ниже.
Прием NetFlow потоков с разных источников
- обязательно включите эту опцию если вам нужно принимать NetFlow с нескольких источников в локальной сети. Так же, чтобы прием был возможен, эти устройства должны быть перечислены в управлении NAS-устройствами.
Настройки на оборудовании
Почти любом оборудовании настройка netflow потока сводится к указанию адреса и порта netflow-коллектора, в данном случае Carbon Billing.
Порт Carbon Billing по умолчанию - 9996.
Mikrotik
Примечание: все (all) интерфейсы должны быть выбраны в Trafic Flow
По настройке netflow на mikrotik есть статья в официальной документации Mikrotik
Cisco
По настройке netflow на cisco есть отличная статья на opennet
D-link
Возможно потребуется отключение опции blat attack
Проверка на Carbon Billing
То, что netflow пакеты приходят на Carbon Billing можно проверить следующим образом. Заводим тестового абонента, который ходит в интернет через NAS.
Запускаем на tcpdump на Carbon Billing:
tcpdump -nvi any udp port 9996
После этого попробуйте сгенерировать пользователем какой-либо трафик, одновременно наблюдая за tcpdump'ом.
Спустя небольшой промежуток времени после завершения соединения у пользователя вы должны увидеть пришедшие от NAS netflow-пакеты.
Решение проблем
Внимание: Трафик биллинг учитывает и добавляет в расход по умолчанию только по абонентам с активными услугами трафика. Если услуга трафика неактивна - в расход трафик добавлен не будет. |
Если в расходе абонента трафик не появляется, проверьте следующее:
- В первую очередь, убедитесь что коллектор включен:
Команда
grep nf_collector.enabled\' /app/collector/cfg/config
Выводapp['nf_collector.enabled']='1'
- Сгенерируйте трафик на хосте абонента, просмотрите с помощью tcpdump с каких IP-адресов приходит netflow, убедитесь что по всем этим адреса в биллинге заведены NAS интернет.
- Если все адреса есть, проверьте что в netflow есть ненулевые данные в трафике, это удобней всего делать с помощью tshark, по-умолчанию он не установлен и находится в пакете wireshark, запустив снифер по IP NAS из учетной записи тестового абонента:
yum install -y wireshark tshark -nnVi eth0 port 9996 and host 10.20.30.40 -c 1 | egrep 'Packets|Octets' | sort | uniq
Вывод должен быть приблизительно таким:
Running as user "root" and group "root". This could be dangerous. Capturing on eth0 1 packet captured Octets: 101 Octets: 126 Octets: 1260 Packets: 11 Packets: 2 Packets: 6
Должны быть ненулевые Octets
Описание полей netflow можно посмотреть по ссылке https://www.plixer.com/support/netflow-v5/
- Если Octets ненулевые, убедитесь что трафик проходит IPTABLES по правилу для IP Вашего NAS:
iptables -nvL nas_clients | grep 9996
- Если Вы не нашли нужного IP маршрутизатора, убедитесь что он есть в списке оборудования интернет NAS - биллинг принимает netflow только с известных ему адресов маршрутизаторов
- Если если IP nas корректный, убедитесь что трафик приходит на IP-адрес биллинга назначенный физическому интерфейсу, bridge в которых есть физические интерфейсы, или bond-интерфейсам.
- Посмотрите список IP-адресов биллинга, на который он будет принимать netflow:
Команда
ip -4 a | grep inet | grep -vE '169.254|127.0.0.1|10.128.0.1' | sed 's/ inet*//g; s/\/.*//g'
Пример вывода10.90.185.127 10.0.0.1
- Посмотрите список IP-адресов биллинга, на который он будет принимать netflow:
- Если трафик проходит IPTABLES, повысьте уровень логирования коллектора netflow в настройках коллектора и посмотрите есть ли данные в логе nf_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 - там должны быть записи такого вида:
Mon Apr 13 15:20:05 2020 [8919] user_data_calc(393): id: 1410 ip=10.100.1.125
Где ID: 1410 - это ID учётной записи, а 10.100.1.125 - назначенный ей IP-адрес.
- Если трафик прошел фаервол, но /app/collector/var/log/nf_collector.log пустой, проверьте что коллектор настроен на обработку нужного типа Netflow.
Посмотреть тип Netflow, который приходит с NAS можно с помощью tshark, 10.20.30.40 - это IP NAS, укажите Ваш:tshark -nnVi any port 9996 and host 10.20.30.40 -c 1 2>&1 | grep -E 'Cisco NetFlow/IPFIX' -A1
Для разных типов Netflow должны быть следующие настойки сохранения сырой статистики
- Version: 5: ВЫКЛЮЧЕН "Использовать NAT в Netflow v9", ВЫКЛЮЧЕН "Обрабатывать дополнительные параметры IPFIX"
- Version: 9: ВКЛЮЧЕН "Использовать NAT в Netflow v9", ВЫКЛЮЧЕН "Обрабатывать дополнительные параметры IPFIX"
- Version: 10 (IPFIX): ВКЛЮЧЕН "Использовать NAT в Netflow v9" ВКЛЮЧЕН "Обрабатывать дополнительные параметры IPFIX"
- Если все записи только по адресу 0.0.0.0 - возможны два варианта:
- Проверьте что на тестовом хосте настроен именно тот IP что назначен в учетной записи
- Проверьте файл /app/collector/mnt/var/lib/collector/users.csv: есть ли там IP-адреса и какие.
- Несколько полезных команд которые могут попочь в диагностике этой проблемы:
По каким IP приходила информация в nf_collector среди последних 100000 строк
tail -n 100000 /app/collector/var/log/nf_collector.log | grep 'ip=' | awk '{print $10}' | sort | uniq
Посмотреть есть ли вообще что-то в users.csv и что именноll /app/collector/mnt/var/lib/collector/users.csv && cat /app/collector/mnt/var/lib/collector/users.csv
Посмотреть какие пароли к API коллектора указаны в конфигурационных файлахgrep collector.psw /app/asr_billing/cfg/config /app/collector/cfg/config
Убедиться что пароли совпадают: вывод должен быть "1"grep $(grep collector.psw /app/asr_billing/cfg/config | sed "s/.*=//g; s/'//g") /app/collector/cfg/config -c
- Если данные отправляются и с IP в учетке и на хосте все хорошо, проверьте что запущен traf_reporter и он отсылает данные в биллинг изучив его лог
- Если все прочие проверки прошли, убедитесь что timestamp в netflow в настоящем времени. Например, ниже приведён вывод снифера с сожержимым пакета, по которому видно что NAS присылает информацию по трафику в прошлом времени:
tshark -nnVi eth0 port 9996 -d udp.port=9996,cflow -c 1 -w testnf9.pcp | egrep 'Cisco NetFlow/IPFIX' -A10 tshark: WARNING: -d requires "==" instead of "=". Option will be treated as "udp.port==9996,cflow" Running as user "root" and group "root". This could be dangerous. Capturing on eth0 1 packet captured Cisco NetFlow/IPFIX Version: 9 Count: 20 SysUptime: 689909010 Timestamp: Jan 16, 1970 04:01:51.000000000 +07 CurrentSecs: 1285311 FlowSequence: 6623195 SourceId: 0 FlowSet 1 FlowSet Id: (Data) (256) FlowSet Length: 1384
- Если трафик дошел до traf_reporter, в netfow корректное время, проверьте попал ли трафик в БД /var/db/buff_traf.gdb
sqlexec /var/db/buff_traf.gdb "select count(*) from traffic where user_ip=174325762"
Узнать IP в десятичном формате можно в основной БД: sqlexec "select uf_ip2string(ip),ip from users where abonent_id=1234"
Где 1234 - ID абонента (можно посмотреть в адресной строке браузера, открыв карточку абонента)
- Если в buff_traf.gdb есть данные по трафику абонента, проверьте нет ли ошибок обработки:
sqlexec /var/db/buff_traf.gdb "select count(*) from traffic where user_ip=174325762 and error_code_id>=1"
Ошибки обработки трафика описаны в статье "Описание структуры базы buff_traf.gdb" под заголовком "Коды ошибок с описанием"
Что делать если ни чего не помогло
В первую очередь, попробуйте еще раз пройти по все шагам. Точно выполняйте инструкции на каждом пункте это важно!
Если указанные в статье действия не помогли, включите уровень логирования коллектора INFO и выполните скрипт диагностики:
/app/base/usr/local/bin/billing_check.sh &> billing_check.log
и приложите его к заявке на портале HelpDesk