分享

IP地址管理工具...

 无人在线biblge 2022-06-02 发布于江苏

参考官方文档:https://netbox./en/stable/installation/

一、简介

1、What is NetBox?

NetBox 是一个基础设施资源建模 (IRM) 应用程序,旨在支持网络自动化。NetBox 最初由DigitalOcean的网络工程团队构思,专为满足网络和基础设施工程师的需求而开发。NetBox 在 Apache 2 许可下以开源形式提供。它包括网络管理的以下方面:

  • IP 地址管理 (IPAM) - IP 网络和地址、VRF 和 VLAN
  • 设备架- 按组和站点组织
  • 设备- 设备类型及其安装位置
  • 连接- 设备之间的网络、控制台和电源连接
  • 虚拟化- 虚拟机和集群
  • 数据电路- 长途通信电路和供应商

简单来说:一种模拟IIS用来解释执行asp动态页的程序。还可以把网站封装成一个文件。

2、What NetBox Is Not

尽管 NetBox 努力涵盖网络管理的许多领域,但其功能集的范围必然受到限制。这确保了开发专注于核心功能,并且合理地控制了范围蔓延。为此,提供一些 NetBox未提供的功能示例可能会有所帮助:

  • 网络监控
  • DNS 服务器
  • RADIUS 服务器
  • 配置管理
  • 设备管理

也就是说,NetBox可用于使用执行这些功能所需的数据填充外部工具。

3、设计理念

NetBox 的设计首先考虑了以下原则。

4、复制真实世界

对数据模型进行了仔细考虑,以确保它能够准确地反映现实世界的网络。例如,IP 地址不是分配给设备,而是分配给连接到设备的特定接口,并且一个接口可能分配有多个 IP 地址。

5、充当“真理之源”

NetBox 旨在表示网络的期望状态与其运行状态。因此,强烈建议不要自动导入实时网络状态。在 NetBox 中创建的所有数据都应首先经过人工审核,以确保其完整性。然后可以使用 NetBox 以高度可信的方式填充监控和供应系统。

6、把事情简单化

当在相对简单的80% 解决方案和更复杂的完整解决方案之间进行选择时,通常会青睐前者。这确保了具有低学习曲线的精益代码库。

7、应用程序堆栈

NetBox 建立在Django Python 框架之上,并使用PostgreSQL数据库。它作为您选择的 HTTP 服务器后面的 WSGI 服务运行。

功能组件
HTTP servicenginx or Apache
WSGI servicegunicorn or uWSGI
ApplicationDjango/Python
DatabasePostgreSQL 10+
Task queuingRedis/django-rq
Live device accessNAPALM (optional)

8、支持的 Python 版本

NetBox 目前支持 Python 3.7、3.8 和 3.9 环境。(在 NetBox v3.0 中删除了对 Python 3.6 的支持。)

二、部署(本人使用centos8,如使用ubuntu自行加 sudo )

此处提供的安装说明已经过测试,可在 Ubuntu 20.04 和 CentOS 8.3 上运行。在其他发行版上安装依赖项所需的特定命令可能会有很大差异。

1、PostgreSQL 数据库安装

注意:NetBox 需要 PostgreSQL 10 或更高版本。请注意,不支持 MySQL 和其他关系数据库。

1)设置RPM仓库

进入官网Red Hat安装教程页面;选择需要安装的PostgreSQL版本、操作系统平台与版本、CPU架构,然后执行生成的安装脚本中的第一行命令,如下:
在这里插入图片描述

yum install -y https://download./pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

2)安装PostgreSQL-Server、PostgreSQL-Contrib

yum install -y postgresql14-server

3)创建数据存储目录,并修改权限

# 创建目录
mkdir -p /data/postgresql_data/

# 授权, postgres用户与组在第2步会自动创建好
chown -R postgres:postgres /data/postgresql_data/

4)初始化数据库
切换到postgres用户执行命令:

su - postgres

运行初始化数据库脚本

# 使用自定义数据存储目录
/usr/pgsql-14/bin/initdb -D /data/postgresql_data/

↑或↓

# 使用默认数据存储目录
/usr/pgsql-14/bin/initdb

5)修改启动脚本
提醒:使用root用户当使用自定义数据存储目录才需要修改,否则不需要修改;

编辑系统PostgreSQL启动脚本

