NetBox на сервере: частые ошибки и решения
NetBox — де-факто стандарт для учёта IP-адресов, VLAN'ов, стоек и сетевого оборудования (IPAM/DCIM), но на практике эта Django-система доставляет немало проблем: 502 от nginx после обновления, зависшие миграции базы, расхождение между тем, что реально живёт в сети, и тем, что записано в базе NetBox. Если вы administrируете сеть из десятков VLAN'ов и сотен адресов вручную в Excel — рано или поздно придёте к NetBox, и эта статья — сборник решений тех проблем, которые вы почти наверняка встретите по дороге.
Содержание
- Ошибка 1: 502 Bad Gateway после установки или обновления
- Ошибка 2: миграции базы зависают или падают с конфликтом
- Ошибка 3: Redis не подключается — падают кэш и очереди задач
- Ошибка 4: расхождение данных — IPAM живёт своей жизнью
- Ошибка 5: медленный интерфейс на больших инвентарях
- Ошибка 6: LDAP/SSO авторизация не работает
- Ошибка 7: NAPALM/backup-скрипты не могут достучаться до оборудования
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Ошибка 1: 502 Bad Gateway после установки или обновления
Самая частая жалоба новых пользователей NetBox: nginx поднялся, но отдаёт 502. Причина почти всегда в том, что gunicorn (WSGI-сервер, на котором крутится Django-приложение NetBox) либо не запустился, либо слушает не тот сокет, который ждёт nginx.
Проверка идёт по цепочке:
systemctl status netbox netbox-rq
journalctl -u netbox -n 100 --no-pager
Если сервис netbox.service в состоянии failed, смотрите причину в логе — чаще всего это одна из трёх вещей: не выполнены миграции базы, не собраны статические файлы, либо неверный путь до сокета в /opt/netbox/netbox/netbox/configuration.py.
Конфиг gunicorn лежит в /opt/netbox/gunicorn.py, и там указан bind-адрес:
bind = '127.0.0.1:8001'
В nginx он должен совпадать с proxy_pass:
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
Если используете unix-сокет вместо TCP-порта, убедитесь, что права на файл сокета позволяют nginx (обычно пользователь www-data) до него достучаться — типичная ошибка: gunicorn пишет сокет с правами только для своего пользователя netbox, и nginx получает Permission denied в логе, что превращается в тот же 502. Настройки firewall на самом сервере тоже стоит перепроверить — если порт 8001 случайно оказался открыт наружу или, наоборот, локальный трафик режется правилами, см. настройку UFW на сервере.
Ошибка 2: миграции базы зависают или падают с конфликтом
NetBox активно развивается, и при обновлении между минорными версиями (например, с 4.0 на 4.1) обязателен прогон миграций Django:
cd /opt/netbox
source venv/bin/activate
python3 netbox/manage.py migrate
Частые проблемы здесь:
- Миграция висит бесконечно — почти всегда означает, что на таблицу наложена блокировка другим процессом (незакрытая транзакция, зависший gunicorn-воркер, который не остановили перед обновлением). Остановите
netboxиnetbox-rqперед миграцией, а не пытайтесь мигрировать на живой базе. django.db.utils.ProgrammingError: relation already exists— обычно значит, что миграции применялись частично (прервали Ctrl+C на середине) или база была создана вручную с похожей схемой. Смотрите состояние черезpython3 netbox/manage.py showmigrations— приложение покажет, какие миграции отмечены как применённые ([X]), а какие нет.- Несовпадение версии PostgreSQL — NetBox требует довольно свежий PostgreSQL (проверяйте актуальный минимум в release notes конкретной версии NetBox, он периодически поднимается). На Ubuntu 24.04 из репозитория обычно приходит подходящая версия, но если сервер апгрейдили с более старого дистрибутива, могла остаться версия 12-13.
Перед любым апгрейдом NetBox — обязательный бэкап базы:
pg_dump -U netbox -h localhost netbox > /var/backups/netbox_$(date +%F).sql
Общие грабли самого PostgreSQL под NetBox (настройка shared_buffers, ограничение соединений, права пользователя) разобраны в статье про частые ошибки PostgreSQL на сервере — почти всё оттуда применимо.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверОшибка 3: Redis не подключается — падают кэш и очереди задач
NetBox использует Redis для двух вещей: кэширования и очереди фоновых задач (webhooks, отчёты, скрипты). Если Redis недоступен, интерфейс NetBox либо тормозит на каждой странице, либо часть функций (например, webhooks) молча не работает.
Типичная ошибка в логе gunicorn:
redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused.
Проверьте, что Redis вообще поднят и слушает нужный интерфейс:
systemctl status redis-server
redis-cli ping
Конфигурация Redis в NetBox задаётся в configuration.py двумя отдельными блоками — для кэша и для очередей (REDIS['tasks'] и REDIS['caching']), и это частый источник путаницы: люди меняют пароль или порт только в одном блоке, забывая про второй, и получают половину функциональности, работающей "странно". Если у вас нестандартная настройка Redis с паролем, убедитесь, что PASSWORD указан в обоих блоках конфига одинаково.
Ошибка 4: расхождение данных — IPAM живёт своей жизнью
Это не техническая ошибка в смысле "что-то упало", а самая опасная проблема эксплуатации NetBox: база данных постепенно перестаёт соответствовать реальности. Кто-то выдал IP вручную, забыв отметить в NetBox; кто-то удалил VLAN на свитче, а запись осталась. Через полгода NetBox превращается в красивую, но лживую картинку.
Практические меры, которые реально помогают:
- Заведите правило: любое изменение в сети сначала фиксируется в NetBox, потом применяется на оборудовании — а не наоборот. Это организационная мера, но именно она чаще всего решает проблему разъезда данных.
- Используйте NetBox как источник правды для автоматизации — если конфиги генерируются из NetBox через API (Ansible, Nornir, скрипты), расхождение просто невозможно физически: то, что не в NetBox, не попадёт в конфиг.
- Периодическая сверка: скрипт, который через API NetBox и через опрос реального оборудования (SNMP, API коммутаторов) сравнивает списки VLAN и IP, репортит расхождения. Даже раз в неделю по cron — уже сильно лучше, чем ничего.
Пример простого запроса к API NetBox для выгрузки всех активных префиксов:
curl -s -H "Authorization: Token $NETBOX_TOKEN" \
"https://netbox.example.com/api/ipam/prefixes/?status=active" | jq '.results[].prefix'
Ошибка 5: медленный интерфейс на больших инвентарях
На инсталляциях с десятками тысяч устройств и IP-адресов NetBox может ощутимо тормозить, особенно на страницах с большим числом связанных объектов (например, список интерфейсов устройства с кучей IP на каждом).
Что обычно помогает:
- Проверить настройки PostgreSQL — на дефолтных параметрах (
shared_buffers = 128MB) большая база просто не влезает в кэш, каждый запрос идёт на диск. Ориентировочноshared_buffersстоит поднимать до 25% от RAM сервера, но точную цифру подбирайте под свою нагрузку и объём данных — универсального значения нет. - Индексы и
VACUUM— если база давно не проходилаVACUUM ANALYZE, планировщик запросов начинает работать по устаревшей статистике. Настройте автовакуум или запускайте вручную после массовых импортов. - Кэш Redis — убедитесь, что
REDIS['caching']действительно активен, а не отключён по недосмотру — без кэша NetBox пересчитывает много агрегатов на каждый запрос. - Ограничивайте
page_size— при работе через API с большими выборками задавайте?limit=явно, иначе клиент может запросить весь датасет разом.
Если NetBox крутится в Docker Compose (официальный netbox-docker — самый частый способ деплоя), стоит также свериться с общими граблями контейнерных стеков — они одинаковы что для NetBox, что для любого другого сервиса на Compose: частые ошибки Docker Compose в продакшене.
Ошибка 6: LDAP/SSO авторизация не работает
Во многих компаниях NetBox подключают к корпоративному LDAP или SSO, и здесь тоже есть свой набор типовых проблем.
LDAP: чаще всего ошибка в ldap_config.py — неверный AUTH_LDAP_BIND_DN или сертификат для LDAPS не подхватывается системой. Проверить связь можно напрямую, в обход NetBox:
ldapsearch -x -H ldaps://ldap.example.com -D "CN=svc-netbox,OU=Service,DC=example,DC=com" -W -b "DC=example,DC=com" "(sAMAccountName=testuser)"
Если эта команда не находит пользователя или падает с ошибкой сертификата — проблема не в NetBox, а в самом LDAP-подключении, и чинить нужно именно его.
SSO (SAML/OIDC): типичная ошибка — несовпадение redirect_uri, зарегистрированного у провайдера, с тем, что реально отдаёт NetBox (особенно если сервис стоит за reverse-прокси и путает http/https в заголовках — возвращаемся к правильной настройке X-Forwarded-Proto в nginx, см. Ошибку 1). Если у вас на сервере уже настроен Let's Encrypt для терминации TLS, полезно свериться с частыми ошибками Let's Encrypt на сервере — там разобраны похожие проблемы с заголовками за прокси.
Ошибка 7: NAPALM/backup-скрипты не могут достучаться до оборудования
Если вы используете плагины NetBox для сбора конфигураций с реального оборудования (NAPALM, netmiko-интеграции) — частая проблема в том, что сам сервер NetBox не имеет прямого сетевого доступа до management-сегмента, где живут свитчи и роутеры. NetBox для IPAM/DCIM не обязан физически видеть сеть, которую описывает — но если вы вешаете на него активные проверки, стоит явно выделить сетевой маршрут (или VPN-туннель) от сервера NetBox до management VLAN, и прописать разрешающие правила firewall в обе стороны, а не полагаться на "само заработает".
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Можно ли ставить NetBox на 1 vCPU / 2 ГБ RAM?
Формально стартует, но с реальной нагрузкой — даже на среднем инвентаре в пару тысяч устройств — начинаются тормоза на PostgreSQL и Redis одновременно на одном ядре. Для рабочей эксплуатации разумнее закладывать от 2 vCPU и 4 ГБ RAM, с ростом инвентаря — больше.
NetBox сам управляет сетью (меняет конфиги на оборудовании)?
Нет, из коробки NetBox — это только база данных и API (source of truth). Применение конфигов на реальные устройства — задача внешней автоматизации (Ansible, Nornir и т.п.), которая берёт данные из NetBox через API.
После обновления NetBox сайт открывается, но многие страницы дают 500 ошибку — почему?
Чаще всего забыли выполнить collectstatic или миграции после обновления кода. Прогоните python3 netbox/manage.py migrate и python3 netbox/manage.py collectstatic --no-input, перезапустите netbox и netbox-rq.
Как безопасно откатиться, если обновление сломало NetBox?
Восстановить дамп PostgreSQL, снятый до обновления, и переключить код на предыдущий тег/релиз. Именно поэтому бэкап базы перед апгрейдом — не опция, а обязательный шаг.
NetBox можно развернуть без Docker, прямо на голой Ubuntu?
Да, официальный установщик поддерживает bare-metal установку с venv, gunicorn и systemd-юнитами — именно такой сценарий описан в большинстве проблем выше.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →