Скрипты для упрощения работы с коммутаторами в сети ИНКО
Внимание! Проект находится в стадии разработки. Возможны изменения, ломающие обратную совместимость. Данное руководство может иметь незавершенные разделы или отсутствующие описания функций. Для актуальной информации рекомендуется смотреть непосредственно текущий код.
Возможные варианты работы:
- Выполнение команд через утилиту CLI
- Выполнение команд через сервер API
- Использование в собственных скриптах через импорт
Для использования cli достаточно склонировать репозиторий и установить зависимости из requirements.txt
Если при установке зависимости
easysnmp
возникает ошибка, возможно, в системе не установлена библиотекаnet-snmp
. Подробнее в руководстве easysnmp.
Если при запуске скриптов возникает ошибка привилегий, возможно, значение параметра ядра
net.ipv4.ping_group_range
равно1 0
, нужно исправить его на0 2147483647
. В разных дистрибутивах используются разные значения по умолчанию. Подробнее в документации icmplib.
Для запуска api потребуется ASGI сервер, например, uvicorn
Для удобства запуска 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.
Подключение через 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