はじめに
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
目次
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を以下に編集します。
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 にブラウザアクセス
画面に従って、rootのパスワードを初期設定してください。
gitlab oxidizedユーザ作成
oxidizedが使うユーザを作ります。
http://localhost:10080 にブラウザアクセス
oxidizedのユーザを作成して、画面通り進んでいきます。
gitlab リポジトリ作成
oxidizedで使うプライベートリポジトリを作ります。今回は以下の名前で。
Project name: config-auto-collector
リポジトリの作成が完了しました。
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:
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日位毎くらいでもいいかも)
---
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を以下に編集します。
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されます。
めでたしめでたし。
後は細かなチューニングやホスト登録とかして、本番環境にデプロイしましょう。
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になっているんだがなんでじゃ?そういうもの?
おわり