vim /usr/lib/systemd/system/postgresql-14.service
......
# Location of database directory
Environment=PGDATA=/data/postgresql_data/
......

重新加载系统服务

systemctl daemon-reload
systemctl enable postgresql-14
systemctl start postgresql-14

在继续之前,请确认您已安装 PostgreSQL 10 或更高版本:

[root@op-zd-1-1v10 postgresql_data]# psql -V
psql (PostgreSQL) 14.2

6)设置监听地址
提醒:使用postgres用户
修改数据存储目录下的postgresql.conf文件(可使用命令查找:find / -name postgresql.conf)

将listen_addresses配置的值改为*

vim /data/postgresql_data/postgresql.conf
......
# - Connection Settings -
listen_addresses = '*'                  # what IP address(es) to listen on;
......

7)新增密码认证

提醒:使用postgres用户

修改数据存储目录下的pg_hba.conf文件

在文件末尾添加一行设置,如下:

vim /data/postgresql_data/pg_hba.conf
......
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust
# 添加可通过密码对所有用户和主机进行认证
host    all             all             0.0.0.0/0               password

8)修改postgres超级用户密码

提醒:使用postgres用户

登录PostgreSQL,使用操作系统用户

psql -p 5432 -U postgres

修改postgres超级用户密码

ALTER USER postgres WITH PASSWORD '1234qwer';

9)数据库创建

至少,我们需要为 NetBox 创建一个数据库并为其分配用户名和密码以进行身份​​验证。首先以系统 Postgres 用户身份调用 PostgreSQL shell。

sudo -u postgres psql

在 shell 中,输入以下命令来创建数据库和用户(角色),用您自己的值代替密码:

CREATE DATABASE netbox;
CREATE USER netbox WITH PASSWORD '1234qwer';
GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;

2、yum安装指定版本Redis

# Centos7:
yum install -y http://rpms./enterprise/remi-release-7.rpm
# Centos8:(这两个我忘了是哪个了,盲猜第二个,不行就都试下)
yum install -y http://rpms./enterprise/remi-release-8.rpm
yum install -y http://rpms./enterprise/remi-release-8.rpm

安装redis(默认安装5.0.3版本)

[root@op-zd-1-1v10 postgresql_data]# yum --enablerepo=remi install redis -y

[root@op-zd-1-1v10 postgresql_data]# sudo systemctl start redis
[root@op-zd-1-1v10 postgresql_data]# sudo systemctl enable redis
[root@localhost contrib]# redis-cli -v
redis-cli 5.0.3

指定版本看这里:
查看所有可用Redis版本

[root@op-zd-1-1v10 postgresql_data]# yum --enablerepo=remi list redis --showduplicates | sort -r
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
已加载插件:fastestmirror, langpacks
可安装的软件包
 * webtatic: us-east.repo.webtatic.com
 * remi-safe: mirrors.tuna.tsinghua.edu.cn
 * remi: mirrors.tuna.tsinghua.edu.cn
redis.x86_64                       6.2.6-1.el7.remi                         remi
redis.x86_64                       6.2.5-1.el7.remi                         remi
redis.x86_64                       6.0.16-1.el7.remi                        remi
redis.x86_64                       6.0.15-1.el7.remi                        remi
redis.x86_64                       5.0.14-1.el7.remi                        remi
redis.x86_64                       5.0.13-1.el7.remi                        remi
redis.x86_64                       3.2.12-2.el7                             epel
Loading mirror speeds from cached hostfile
 * epel: mirrors.bfsu.edu.cn

安装指定版本Redis

[root@op-zd-1-1v10 postgresql_data]# yum --enablerepo=remi install redis-6.0.16 -y

[root@op-zd-1-1v10 postgresql_data]# sudo systemctl start redis
[root@op-zd-1-1v10 postgresql_data]# sudo systemctl enable redis

在继续之前,请确认您安装的 Redis 版本至少为 v4.0:

[root@op-zd-1-1v10 postgresql_data]# redis-server -v
Redis server v=6.0.16 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=338ee3532d2f7e9f

您可能希望在/etc/redis.conf或处修改 Redis 配置/etc/redis/redis.conf,但在大多数情况下,默认配置就足够了。

验证服务状态
使用该redis-cli实用程序确保 Redis 服务正常运行:

[root@op-zd-1-1v10 postgresql_data]# redis-cli ping
PONG				# 收到PONG来自服务器的响应说明成功

