ネットワーク機器のコンフィグバックアップを自動化するツールといえば、前に紹介したrancid、rConfigらへんがあるのだが、rancidに影響を受けたツールで『Oxidized』というツールを見かけたので、ちょっと触ってみることにした。
サポートしているNW機器のOSは結構多くて、CiscoのIOSやJuniperのJunOS・ScreenOSはもちろんのこと、VyattaとかRouterOS、FortiOSとかもあるようだ(NetGearェ…)。
Webクライアントもあり、かつ履歴管理はGitで行えるようなので結構便利そう。
今回は、このツールをCentOS 7に入れてみる。
1.インストール
まず、前提パッケージのインストールを行う。
yum install -y cmake sqlite-devel openssl-devel libssh2-devel ruby gcc ruby-devel git
Rubyのインストールができたら、gemでOxidizedのインストールを行う。
gem install oxidized --source http://rubygems.org
gem install oxidized-script oxidized-web --source http://rubygems.org
これでインストール完了。
2.『Oxidized』の設定
さて、それでは設定を行っていこう。
まず、プロセス実行ユーザとして「oxidized」ユーザを作成、スイッチしよう。
useradd oxidized -d /opt/oxidized
su - oxidized
次に、oxidizedコマンドを実行してやる。
コマンドを実行すると、デフォルトの設定ファイルとして「\~/.config/oxidized/config」というテンプレートファイルが作成される。
oxidized
[oxidized@BS-PUB-CENT7-01 ~]$ oxidized
edit ~/.config/oxidized/config
/usr/local/share/gems/gems/oxidized-0.18.0/lib/oxidized/config.rb:53:in `load': edit ~/.config/oxidized/config (Oxidized::NoConfig)
from /usr/local/share/gems/gems/oxidized-0.18.0/lib/oxidized/cli.rb:24:in `initialize'
from /usr/local/share/gems/gems/oxidized-0.18.0/bin/oxidized:9:in `new'
from /usr/local/share/gems/gems/oxidized-0.18.0/bin/oxidized:9:in `'
from /usr/local/bin/oxidized:23:in `load'
from /usr/local/bin/oxidized:23:in `'
[oxidized@BS-PUB-CENT7-01 ~]$ ls -la ~/.config/oxidized/config
-rw-rw-r--. 1 oxidized oxidized 418 10月 15 15:56 /opt/oxidized/.config/oxidized/config
設定ファイルのテンプレートができたら、一応バックアップだけ取って以下のように編集してしまおう。
今回は、各ノードのコンフィグはすべてgitで差分を管理し、かつその情報をローカルネットワーク内にいるGitlabに連携させるようにする。
なお、以下の例ではインターバル(コンフィグの確認間隔(interval:))を30秒にしているが、これは環境に合わせて適切な値を模索してもらいたい。
※事前にGitlabにはユーザの鍵設定をしておくこと。プロジェクトの鍵だとPUTできないので注意。
●/opt/oxidized/.config/oxidized/config
---
username: oxidized
password: oxidized
model: junos
interval: 30
use_syslog: false
log: "/opt/oxidized/.config/oxidized/logs/oxidized.log"
debug: true
threads: 30
timeout: 20
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
rest: Webインターフェイス用IPアドレスorホスト名:8888
vars: {}
groups: {}
input:
default: ssh, telnet
debug: false
ssh:
secure: false
output:
default: git
git:
user: blacknon
email: blacknon@XXX.com
single_repo: true
repo: /opt/oxidized/git/oxidized.git
hooks:
push_to_remote:
type: githubrepo
events: [post_store]
remote_repo: "git@GitLabサーバのIPアドレス:blacknon/NetworkConfiguration.git"
publickey: /opt/oxidized/.ssh/id_rsa.pub
privatekey: /opt/oxidized/.ssh/id_rsa
source:
default: csv
csv:
file: "/opt/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
F5: tmos
fortigate: fortios
screenos: screenos
vyos: vyatta
これで設定ファイルはOK。
次に、コンフィグを持ってくるノードのリストを作成する。
今回は、sourceのvar_mapでenableパスワードがある場合のみ、5列目に記述するように指定している。
●/opt/oxidized/router.db
対象ホスト名:ios:ユーザ名:パスワード:Enableパスワード
対象ホスト名:vyatta:ユーザ名:パスワード:Enableパスワード
設定ファイルを無事作成したら、最後に「oxidized」コマンドでプロセスを起動する。
(できれば、起動スクリプトを作ってやったほうがいいだろう)
oxidized
[oxidized@BS-PUB-CENT7-01 ~]$ oxidized
Puma 2.16.0 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://172.20.100.118:8888
起動したWeb管理画面がこちら。
今回はVyOSと手元にあったCatalystに対して実行している。
最新のコンフィグの内容は各ノードの右端列の一番左のボタンで見れる。
差分についてもdiffで確認することが可能だ。
今回はHookでGitlabにもデータを連携しているので、そちらでも確認ができる。
GitlabではなくGithubにもデータを連携できるし、インターバルに指定した間隔で自動的にコンフィグを確認、差分があったらちゃんと管理してGitlabやGithubに連携してくれるのでかなり便利だ。
対応しているNW機器が多いのも良い(個人的にVyattaとかpfSenseが対応しているのがポイント高い)。
家の環境のコンフィグバックアップにはこれを使おうかな。