Скрипты для упрощения работы с коммутаторами в сети ИНКО
Внимание! Проект находится в стадии разработки. Возможны изменения, ломающие обратную совместимость. Данное руководство может иметь незавершенные разделы или отсутствующие описания функций. Для актуальной информации рекомендуется смотреть непосредственно текущий код.
Возможные варианты работы:
- Выполнение команд через утилиту 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_ipproxy_porttelnet_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