3、python3.8 安装

在安装之前使用以下命令安装 Python 所需的开发库。

[root@op-zd-1-1v10 postgresql_data]# sudo yum -y install gcc openssl-devel bzip2-devel libffi-devel

1、先安装依赖包

yum -y install zlib*

yum -y install nano wget epel-release gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel xz-devel libffi-devel

2、下载python3.8文件

wget https://www./ftp/python/3.8.5/Python-3.8.5.tgz

3、解压

tar -xvf ./Python-3.8.5.tgz

4、新建文件夹

mkdir /usr/local/python3

5、进入文件夹

cd Python-3.8.5

6、编译

./configure --prefix=/usr/local/python3 --with-ssl

7、安装

make && make install

# 如果提示没有按照make运行以下命令
yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++

8、删除冲突文件

rm -rf /usr/bin/python3
rm -rf /usr/bin/pip3

9、设置软连接

ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3

10、升级pip

/usr/local/python3/bin/python3.8 -m pip install --upgrade pip

11、安装依赖包

pip3 install wheel

12、查看版本

python3 -V

pip3 -V

4、NetBox components

1)安装 Python 3.7 或更高版本后,安装剩余的系统包:

sudo yum install -y gcc libxml2-devel libxslt-devel libffi-devel libpq-devel openssl-devel redhat-rpm-config

2)下载网箱

本文档提供了两种安装 NetBox 的选项:从可下载的存档文件或从 git 存储库。从包安装(下面的选项 A)需要为以后的每次更新手动获取和提取存档,而通过 git 安装(选项 B)允许通过重新拉动master分支进行无缝升​​级。

选项 A:下载发布存档本人使用(注意:可以到https://github.com/netbox-community/netbox/archive/该链接寻找想要的版本)
从 GitHub下载最新的稳定版本作为 tarball 或 ZIP 存档并将其解压缩到您想要的路径。在本例中,我们将/opt/netbox用作 NetBox 根。

sudo wget https://github.com/netbox-community/netbox/archive/vX.Y.Z.tar.gz
sudo tar -xzf vX.Y.Z.tar.gz -C /opt
sudo ln -s /opt/netbox-X.Y.Z/ /opt/netbox

笔记:建议将 NetBox 安装在以其版本号命名的目录中。例如,NetBox v3.0.0 将被安装到/opt/netbox-3.0.0中,并且来自的符号链接/opt/netbox/将指向该位置。(您可以使用命令验证此配置ls -l /opt | grep netbox。)这允许在不中断当前安装的情况下并行安装将来的版本。更改为新版本时,只需更新符号链接。

选项 B:克隆 Git 存储库
为 NetBox 安装创建基本目录。对于本指南,我们将使用/opt/netbox.

sudo mkdir -p /opt/netbox/
cd /opt/netbox/

如果git尚未安装,请安装它:

sudo yum install -y git

接下来,将 NetBox GitHub 存储库的主分支克隆到当前目录。(此分支始终保存当前的稳定版本。)

sudo git clone -b master --depth 1 https://github.com/netbox-community/netbox.git .

笔记:上面的git clone命令使用“浅克隆”来仅检索最近的提交。如果您需要下载整个历史记录,请省略该–depth 1参数。

该git clone命令应生成类似于以下内容的输出:

Cloning into '.'...
remote: Enumerating objects: 996, done.
remote: Counting objects: 100% (996/996), done.
remote: Compressing objects: 100% (935/935), done.
remote: Total 996 (delta 148), reused 386 (delta 34), pack-reused 0
Receiving objects: 100% (996/996), 4.26 MiB | 9.81 MiB/s, done.
Resolving deltas: 100% (148/148), done.

笔记:通过 git 安装还可以让您轻松试用不同版本的 NetBox。要查看特定的 NetBox 版本,请使用git checkout带有所需版本标签的命令。例如,git checkout v3.0.8。

3)创建 NetBox 系统用户

创建一个名为的系统用户帐户netbox。我们将配置 WSGI 和 HTTP 服务以在此帐户下运行。我们还将分配媒体目录的此用户所有权。这可确保 NetBox 能够保存上传的文件。

sudo groupadd --system netbox
sudo adduser --system -g netbox netbox
[root@op-zd-1-1v10 netbox]# sudo chown --recursive netbox  /opt/netbox/netbox-3.1.8/docs/media/

