Skip to content

truman369/inkotools-api

Repository files navigation

Publish Status Latest Version

Inko Tools

Скрипты для упрощения работы с коммутаторами в сети ИНКО

Внимание! Проект находится в стадии разработки. Возможны изменения, ломающие обратную совместимость. Данное руководство может иметь незавершенные разделы или отсутствующие описания функций. Для актуальной информации рекомендуется смотреть непосредственно текущий код.

Возможные варианты работы:

  • Выполнение команд через утилиту CLI
  • Выполнение команд через сервер API
  • Использование в собственных скриптах через импорт

Установка

Ручная установка из репозитория

Для использования cli достаточно склонировать репозиторий и установить зависимости из requirements.txt

Если при установке зависимости easysnmp возникает ошибка, возможно, в системе не установлена библиотека net-snmp. Подробнее в руководстве easysnmp.

Если при запуске скриптов возникает ошибка привилегий, возможно, значение параметра ядра net.ipv4.ping_group_range равно 1 0, нужно исправить его на 0 2147483647. В разных дистрибутивах используются разные значения по умолчанию. Подробнее в документации icmplib.

Для запуска api потребуется ASGI сервер, например, uvicorn

Запуск в контейнерах docker

Для удобства запуска api в репозитории есть Dockerfile для сборки образа. Также можно использовать готовые образы, которые публикуются автоматически при изменениях в репозитории.

В зависимости от настроек хостовой системы может потребоваться дополнительная настройка параметра ядра net.ipv4.ping_group_range для контейнера.

Для корректной работы arp необходимо запускать контейнер в режиме host.

Пример файла docker-compose.yml:

---
version: "3.7"
services:
  inkotools-api:
    image: truman369/inkotools-api:latest
    container_name: inkotools-api
    hostname: inkotools-api
    init: true
    environment:
      TZ: Europe/Moscow
      # PROXYCHAINS_ENABLED: "yes"
    sysctls:
      net.ipv4.ping_group_range: 0 2147483647
    user: "1000"
    volumes:
      - ./data:/app/data
      - ./config/inkotools:/app/config/user:ro
      # - ./config/proxychains.conf:/etc/proxychains/proxychains.conf:ro
    restart: unless-stopped
    network_mode: host
    ports:
      - "127.0.0.1:9999:9999"
...

Структура проекта

  • inkotools/
    • config/ - директория для конфигурационных файлов.
      • default/ - системные конфигурационные файлы, менять их не нужно. Для внесения изменений скопируйте необходимые параметры в пользовательский файл с тем же именем.
      • user/ - пользовательские конфигурационные файлы, имеют больший приоритет и перезаписывают системные значения параметров. Все изменения настроек нужно производить в них.
    • data/ - директория для файлов баз данных.
    • lib/ - основные библиотеки проекта.
      • cfg.py - функции для инициализации и работы с конфигурацией.
      • db.py - функции для работы с внутренней базой данных.
      • gdb.py - функции для работы с серой базой.
      • sw.py - функции для работы с коммутаторами.
    • migrations/ - директория для файлов миграций.
    • templates/ - директория для шаблонов jinja2.
    • asgi.py - приложение API.
    • cli.py - утилита CLI.

Настройка

Логины и пароли

Внимание! При первом запуске в файле secrets.yml генерируется значение secret_key - ключ, используемый для шифрования пользовательских паролей в базе данных. При переносе уже используемой базы данных в другое место необходимо скопировать и прописать значение ключа, иначе доступ к хранимой в базе информации будет утерян.

Для корректной работы необходимо указать логины и пароли для доступа к коммутаторам в файле secrets.yml:

  • admin_profile - узловые коммутаторы
  • user_profile - коммутаторы доступа
  • gray_database - учетная запись для общего поиска по серой базе

Можно скопировать и отредактировать содержимое файла secrets.sample.yml, либо задать пароли через утилиту cli:

./cli.py cfg --setup

Логирование

Настройки логирования хранятся в файле logger.yml. Для большинства случаев изменение стандартных настроек не требуется.

Пример изменения уровня оповещений:

---
loggers:
  '':
    level: DEBUG
...

Общие настройки

proxy_mode - при включении не будут импортироваться модули icmplib, easysnmp и arpreq. Вся информация с коммутаторов будет браться только через telnet, а доступность проверяться tcp-запросами на 80 и 23 порты через socks5 proxy.

При работе в данном режиме необходимо указать дополнительно:

  • proxy_ip
  • proxy_port
  • telnet_cmd - команда запуска telnet.

Данный режим добавлен для возможности использования совместно с proxychains.

CLI

Подключение через telnet:

./cli.py sw 59.75 --interact

Поиск и добавление в базу новых коммутаторов:

./cli.py db --update

Обновление базы L3-интерфейсов узловых коммутаторов:

./cli.py db --update-aliases

Применение миграций:

./cli.py db --migrate v0.3

Настройка паролей доступа:

./cli.py cfg --setup

API

Описание классов и функций

Структура базы данных

About

Tools to simplify work in INKO

Resources

Stars

Watchers

Forks

Languages