Skip to content

Fritzss/Netbox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Описание Python-скрипт для автоматической синхронизации статусов IP-адресов в NetBox на основе их доступности через ICMP ping. Скрипт проверяет все IP-адреса из префиксов, зарегистрированных в NetBox, и обновляет их статусы в соответствии с результатами проверки.

🌟 Возможности Многопроцессорная обработка - использует все доступные ядра CPU для ускорения проверки

Интеллектуальное управление статусами - автоматическое переключение между статусами active, deprecated, reserved

Исключение подсетей - возможность исключения определенных сетей из проверки

Автоматическое добавление - обнаружение новых IP-адресов в префиксах NetBox

Безопасная обработка - сохранение важных статусов (deprecated, reserved)

Требования Системные зависимости bash

Ubuntu/Debian

sudo apt-get install python3 python3-pip

CentOS/RHEL

sudo yum install python3 python3-pip Python библиотеки bash pip install pynetbox

NetBox NetBox v2.10 или выше

API токен с правами на запись в IPAM

Доступ на чтение префиксов

⚙️ Конфигурация

  1. Основные настройки Отредактируйте параметры подключения в скрипте:

python

Подключение к NetBox

nb = pynetbox.api( 'https://netbox.example.com:8443', # URL вашего NetBox token='ваш_api_токен_здесь' # API токен )

  1. Генерация API токена Войдите в NetBox как администратор

Перейдите: Admin → API Tokens → Add Token

Укажите:

Key: Скопируйте сгенерированный токен

Write enabled: ✓

Expires: По необходимости

  1. Настройка исключений (опционально) python

Исключить определенные подсети из проверки

prefixes = [net for net in prefixes if '192.168.' not in str(net)]

Настройка VRF (опционально) По умолчанию используется VRF с ID=1. Для изменения:

python respon = nb.ipam.ip_addresses.create( address=addr, vrf=1, # ← Замените на нужный VRF ID description='add by pinger' )

Установка и запуск Способ 1: Прямой запуск bash

Сделать скрипт исполняемым

chmod +x netbox_pinger.py

Запуск

./netbox_pinger.py Способ 2: Через Python bash python3 netbox_pinger.py

Способ 3: Docker (опционально) dockerfile FROM python:3.9-slim RUN pip install pynetbox COPY netbox_pinger.py /app/ WORKDIR /app CMD ["python3", "netbox_pinger.py"]

🔄 Логика работы

alt text

graph TD A[Получение всех префиксов из NetBox] --> B[Исключение указанных подсетей] B --> C[Генерация списка всех IP-адресов] C --> D[Многопроцессорная проверка ping] D --> E{IP доступен?} E -->|Да| F[Обновить статус на active] E -->|Нет| G[Обновить статус на deprecated/reserved]

Таблица статусов

Ситуация Статус в NetBox Действие скрипта IP доступен, не существует в NetBox - Создать со статусом active IP доступен, статус deprecated/reserved deprecated/reserved Изменить на active IP доступен, статус active active Без изменений IP недоступен, статус active active Изменить на deprecated IP недоступен, не существует в NetBox - Создать со статусом reserved

⚡ Производительность Настройка многопроцессорности Скрипт автоматически настраивает оптимальное количество процессов:

pool_size = cpu_count * 4 (максимум 100)

Пример: 8 ядер → 32 процесса

🔒 Безопасность SSL сертификаты По умолчанию отключена проверка SSL:

python nb.http_session.verify = False # ⚠️ Для разработки Для продакшн среды:

python

Вариант 1: Включить проверку (рекомендуется)

nb.http_session.verify = True

Вариант 2: Указать кастомный сертификат

nb.http_session.verify = '/path/to/certificate.pem' Права доступа Рекомендуется создать отдельного пользователя в NetBox с минимально необходимыми правами:

ipam: add_ipaddress, change_ipaddress, view_ipaddress, view_prefix

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published