4)配置

移动到 NetBox 配置目录并复制configuration.example.py命名的configuration.py. 该文件将保存您的所有本地配置参数。

[root@op-zd-1-1v10 netbox]# cd /opt/netbox-3.1.8/netbox/netbox/
[root@op-zd-1-1v10 netbox]# sudo cp configuration.example.py configuration.py

使用您喜欢的编辑器打开configuration.py以开始配置 NetBox。NetBox 提供了许多配置参数,但新安装只需要以下四个:

  • ALLOWED_HOSTS
  • DATABASE
  • REDIS
  • SECRET_KEY

5)ALLOWED_HOSTS

这是可以访问此服务器的有效主机名和 IP 地址的列表。您必须至少指定一个名称或 IP 地址。(请注意,这并不限制可以访问 NetBox 的位置:它仅用于HTTP 主机标头验证。)

ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']

如果您还不确定 NetBox 安装的域名和/或 IP 地址是什么,您可以将其设置为通配符(星号)以允许所有主机值:

ALLOWED_HOSTS = ['*']

6)数据库

此参数保存数据库配置详细信息。您必须定义配置 PostgreSQL 时使用的用户名和密码。如果服务在远程主机上运行,​​请相应地更新HOST和PORT参数。有关各个参数的更多详细信息,请参阅配置文档。

DATABASE = {
    'NAME': 'netbox',               # Database name
    'USER': 'netbox',               # PostgreSQL username
    'PASSWORD': 'J5brHrAXFLQSif0K', # PostgreSQL password
    'HOST': 'localhost',            # Database server
    'PORT': '',                     # Database port (leave blank for default)
    'CONN_MAX_AGE': 300,            # Max database connection age (seconds)
}

7)REDIS

Redis 是 NetBox 用于缓存和后台任务队列的内存键值存储。Redis 通常需要最少的配置;对于大多数安装,以下值应该足够了。有关各个参数的更多详细信息,请参阅配置文档。

请注意,NetBox 需要指定两个独立的 Redis 数据库:tasks和caching. 这些可能都由同一个 Redis 服务提供,但是每个都应该有一个唯一的数字数据库 ID。

REDIS = {
    'tasks': {
        'HOST': 'localhost',      # Redis server
        'PORT': 6379,             # Redis port
        'PASSWORD': '',           # Redis password (optional)
        'DATABASE': 0,            # Database ID
        'SSL': False,             # Use SSL (optional)
    },
    'caching': {
        'HOST': 'localhost',
        'PORT': 6379,
        'PASSWORD': '',
        'DATABASE': 1,            # Unique ID for second database
        'SSL': False,
    }
}

8)密钥

必须为该参数分配一个随机生成的密钥,该密钥用作散列和相关加密函数的盐。(但是请注意,它永远不会直接用于加密机密数据。)此密钥对于此安装必须是唯一的,建议长度至少为 50 个字符。它不应该在本地系统之外共享。

父目录中提供了一个名为的简单 Python 脚本generate_secret_key.py,以帮助生成合适的密钥:

[root@op-zd-1-1v10 netbox]# pwd
/opt/netbox-3.1.8/netbox/netbox

[root@op-zd-1-1v10 netbox]# python3 ../generate_secret_key.py
+S_hPcQXxm(KmWC0)B@0J28t7*5VSQz5*fKkw#p+5n%9I)50bR

9)可选要求

NetBox 所需的所有 Python 包都在其中列出,requirements.txt并将自动安装。NetBox 还支持一些可选包。如果需要,这些包必须列在local_requirements.txtNetBox 根目录中。

10)凝固汽油弹

与NAPALM 自动化库的集成允许 NetBox 从设备获取实时数据并通过其 REST API 将其返回给请求者。NAPALM_USERNAME和NAPALM_PASSWORD配置参数定义连接到设备时要使用的凭据。

sudo sh -c "echo 'napalm' >> /opt/netbox/local_requirements.txt"

11)远程文件存储

默认情况下,NetBox 将使用本地文件系统来存储上传的文件。要使用远程文件系统,请安装django-storages库并在.configuration.py

sudo sh -c "echo 'django-storages' >> /opt/netbox/local_requirements.txt"

12)运行升级脚本

