LoginSignup
5
3

More than 3 years have passed since last update.

oxidizedとgitlabでネットワーク機器のコンフィグ管理自動化検証

Posted at
1 / 2

はじめに

oxidizedとgitlabでネットワーク機器のコンフィグ管理を自動化する検証の個人メモ。
ネットワーク機器をたくさん運用している現場に役立つかも。

今回の検証では、VagrantでvSRX、dockerでoxidizedとgitlabを立ち上げます。
vSRXのコンフィグをoxidizedで自動取得し、gitlabに保存することが目的です。

設定変更作業後にコンフィグを手動で取得して、そのファイルをUSBで社内NWに移して、共有フォルダに格納して構成管理する、、という無駄作業が少しでも減ればうれしいところ。

最新のコンフィグが適切と管理されていないと、故障等で機器交換するとき大変なので、ちゃんと自動化します。

環境

  • mac OS Catalina 10.15.7
  • docker 19.03.13
  • docker-compose 1.27.4
  • vagrant 2.2.10

目次

  1. docker準備
  2. vSRX準備
  3. gitlab準備
  4. oxidized準備
  5. 実行

docker準備

docker周りの準備をします

dockerインストール

この記事を参考にdockerとdocker-composeをインストール

以下自分の環境

# docker -v
Docker version 19.03.13, build 4484c46d9d
$ docker-compose -v
docker-compose version 1.27.4, build 40524192

dockerが利用できるメモリ上限を引き上げる

Mac版dockerはデフォルトでメモリが2GBまでしか使えないので、この記事を参考にいい感じに増やしておく。メモリ4G/スワップ1Gくらい?マシンスペックと相談。

これを怠ると、後でgitlabに502エラーを一生突きつけられて心折れます。
gitlabがやたらメモリ使うので注意!

vSRX準備

今回は、ネットワーク機器を模擬するのにVagrant+vSRXを使います。

vagrantとvirtual boxをインストール

この記事を参考にvagrantとvirtual boxをインストール

以下自分の環境

$ vagrant -v
Vagrant 2.2.10

vagrantのプラグインをインストール

vSRXを動かすのにプラグインが必要?なので無心で入れていきます。

$ vagrant plugin install vagrant-host-shell
$ vagrant plugin install vagrant-junos

以下自分の環境

$ vagrant plugin list
vagrant-host-shell (0.0.4, global)
vagrant-junos (0.2.1, global)

vSRX立ち上げ

太古のvSRXをvagrant上で起動します。packetmode(ルータ)のvSRXを使ってください。
間違えてflowmode(FireWall)のvSRXを使うと、pingで一生複製(DUP)されて返ってきて気が狂います。

# ディレクトリ作成
$ mkdir vSRX

# ディレクトリに移動
$ cd vSRX

# vSRXのVagrantfileを作る
$ vagrant init juniper/ffp-12.1X47-D15.4-packetmode

# vSRXのIPを適当に設定。今回は192.168.33.10
$ sed -i '' -e 's/# config.vm.network "private_network", ip: "192.168.33.10"/config.vm.network "private_network", ip: "192.168.33.10"/' Vagrantfile

# vSRXを起動 気長に待つ 結構時間かかる
$ vagrant up

# ステータス確認 runningになっていればOK
$ vagrant status
Current machine states:

default                   running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

vSRXユーザ作成

後で使うので、oxidized用にユーザを作ります。
前の項目と同じディレクトリで作業。
ユーザとパスワードは後で使います。

# vSRXにsshログイン
$ vagrant ssh
--- JUNOS 12.1X47-D15.4 built 2014-11-12 02:13:59 UTC
root@vsrx%

# vSRX cliモードに移行
root@vsrx% cli
root@vsrx> 

# vSRX configureモードに移行
root@vsrx> configure
root@vsrx#

# oxidizedのユーザを追加
root@vsrx# set system login user oxidized class super-user
root@vsrx# set system login user oxidized authentication plain-text-password
New password:[好きなパスワード入れてエンター]
Retype new password:[もう一回入れてエンター]

# 設定をcommitする
root@vsrx# commit

# exitを数回やってvSRXから抜ける
# ssh oxidized@192.168.33.10 とかでsshできるのを確認するのもあり
# ssh時、WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!がでたらknow_hostsから192.168.33.10を消してみる

gitlab準備

dockerでgitlabを立てていきます。

docker-compose.yaml作成

gitlabのdocker-composeファイルを作ります。

# ディレクトリ作成
$ mkdir gitlab

# ディレクトリに移動
$ cd gitlab

# docker-compose.yamlファイル作成
$ touch docker-compose.yaml

docker-compose.yamlを以下に編集します。

gitlab/docker-compose.yaml
version: '3.8'
services:
  gitLab:
    image: gitlab/gitlab-ce:latest
    ports:
     - "10080:80"
    volumes:
     - './config:/etc/gitlab'
     - './logs:/var/log/gitlab'
     - './data:/var/opt/gitlab'

gitlab実行

docker-compose upで実行していく

$ docker-compose up -d

docker-compose up自体は早いですが、
プラウザで見れるようになるまで、気長に待ちます。結構時間かかります。
立ち上げが完了するまでは、woops!とか502とかエラーが表示されて悲しい気持ちになります。待ちましょう。

gitlabアクセス

http://localhost:10080 にブラウザアクセス

fig1.png

画面に従って、rootのパスワードを初期設定してください。

gitlab oxidizedユーザ作成

oxidizedが使うユーザを作ります。

http://localhost:10080 にブラウザアクセス

fig2.png

oxidizedのユーザを作成して、画面通り進んでいきます。

gitlab リポジトリ作成

