超牛 X 的企业级网络设备自动备份系统搭建

背景


网络运维管理的网络设备在量级较小的时候,传统的网络配置备份通常是人肉登陆手动备份,随着管理网络设备越来越多,进阶的方式通常会使用脚本自动抓取配置,通过 FTP 等把配置上传到某处存储,但如果可以有一个备份系统不需要你使用脚本、不限设备厂商可以支持国内外主流的网络设备、同时有web界面,能够查看配置差异对比,同时可以同时同步配置到内部 Gitlab。而我们今天要聊的就是这样的一个系统, 而且安装配置简单,最重要开源免费 真正的大杀器 不负”最好用”之名。

 

官网链接:https://github.com/ytti/oxidized

 

oxidized搭建


环境准备

系统
nginx
oxidized
 Centos 7
1.18.0
0.28.0

 

卸载系统自带 ruby,因为系统自带的版本低于需要的版本要求

[root@host ~]# sudo yum remove ruby ruby-devel

安装工具包

[root@host ~]# sudo yum groupinstall "Development Tools"

安装 Ruby

[root@host ~]# wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.gz
[root@host ~]# tar -zxvf ruby-2.5.5.tar.gz
[root@host ~]# cd ruby-2.5.5
[root@host ~]# ./configure
[root@host ~]# make
[root@host ~]# sudo make install

安装所有依赖环境

[root@host ~]# yum install make cmake which sqlite-devel openssl-devel libssh2-devel ruby gcc ruby-devel libicu-devel gcc-c++

安装 Oxidized

[root@host ~]# gem install oxidized
[root@host ~]# gem install oxidized-script oxidized-web

安装完成后首次运行 Oxidized,会提示去编辑配置文件

[root@host ~]# oxidized
edit ~/.config/oxidized/config

组件说明

config  文件: 就用来存放配置文件
Sources 字段: 指出要备份设备的存放方式
Outputs 字段: 指出备份文件存放的方式
model 字段:指出该设备的厂商所用的os名称, 核心功能就是靠这个实现的。
router.db文件 可以理解成 存放被管理主机的地方

编辑配置文件

[root@host ~]# vi  ~/.config/oxidized/config
username: username //用户名 router.db中读取.
password: password //密码   router.db中读取.
model: junos       //模型   router.db中读取.
interval: 86400     //备份周期(秒)
use_syslog: false  //日志开关
debug: false       //诊断开关
threads: 100        //线程
timeout: 20        //超时
retries: 3         //重试次数
prompt: !ruby/regexp /^([w.@-]+[#>]s?)$/
rest: 10.7.212.16:8888
next_adds_job: false
vars: {}
groups: {}
models: {}
pid: "/root/.config/oxidized/pid"
input:              //连接设备模式
  default: ssh, telnet
  debug: false
  ssh:
    secure: false
default: git        //输出到git,用来配置对比使用
  git:
    user: Oxidized
    email: [email protected]
    repo: "/root/.config/oxidized/git-repos/default.git"
source:
  default: csv
  csv:
    file: "/root/.config/oxidized/router.db" //储存设备信息IP、Username、Password 等
    delimiter: !ruby/regexp /:/
    map: //连接顺序格式
      name: 0
      model: 1
      ip: 2
      group: 3
      username: 4
      password: 5
    vars_map:
      enable: 6
      comware_cmdline: 7
    gpg: false
model_map:
  juniper: junos
  cisco: ios
  huawei: vrp

编辑完配置文件后,在相同路径下创建一个 router.db文件,用来存储主机基本信息并被 config文件调用vi ~/.config/oxidized/router.db

test:vrp:172.16.0.1:test:test:test

再次运行 Oxidized,测试备份设备配置成功

[root@host ~]# oxidized
I, [2020-07-28T11:06:20.592961 #14850]  INFO -- : Oxidized starting, running as pid 14850
I, [2020-07-28T11:06:20.593455 #14850]  INFO -- : lib/oxidized/nodes.rb: Loading nodes
I, [2020-07-28T11:06:20.691863 #14850]  INFO -- : lib/oxidized/nodes.rb: Loaded 2 nodes
Puma starting in single mode...
* Version 3.11.4 (ruby 2.5.5-p157), codename: Love Song
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://10.7.212.16:8888
Use Ctrl-C to stop
I, [2020-07-28T11:06:39.980781 #14850]  INFO -- : Configuration updated for test/test

验证,打开 WEB 页面 ,端口 http://IP:8888 

 配置对比演示


Oxidized Web 参数介绍

last status: 绿色(备份正常), 蓝色(正在备份), 红色(备份失败)
last update: 上一次备份的时间
action: 点击第一个图标就能看到设备备份文件内容,第二个图标为配置文件比对,第三个图标为手动强制备份.

安装 nginx 服务,默认 WEB 不提供登录认证,安装 nginx 进行登录认证

[root@host ~]# sudo yum install nginx

安装 httpd 服务

[root@host ~]# sudo yum install httpd-tools

创建一个文件夹用于存储用户信息

[root@host ~]# sudo mkdir /usr/local/nginx/
[root@host ~]# sudo chown -R 777 /usr/local/nginx/

创建 web 登录认证用户

[root@host ~]# htpasswd -c /usr/local/nginx/.htpasswd oxidized
New password:
Re-type new password:
Adding password for user oxidized

修改 nginx配置文件如下:

[root@host ~]# vi /etc/nginx/conf.d/default.conf
 server {
    listen       80;
    server_name  10.7.212.16;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        auth_basic "Welcome to Oxidized WEB Login";
        auth_basic_user_file /usr/local/nginx/.htpasswd;
        proxy_pass http://10.7.212.16:8888;
    }

赋予nginx 配置文件权限,并启动 nginx

[root@host ~]# sudo chown -R 777 /usr/local/nginx/
[root@host ~]# systemctl enable nginx && systemctl start nginx

登录 web 界面提示输入用户名密码,用之前创建的用户认证成功后跳转到 Oxidized


最后把 Oxidized nohub 设置为后台运行就行啦!

[root@host ~]# nohup oxidized >> /var/log/oxidized.log 2>&1 &

踩过的坑


华为防火墙HRP备份失败

$ 进入模块目录
[root@host ~]#  cd /opt/rh/rh-ruby25/root/usr/local/share/gems/gems/oxidized-0.28.0/lib/oxidized/model
$ 修改 vrp.rb 配置文件
[root@host ~]# vi vrp.rb
$ 修改如下:
prompt /^(HRP_[MS])?(<[w.-]+>)$/

nginx 安装失败

$ 新建 vim nginx.repo 文件
[root@host ~]#  vi /etc/yum.repos.d/
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

然后再 yum -y install nginx 就可以正常安装啦!

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