本文最后更新于 2024年9月3日 上午
介绍 NetBox 是用于建模和记录现代网络的领先解决方案。由 结合 IP 地址管理 (IPAM) 的传统应用和 具有强大 API 和扩展的数据中心基础架构管理 (DCIM), NetBox 为推动网络自动化提供了理想的“事实来源”。 NetBox 在 Apache 2.0 许可下作为开源软件提供 作为数千个组织中网络自动化的基石。
Netbox系列:https://songxwn.com/categories/NetBox/
本教程讲述了 4.0版本的部署和中文化的操作。
4.0.3 官方开始支持汉化,此教程也更新一波。
OVF部署体验:https://songxwn.com/Netbox4-ovf/
中文社区微信群 可发送微信号到邮箱➡️ me@songxwn.com
公众号
功能
物理基础设施 :
准确模拟物理世界,从全球区域到单个机柜。然后连接一切 - 网络、Console和电源!
现代的IPAM :
您期望的所有标准 IPAM 功能,IP地址自动层级以及 VRF 导入/导出跟踪、VLAN 管理和Overlay网络支持。
传输线路 :
自信地管理来自不同服务提供商的关键电路的交付,并与您自己的基础设施无缝建模。
电力跟踪 :
将上游电源的配电映射到单个电源线和插座。
组织 :
以本机方式管理租户和联系人分配。
强大的搜索功能 :
使用单个全局搜索功能轻松找到您需要的任何内容。
综合日志记录 :
利用自动更改日志记录和用户提交的日志条目来跟踪Netbox随时间的增长。
无限制的定制 :
自定义字段、自定义链接、标签、导出模板、自定义验证、报告、脚本等!
灵活的权限 :
高级权限系统可实现非常灵活的权限委派。
集成 :
通过其 REST 和 GraphQL API 轻松将 NetBox 连接到您的其他工具。
插件 :
在核心应用程序中找不到您需要的内容?尝试众多社区插件之一 - 或构建自己的插件!
认证
支持域控AD、LDAP、SSO、Azure AD、Okta等
NetBox 最初由DigitalOcean的网络工程团队构思,专为满足网络和基础设施工程师的需求而开发。
设计理念 :
复制真实世界(Replicate the Real World)
充当“真理之源(Serve as a “Source of Truth”)
保持简单(Keep it Simple)
应用程序堆栈(Application Stack)
架构图
示例图
专为网络打造 与通用CMDB不同,NetBox策划了一个专门满足网络工程师和运营商需求的数据模型。它提供了精心设计的各种对象类型,以最好地满足基础架构设计和文档的需求。这些涵盖了网络技术的所有方面,从 IP 地址管理到布线再到覆盖层等等:
分层地区、数据中心和物理位置
机架、设备和设备组件
线路连接和无线连接管理
供电跟踪
虚拟线路和提供商
虚拟机和群集
IP 网段、汇聚和地址
VRF 和 RT
FHRP组(VRRP,HSRP等)
AS 编号
VLAN 和作用域 VLAN 组
L2VPN 虚拟网络
租户分配
联系人管理
安装环境介绍 使用Rocky Linux 9.4(最小化安装,关闭SE Linux和防火墙)
(也适用于RHEL 9系列及其衍生发行版)
使用Python 3.12
使用PostgreSQL 16
使用Redis 7
NetBox版本:4.0.10
硬件配置:建议4C8G以上,100G存储空间。
PS:没有使用Docker安装是为了方便修改代码和翻译。用Docker 部署会更简单些。
Rocky Linux系统镜像下载:https://mirrors.sdu.edu.cn/rocky/9/isos/x86_64/Rocky-9-latest-x86_64-minimal.iso
安装和配置 PostgreSQL 数据库 关闭SE Linux和防火墙 1 2 3 4 systemctl disable --now firewalld sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config && setenforce 0 dnf install tree vim bash-completion tar -y# 安装一些工具
安装数据库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 dnf module install postgresql:16 -y# 指定安装16版本 postgresql-setup --initdb# 初始化数据库 vim /var/lib/pgsql/data/pg_hba.conf# "local" is for Unix domain socket connections only local all all peer# IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256# IPv6 local connections: host all all ::1/128 scram-sha-256# 将主机连接的加密方式将ident改为scram-sha-256即可。 systemctl enable --now postgresql# 启动并设置开机启动 systemctl status postgresql ss -an | grep 5432# 查看是否正常启动
修改密码和创建数据库 1 2 3 4 5 6 7 8 9 10 11 sudo -u postgres psql ALTER USER postgres WITH PASSWORD 'Songxwn.com' ;CREATE DATABASE netboxdb;quit
PS: PG优化配置生成器:https://pgtune.leopard.in.ua/ (若不配置,会很卡)
安装和配置 Redis 数据库 深入配置可以参考:https://songxwn.com/redis-sentinel/
1 2 3 dnf module install redis:7 -y
配置访问密码 1 2 3 4 vim /etc/redis/redis.conf requirepass Songxwn.com # 打开配置文件,找到被注释的requirepass行,修改密码为Songxwn.com 。保存文件并退出
配置启动并验证 1 2 3 4 5 6 7 8 9 10 11 12 13 14 systemctl enable --now redissystemctl status redisss -an | grep 6379 redis -cli 127 .0 .0 .1 :6379 > AUTH Songxwn.comOK 127 .0 .0 .1 :6379 > pingPONG 127 .0 .0 .1 :6379 > exit
安装和验证 Python 3.12 netbox4 要求python 3.10以上版本。
1 2 3 4 5 6 7 8 dnf install python3.12 python3.12-pip python3.12-devel python3-pip -y # 安装python3.12 python3.12 -V Python 3.12.3 # 验证版本
安装 Netbox 4.0 环境准备 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 dnf install gcc libxml2-devel libxslt-devel libffi-devel libpq-devel openssl-devel redhat-rpm-config git wget -y useradd -r -d /opt/netbox -s /usr/sbin/nologin netboxcd /opt wget https://github.com/netbox-community/netbox/archive/refs/tags/v4.0.10.tar.gz tar -zxvf v4.0.10.tar.gzln -s netbox-4.0.10 netboxchown -R netbox:netbox /opt/netbox*cd /opt/netbox/netbox/netbox tree -L 3 /opt/ /opt/ ├── netbox -> netbox-4.0.10 ├── netbox-4.0.10 │ ├── base_requirements.txt │ ├── CHANGELOG.md │ ├── contrib │ │ ├── apache.conf │ │ ├── generated_schema.json │ │ ├── gunicorn.py │ │ ├── netbox-housekeeping.service │ │ ├── netbox-housekeeping.sh │ │ ├── netbox-housekeeping.timer │ │ ├── netbox-rq.service │ │ ├── netbox.service │ │ ├── nginx.conf │ │ ├── openapi2.json │ │ ├── openapi2.yaml │ │ └── uwsgi.ini │ ├── CONTRIBUTING.md │ ├── docs │ │ ├── administration │ │ ├── configuration │ │ ├── customization │ │ ├── development │ │ ├── extra.css │ │ ├── features │ │ ├── getting-started │ │ ├── index.md │ │ ├── installation │ │ ├── integrations │ │ ├── introduction.md │ │ ├── media │ │ ├── models │ │ ├── netbox_logo.png │ │ ├── netbox_logo.svg │ │ ├── plugins │ │ ├── reference │ │ ├── release-notes │ │ └── _theme │ ├── LICENSE.txt │ ├── mkdocs.yml │ ├── netbox │ │ ├── account │ │ ├── circuits │ │ ├── core │ │ ├── dcim │ │ ├── extras │ │ ├── generate_secret_key.py │ │ ├── ipam │ │ ├── manage.py │ │ ├── media │ │ ├── netbox │ │ ├── project-static │ │ ├── reports │ │ ├── scripts │ │ ├── templates │ │ ├── tenancy │ │ ├── translations │ │ ├── users │ │ ├── utilities │ │ ├── virtualization │ │ ├── vpn │ │ └── wireless │ ├── NOTICE │ ├── pyproject.toml │ ├── README.md │ ├── requirements.txt │ ├── scripts │ │ ├── git-hooks │ │ └── verify-bundles.sh │ ├── SECURITY.md │ └── upgrade.sh └── v4.0.10.tar.gz
生成并配置加密密钥 1 2 3 4 5 6 7 8 9 cd /opt /netbox/netbox/netbox # 确保进入到此目录 sudo -u netbox cp configuration_example.py configuration.py # 创建配置文件,指定用户权限 sudo -u netbox python3 ../generate_secret_key.py # 生成密钥,生成的密钥示例:SOGo0)YKa^RMGs&b =4 p1AtnB-5 nZq(!N#2 -cah$q972DPCf&%F sudo -u netbox vim configuration.py SECRET_KEY = 'SOGo0)YKa^RMGs&b=4p1AtnB-5nZq(!N#2-cah$q972DPCf&%F' # 打开配置文件,将生成的密钥写入进去。
配置数据库连接、本地化、时区。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 cd /opt/netbox/netbox/netbox sudo -u netbox vim configuration.py ALLOWED_HOSTS = ["*" ] DATABASE = { 'ENGINE' : 'django.db.backends.postgresql' , 'NAME' : 'netboxdb' , 'USER' : 'postgres' , 'PASSWORD' : 'Songxwn.com' , 'HOST' : 'localhost' , 'PORT' : '' , 'CONN_MAX_AGE' : 300 , } REDIS = { 'tasks' : { 'HOST' : 'localhost' , 'PORT' : 6379 , 'USERNAME' : '' , 'PASSWORD' : 'Songxwn.com' , 'DATABASE' : 0 , 'SSL' : False , }, 'caching' : { 'HOST' : 'localhost' , 'PORT' : 6379 , 'USERNAME' : '' , 'PASSWORD' : 'Songxwn.com' , 'DATABASE' : 1 , 'SSL' : False , } } SECRET_KEY = 'SOGo0)YKa^RMGs&b=4p1AtnB-5nZq(!N#2-cah$q972DPCf &%F' ENABLE_LOCALIZATION = True DEFAULT_LANGUAGE = 'zh-cn' TIME_ZONE = 'Asia/Shanghai'
初始化Python虚拟环境,初始化数据库,生成静态Web。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 sed -i '1i pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple ' /opt/netbox/upgrade.sh sudo -u netbox PYTHON=/usr/bin/python3.12 /opt/netbox/upgrade.sh Completed. Removing expired user sessions (python3 netbox/manage.py clearsessions) ... Clearing the cache (python3 netbox/manage.py clearcache) ... Cache has been cleared. Upgrade complete! Don't forget to restart the NetBox services: > sudo systemctl restart netbox netbox-rq
创建管理员账号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 source /opt /netbox/venv/bin/activate # 进入虚拟环境cd /opt /netbox/netboxpython3 manage.py createsuperuser Username (leave blank to use 'root' ): admin Email address: me@songxwn.com Password: Password (again): Superuser created successfully. # 创建管理员 admin(不能为root),输入邮箱和两遍密码。 pip install dulwich # 安装数据源同步插件
配置定时任务 1 sudo ln -s /opt/ netbox/contrib/ netbox-housekeeping.sh /etc/ cron.daily/netbox-housekeeping
配置Gunicorn WSGI Gunicorn 是一个 Python 的 WSGI HTTP 服务器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 sudo -u netbox cp /opt/ netbox/contrib/gu nicorn.py /opt/ netbox/gunicorn.py sudo -u netbox vim /opt/ netbox/gunicorn.py cp -v /opt/ netbox/contrib/ *.service /etc/ systemd/system/ systemctl daemon-reload systemctl enable --now netbox netbox-rq systemctl status netbox systemctl status netbox-rq
查看端口是否监听,和启动日志 1 2 3 4 5 6 7 8 ss -an | grep 8001# 查看端口 journalctl -eu netbox# 查看日志
配置Nginx 作为反向代理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 dnf install nginx -y vim /etc/nginx/conf.d/netbox.conf server { listen 80 ; server_name netbox.songxwn.com; client_max_body_size 25m ; fastcgi_connect_timeout 1200s ; fastcgi_send_timeout 1200s ; fastcgi_read_timeout 1200s ; fastcgi_buffer_size 64k ; fastcgi_buffers 4 64k ; fastcgi_busy_buffers_size 128k ; fastcgi_temp_file_write_size 256k ; location /static/ { alias /opt/netbox/netbox/static/; } 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 ; proxy_connect_timeout 600 ; proxy_send_timeout 600 ; proxy_read_timeout 600 ; send_timeout 600 ; } }systemctl enable --now nginx systemctl status nginx
至此安装完成,可以打开你的域名,输入管理员账号登录 。
替换中文化 4.0 开始支持Web国际化
4.0.3 开始支持 中文,但目前都是机器翻译,建议还是用我们第三方的翻译。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 cd /opt/netbox/netbox/translations/zh/LC_MESSAGES# 进入中文语言目录 mv django.po /tmp# 移动原文件到tmp wget -O django.po https://songxwn.com/file/netbox-cn_zh_CN_240523.po# 下载中文文件到此,并重命名为django.po source /opt/netbox/venv/bin/activate# 进入python 虚拟环境 cd /opt/netbox/netbox# 进入工作目录 ./manage.py compilemessages# 刷新翻译 chown -R netbox:netbox /opt/netbox*# 重新设定权限 systemctl restart netbox netbox-rq# 重启进程
PS:注意,进入Web需要在首选项更改默认语言。
下载最新中文PO文件并加入翻译团队 目前中文翻译已100%完成,但好多专业名词需要继续打磨,加入共同翻译:https://app.transifex.com/netbox_cn/netbox-cn/language/zh_CN/
感谢以下翻译人员(不分先后):
Jia Li, 2024 Ross Cheung, 2024 cheng bao, 2024 YuQi Zhao, 2024 su chuandong, 2024