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

Skip to end of metadata
Go to start of metadata
Время выполнения инструкции: 10-20 минут на первичную проверку, далее - зависит от сложности проблемы

Настройка

В большинстве случаев, для сохранения статистики достаточно стандартных настроек NAS и биллинга. Проверьте настройки:

  1. Должны быть включены опции collector:
    • Включить сбор статистики - служба сбора статистики.
    • Отправлять агрегированную статистику на Биллинг - в биллинге появится возможность подсчитывать объём трафика.
    • Включить bstatd для детальной статистики (снято с поддержки) или Сохранять сырую статистику в формате nfcapd для анализа nfsen - для сохраниния детализации по посещённым ресурсам.
  2. Создайте NAS
    Биллинг принимает статистику только c IP-адресов внесённых в фаервол. Можно добавить адреса несколькими способами:
    • Адреса автоматически добавляются при создании NAS-серверов интернет.
    • Можно добавить "пустой" NAS по инструкции Пользовательская схема, укажите нужный IP.
    • Добавьте разрешения в фаервол через в ручную с помощью хука
      #!/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
      
  3. Настройте netflow на NAS
    В каждой cтандартной схеме описана настройка netflow. Укажите IP адрес биллинга и порт(по умолчанию 9996). Загрузите конфигурацию на оборудование. Дополнительно можете ознакомиться:

Проверка netflow-потоков

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

Если в расходе абонента трафик не появляется, проверьте следующее:

  1. В первую очередь, убедитесь что коллектор включен:
    Команда
    grep nf_collector.enabled\' /app/collector/cfg/config
    Вывод
    app['nf_collector.enabled']='1'

    В примере - коллеткор включен.
    Если будет "0", значит коллектор выключен. Включите его в настройках коллектора, опция "Включить сбор статистики"

  1. Сгенерируйте трафик на хосте абонента. Просмотрите с помощью tcpdump с каких IP-адресов приходит netflow.
    • NAS может отсылать IP пакеты с разных локальных IP адресов. Проверьте, что netflow поток приходит с верного адреса.
      Команда для проверки
      tcpdump -pnni any udp port 9996 -c 100 | cut -d ' ' -f 3 | sort -u
      
      Результат выполнения команды
      ...................
      10.0.0.10.9996
      10.0.0.20.9996
      

      В примере на биллинг netflow поток приходит с двух NAS: 10.0.0.10.9996 и 10.0.0.20.9996 порт источника 9996.

    • Убедитесь, что по всем этим адреса в биллинге заведены NAS интернет - биллинг принимает netflow только с известных ему адресов маршрутизаторов.
  2. Если IP NAS корректный, проверьте IP адреса на сервере биллинга. Адрес назначения netflow потока должен быть на одном из интерфейсов.
    • В предидущем примере поток пришел на адрес:
      10.0.0.1
      
    • Посмотрите список 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
      
  3. Убедитесь что биллинг слушает порт netflow(по умолчанию 9996).
    Команда
    netstat -apn | grep 9996
    
    Вывод
    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 
    
  4. Если все адреса есть и порт доступен, проверьте что в netflow есть ненулевые данные в трафике. Это удобней всего делать с помощью tshark.
    Установите wireshark
    yum install -y wireshark
    

    Аргументы команды tshar:

    i eth0 - интерфейс биллинга, на который приходит netflow
    port 9996 - порт netflow
    host 10.0.0.10 - IP адрес маршрутизатора
    
    Запустите tshark
    tshark -nnVi eth0 port 9996 and host 10.0.0.10 -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

  5. Проверьте, что был захвачен как входящий, так и исходящий трафик.
    tshark -nnVi eth0 port 9996 and host 10.0.0.10 -c 100 | grep -E 'Addr|Octets'
    

    В примере вывода команды видно, что от адреса 91.211.93.128 к адресу 10.0.0.194 передано 349 Octets(байт).

    SrcAddr: 91.211.93.128 (91.211.93.128)
    DstAddr: 10.0.0.194 (10.0.0.194)
    Octets: 349
    
  6. Если Octets ненулевые, убедитесь что трафик проходит IPTABLES по правилу для IP Вашего NAS:
    iptables -nvL nas_clients | grep 9996
    
  7. Если трафик проходит IPTABLES, повысьте уровень логирования коллектора netflow до уровня DEBUG в настройках коллектора и посмотрите есть ли данные в логе nf_collector, убедитесь что он отсылает их в /app/collector/var/dump и /app/collector/var/stat/raw
  8. Если в /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-адрес.

  9. Если трафик прошел фаервол, но /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"
  10. Если все записи только по адресу 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
      
  11. Если данные отправляются и с IP в учетке и на хосте все хорошо, проверьте что запущен traf_reporter и он отсылает данные в биллинг по логу:
    /app/collector/var/log/reporter.log
    
  12. Если все прочие проверки прошли, убедитесь что 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
    
  13. Если трафик дошел до 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 абонента (можно посмотреть в адресной строке браузера, открыв карточку абонента)

  14. Если в 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

Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.