oxidizedで使うプライベートリポジトリを作ります。今回は以下の名前で。
Project name: config-auto-collector

fig3.png

リポジトリの作成が完了しました。

fig4.png

oxidized準備

oxidized周りの準備をします

docker-compose.yaml作成

oxidizedのdocker-composeファイルを作ります。

# ディレクトリ作成
$ mkdir oxidized

# oxidized/に移動
$ cd oxidized

# docker-compose.yamlファイル作成
$ touch docker-compose.yaml

docker-compose.yamlを以下に編集します。
extra_hostsの存在知らなくて2日寝込みました
dockerコンテナにhostsを自動設定してくれるので、便利

oxidized/docker-compose.yaml
oxidized:
  restart: always
  image: oxidized/oxidized:latest
  ports:
    - 8888:8888/tcp
  environment:
    CONFIG_RELOAD_INTERVAL: 600
  volumes:
    - ./oxidized:/root/.config/oxidized
  extra_hosts:
    - vSRX:192.168.33.10

oxidizedの設定(config)

oxidizedのconfig設定をしていきます。

# もいっこディレクトリ作成
$ mkdir oxidized

# oxidized/oxidized/に移動
$ cd oxidized

# configファイル作成
$ touch config

configを以下に編集します。
不要な設定がある気もしますが、信じてコピペします。
一部IPやパスワードは自分の環境のものを入れてください。
取得間隔(interval)が10秒になっているので、本番環境に入れるときは要チューニング。
(半日、1日位毎くらいでもいいかも)

oxidized/coxidized/config
---
username: oxidized
password: oxidized
model: junos
resolve_dns: true
interval: 10
use_syslog: false
log: "/root/.config/oxidized/logs/oxidized.log"
debug: false
threads: 30
timeout: 20
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
rest: 127.0.0.1:8888
next_adds_job: false
vars: {}
groups: {}
models: {}
pid: "/root/.config/oxidized/pid"
crash:
  directory: "/root/.config/oxidized/crashes"
  hostnames: false
stats:
  history_size: 10
input:
  default: ssh, telnet
  debug: false
  ssh:
    secure: false
  ftp:
    passive: true
  utf8_encoded: true
output:
  default: git
  git:
      user: oxidized
      email: [gitlabでoxidizedアカを作るときに指定したメールアドレス]
      single_repo: true
      repo: "/root/.config/oxidized/config-auto-collector"
hooks:
  push_to_remote:
    type: githubrepo
    events: [post_store]
    remote_repo: "http://[ローカルホストの実IP]:10080/oxidized/config-auto-collector.git"
    username: oxidized
    password: [gitlabのパスワード]
source:
  default: csv
  csv:
    file: "/root/.config/oxidized/router.db"
    delimiter: !ruby/regexp /:/
    map:
      name: 0
      model: 1
      username: 2
      password: 3
    vars_map:
      enable: 4
model_map:
  cisco: ios
  juniper: junos

oxidizedの設定(router.db)

oxidizedのrouter.db設定をしていきます。
oxidizedで取得対象となるネットワーク機器を設定する感じです。


# oxidized/oxidized/配下で作業
# router.dbファイル作成
$ touch router.db

router.dbを以下に編集します。

oxidized/coxidized/router.db
vSRX:juniper:oxidized:[vSRXのoxidizedユーザのパスワード]

リポジトリ準備

せっかく作ったリポジトリをcloneしておきましょう。
localhostなどは使わずに、必ず実IPでアクセスしてください。
このリポジトリは、dockerコンテナと共有されるファイルですので、
localhostにしておくとdockerコンテナ側から簡単にアクセスできなくなります。(たぶん)

# oxidized/oxidized/配下で作業
$ git clone http://oxidized@[ローカルホストの実IP]:10080/oxidized/config-auto-collector.git

実行

やっとoxidized実行。
gitlab、vSRXが立ち上がっている状態で実行します。

oxidized起動

# oxidized/配下で作業
$ docker-compose up -d

うまくいくと勝手にリポジトリにvSRXのコンフィグが入ってきます。
もちろん、vSRXのconfigを変更すると、自動でリポジトリにpushされます。
めでたしめでたし。

fig5.png

後は細かなチューニングやホスト登録とかして、本番環境にデプロイしましょう。

Tips

vagrantが固まったとき

ps -ef|grep VBoxで出てきたpidをkillしましょう。
vSRXがよく固まる印象

dockerコンテナに入る

『docker 入る』と2万回くらいググりました。覚えましょう

$ docker-compose exec [container名] bash

TODO

  • ファイル名がホスト名になっちゃうのどうにかしたい
  • 出力されるconfigファイルに、実行コマンドが表示されないのなんとかしたい
  • 自作modelで取得情報を拡張させたい(show int terseとか)
  • 実環境で試す
  • ホストの扱いいい方法ないもんかなあ、、対象ホストが多くなると、手打ち辛い

感想

  • oxidizedはドキュメント少なくて辛い
  • インターネットにでれる環境であれば、わざわざローカルにgitlab立てなくてOK
  • 一回デプロイしてしまえばあとは楽ちん運用できそう
  • cvsのUIがダサいので、gitlabを使ってみたけど、単純にコンフィグファイルの世代管理だけならcvsのほうが見やすい気がする
  • gitlabの機能を持て余している感ある。なんか面白いことできないかなあ
  • gitlabリソース使いすぎ、仮想環境じゃないほうがいいのかも
  • gitはそもそもネットワーク運用メンバーに馴染みがないから、あんま使わないほうが良いかも
  • vSRX、plain-text-passwordでユーザ作ってもコンフィグみるとencryptedになっているんだがなんでじゃ?そういうもの?

おわり

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3