配置好 NetBox 后,我们就可以进行实际安装了。我们将运行打包的升级脚本 ( upgrade.sh) 来执行以下操作:

  • 创建 Python 虚拟环境
  • 安装所有必需的 Python 包
  • 运行数据库架构迁移
  • 在本地构建文档(供离线使用)
  • 聚合磁盘上的静态资源文件
sudo /opt/netbox/upgrade.sh

请注意,NetBox v3.0 及更高版本需要 Python 3.7 或更高版本。如果服务器上的默认 Python 安装设置为较低版本,请将支持安装的路径作为名为PYTHON. (注意,环境变量必须在命令之后sudo传递。)

sudo PYTHON=/usr/bin/python3.7 /opt/netbox/upgrade.sh

注意:完成后,升级脚本可能会警告未检测到现有虚拟环境。由于这是新安装,因此可以安全地忽略此警告。

13)创建超级用户

NetBox 不附带任何预定义的用户帐户。您需要创建一个超级用户(管理帐户)才能登录 NetBox。首先进入升级脚本创建的Python虚拟环境:

source /opt/netbox/venv/bin/activate

激活虚拟环境后,您应该注意到(venv)控制台提示符前面的字符串。

接下来,我们将使用createsuperuserDjango 管理命令(通过manage.py)创建一个超级用户帐户。不需要为用户指定电子邮件地址,但请务必使用非常强大的密码。

cd /opt/netbox/netbox
python3 manage.py createsuperuser

14)安排管家任务

NetBox 包含一个housekeeping管理命令,用于处理一些重复性清理任务,例如清除旧会话和过期的更改记录。尽管可以手动运行此命令,但建议使用系统的cron守护程序或类似实用程序配置计划作业。

调用此命令的 shell 脚本包含在contrib/netbox-housekeeping.sh. 它可以复制或链接到您系统的每日 cron 任务目录,或直接包含在 crontab 中。(如果将 NetBox 安装到非标准路径,请务必先更新此脚本中的系统路径。)

sudo ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping

有关详细信息,请参阅内务管理文档。

15)测试应用程序(开发服务器仅用于开发和测试目的。对于生产使用而言,它的性能和安全性都不够。不要在生产中使用它。)

至此,我们应该可以运行NetBox的开发服务器进行测试了。我们可以通过启动一个开发实例来检查:

python3 manage.py runserver 0.0.0.0:8000 --insecure

如果成功,您应该会看到类似于以下内容的输出:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
August 30, 2021 - 18:02:23
Django version 3.2.6, using settings 'netbox.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

ALLOWED_HOSTS接下来,在端口 8000 上连接服务器的名称或 IP(如 中定义);例如http://127.0.0.1:8000/。您应该会看到 NetBox 主页。尝试使用创建超级用户时指定的用户名和密码登录。

16)防火墙放行

默认情况下,基于 RHEL 的发行版可能会阻止您使用 firewalld 进行的测试尝试。可以打开开发服务器端口firewall-cmd(–permanent如果您希望规则在服务器重新启动后仍然存在,请添加):
firewall-cmd --zone=public --add-port=8000/tcp

5、系统设置(systemd控制)

使用 systemd 来控制 gunicorn 和 NetBox 的后台工作进程。首先,将 contrib/netbox.servicecontrib/netbox-rq.service 复制到 /etc/systemd/system/ 目录并重新加载 systemd 守护进程:

sudo cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
sudo systemctl daemon-reload

然后,启动netbox和netbox-rq服务并让它们在启动时启动:

sudo systemctl start netbox netbox-rq
sudo systemctl enable netbox netbox-rq

您可以使用该命令systemctl status netbox来验证 WSGI 服务是否正在运行:

systemctl status netbox.service

您应该会看到类似于以下内容的输出:

● netbox.service - NetBox WSGI Service
     Loaded: loaded (/etc/systemd/system/netbox.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-08-30 04:02:36 UTC; 14h ago
       Docs: https://netbox./en/stable/
   Main PID: 1140492 (gunicorn)
      Tasks: 19 (limit: 4683)
     Memory: 666.2M
     CGroup: /system.slice/netbox.service
             ├─1140492 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /va>
             ├─1140513 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /va>
             ├─1140514 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /va>
...

注意:如果 NetBox 服务无法启动,请发出命令journalctl -eu netbox以检查可能指示问题的日志消息。

一旦您确认 WSGI 工作程序已启动并正在运行,请继续进行 HTTP 服务器设置。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多