【RANCID】NW機器コンフィグ差分管理ツールをインストール

RANCIDっていってもティム・アームストロングのランシドではないです。
最強のネットワーク機器のコンフィグ差分ツールです。

 

何がいいかっていちいち、機器にtelnetやsshでログインしてshowコマンドを叩いて確認しなくてもいいんです。
ほぼ、大事な機器の情報をブラウザで一発で見れちゃう。

 

しかも、cronで定期的に機器に確認に行き、差分を確認しブラウザで簡単に確認することができるんです。

RANCIDの特徴

冒頭にも記載したように、各ベンダーの機器に入ってshowコマンドで情報を取ってきてデータベースに保管ができる。
しかも、コンフィグに変更があった際に差分を即座にチェックできるという超最強ツールであります!

 

ciscoの例でいうと下記のコマンドを一塊で引っ張ってきます。

  • show version
  • show boot
  • show flash:(dir)
  • show interface系コマンド
  • show vtp status
  • show vlan
  • show running-config

 

RANCID対応ベンダー機器

今回は以下のソフトのバージョンで動作確認をしています。

  • CentOS バージョンrelease 6.5 (Final)
  • RANCID バージョン(2.3.8)
  • ViewVC バージョン(1.1.22)

また、管理できるネットワーク機器は、ほとんどの機器で対応可能になっています。

  • cisco系(ほとんどの機械で使用可能)
  • 3500系、IOS、IOS-XR
  • Nexusシリーズ(スイッチ、ルータ)
  • catalystシリーズ(5000、4000。catOS)
  • XRシリーズ
  • css(ciscoスイッチ)
  • Juniper
  • ERX(Juniper)
  • netscreen(firewall)
  • F5 BIGIPシリーズ
  • force10
  • Brocad(foundly)
  • 日立ルータ
  • alteon
  • arista
  • avocent
  • baynet
  • enterasys
  • extreme
  • ezt3
  • fortigate
  • hp
  • mikrotik
  • mrtd
  • netscalar(ロードバランサー)
  • procket
  • redback
  • riverstone(RS43000系など)
  • smc
  • tnt
  • zebra

 

今のところ、以下の機器(ベンダー)の動作確認はできました。

  • cisco
  • juniper、netscreen
  • F5
  • Brocad(foundly)

RANCIDインストール

RANCIDをインストールする前の事前の注意事項です。
これからインストールを行う際、順番を前後させたり、別の権限(adminなど)でファイルを作成すると正常に動作しなくなっちゃいます。

必ず、決められた権限(今回はrancid:root)で設定を行ってください。

 

登録するネットワーク機器をhostsに登録

# vi /etc/hosts

192.168.1.1 t-test01
192.168.1.2 t-test02

※アドレスをいちいち指定するのがめんどくさいので書きました。
DNSがあれば書かなくて結構です。

 

yum でパッケージ群をインストール

#yum -y install rancid httpd viewvc mod_python subversion cronie

No package rancid available.

※rancidのパッケージが入っていなかったのでパッケージをダウンロードすることにします。

 

 

rancidのファイルをダウンロード

今回のRANCIDの最新バージョンは2.3.8だったのでそいつをダウンロードすることにします。

最新版確認
こちらのサイトから最新版が確認できます。

ダウンロード実施

wgetコマンドでダウンロードを実施します。

# wget ftp://ftp.shrubbery.net/pub/rancid/rancid-2.3.8.tar.gz
--2014-03-12 11:40:00--  ftp://ftp.shrubbery.net/pub/rancid/rancid-2.3.8.tar.gz
           => `rancid-2.3.8.tar.gz'
ftp.shrubbery.net をDNSに問いあわせています... 129.250.47.99
ftp.shrubbery.net|129.250.47.99|:21 に接続しています... 接続しました。
anonymous としてログインしています... ログインしました!
==> SYST ... 完了しました。    ==> PWD ... 完了しました。
==> TYPE I ... 完了しました。  ==> CWD (1) /pub/rancid ... 完了しました。
==> SIZE rancid-2.3.8.tar.gz ... 379908
==> PASV ... 完了しました。    ==> RETR rancid-2.3.8.tar.gz ... 完了しました。
長さ: 379908 (371K) (確証はありません)

100%[=====================================================================================>] 379,908      613K/s 時間 0.6s

2014-03-12 11:40:03 (613 KB/s) - `rancid-2.3.8.tar.gz' へ保存終了 [379908]

rancidの解凍を実施

ダウンロードしたRANCIDのファイルを解凍します。

tar zxvf rancid-2.3.8.tar.gz

解凍後にmake installを実施します。

# ./configure
# make
# make install

※ついでに再インストールするときの削除方法です。(じぶんがやっちまったので)

make uninstall
make clean
make distclean -- ./configureで作成したファイルも削除する

 

RANCIDのファイル完成!

# ll /usr/local/rancid/etc/rancid.conf
-rw-r--r-- 1 root root 3803  3月 12 13:15 2014 /usr/local/rancid/etc/rancid.conf

ここまでくればとりあえずはOKっす。
それでは、設定編に行きます!

 

 

RANCIDの初期設定

ここからが重要になってくるので頑張ってください。
ド素人のじぶんでも行けました。

 

バックアップ実施

事前にバックアップを取っておきます。
後々、悲惨な目に合わないようにしときましょう。

# cp -p /usr/local/rancid/etc/rancid.conf /usr/local/rancid/etc/_rancid.conf_original

 

差分確認

# sdiff -s /usr/local/rancid/etc/rancid.conf /usr/local/rancid/etc/_rancid.conf_original

差分がないことを確認

 

 

権限をrancidに変更

ここは重要です。
権限が通ってないとうまく動かない場合があります。
今回、じぶんは(rancid:root)にしました。

cd /usr/local/
chown -R rancid:root rancid

rancid.confを変更

ここではどこにどのディレクトリやファイルを作成するかなどを設定していきます。
今回は以下を編集したのでご参考に。

# vi /usr/local/rancid/etc/rancid.conf
BASEDIR=/usr/local/rancid/var; export BASEDIR
CVSROOT=$BASEDIR/CVS; export CVSROOT
LOGDIR=/usr/local/rancid/var/logs/; export LOGDIR
RCSSYS=svn; export RCSSYS
FILTER_PWDS=ALL; export FILTER_PWDS
NOCOMMSTR=YES; export NOCOMMSTR
LIST_OF_GROUPS="cisco" ←今回はcisco機器を使用するためリストグループを”Cisco”にします。

 

複数のグループを作成する際は

LIST_OF_GROUPS="cisco juniper F5"

という感じでスペース区切りで作成します。

 

 

管理するネットワーク機器に関する設定

ここでは管理するネットワーク機器の登録をします。
ネットワーク機器にどのようにアクセスするか(telnet、ssh)を設定します。

まずは、バックアップから。

cloginrcファイルを検索すると今回はここにありやした。

# find / -name cloginrc.sample
/usr/local/rancid/share/rancid/cloginrc.sample

/usr/local/rancid/配下にcloginr.sampleをコピー

# cp -p /usr/local/rancid/share/rancid/cloginrc.sample /usr/local/rancid/.cloginrc

 

バックアップファイル作成

# cp -p .cloginrc _.cloginrc.sample_original

# ls -la
合計 8
-rw-r--r-- 1 root root 3772  3月 12 13:15 2014 _.cloginrc.sample_original
-rw-r--r-- 1 root root 3772  3月 12 13:15 2014 .cloginrc

telnet接続する為のコマンド作成

対象機器にtelnet接続するために.cloginrcファイルに追記します。
書き方は以下のような感じ。

”add password (アドレス)(vtyPassWord)(enablePassWord)”

[root@t-bobo011 var]# vi .cloginrc

# add password
add password 10.1.10.123 test testenable

ssh接続するためのコマンド作成

ssh接続の際は少し形式が変わるのでご注意ください。

# vi .cloginrc

# add password
#cisco系
add user        t-taggsw011             admin   #username
add method      t-taggsw011             ssh
add password    t-taggsw011     test test

#netscreen(juniper)※ciscoでもいけます。
add user        a-frw011                admin
add method      a-frw011                ssh
add password    a-frw011                q61254th
add autoenable  a-frw011                1     #enableコマンドを聞かないようにします。

パーミッションを変更

# chmod 600 .cloginrc

リポジトリの作成

ここ重要です!
srvadminでは作成しないこと!RANCIDがうまく動作しないです。

/usr/local/rancid/etcancid/rancid.conf の設定内容にしたがって、rancid-cvs コマンドで リポジトリを作成します。

#su - rancid
# /usr/local/rancid/bin/rancid-cvs

リビジョン 1 をコミットしました。
リビジョン 1 をチェックアウトしました。
リビジョン 1 です。
A         configs
追加しています              configs

リビジョン 2 をコミットしました。
A         router.db
追加しています              router.db
ファイルのデータを送信しています .
リビジョン 3 をコミットしました。

これ出力結果がでればOKです。

 

 

ネットワーク機器のリストを設定

ここはかなり重要です!
(device_type)は各ベンダーによって書式が違います!

とりあえずciscoなので以下を参考にしてください。

※書式

(hostname):(device_type):up

# cd /usr/local/rancid/var/cisco/
# vi router.db
t-test01:cisco:up
t-test02:cisco:up
~

その他のベンダーのは以下になります。

  • juniper = juniper
  • netscreen = netscreen
  • F5 = f5
  • ADX = foundly

ディレクトリの内容を確認する

先ほど、実施したリポトロジ作成でできたディレクトリが確認できます。

# cd /usr/local/rancid/var/
# ll
合計 20
drwxr-x--- 6 root root 4096  3月 12 18:18 2014 CVS
drwxr-x--- 4 root root 4096  3月 12 18:18 2014 cisco
drwxr-x--- 3 root root 4096  3月 12 17:57 2014 logs

※rancid.conf の LIST_OF_GROUPS、CVSROOT、LOGDIR の内容にそってディレクトリが作成されました。

 

 

ログインテスト

さあ、後は動作確認です。
まずはコマンドで対象の機器にログインできるか確認します。

su - rancid
-bash-4.1$ /usr/local/rancid/bin/clogin  t-test01
t-test01
spawn telnet t-test01
Trying 192.168.1.1...
Connected to t-test01.
Escape character is '^]'.

User Access Verification

Password:
t-test01>enable
Password:
t-test01#    正常にログインできたことを確認

RANCIDの動作テスト

ログインが成功すればRANCIDの動作確認です。
実際に機器に入り情報を取ってこれるか確認します。

su - rancid
 /usr/local/rancid/bin/rancid-run

ログ確認

ログは以下フォルダに保存されます。

# ll /usr/local/rancid/var/logs/
合計 16
-rw-r----- 1 root root 212  3月 12 18:02 2014 cisco.20140312.180238
-rw-r----- 1 root root 212  3月 12 18:05 2014 cisco.20140312.180518
-rw-r----- 1 root root 212  3月 12 18:07 2014 cisco.20140312.180700
-rw-r----- 1 root root 270  3月 12 18:23 2014 cisco.20140401.170101

正常なログ

# cat /usr/local/rancid/var/logs/cisco.20140401.170101
starting: Tue Apr 1 17:01:01 JST 2014

Trying to get all of the configs.
All routers sucessfully completed.

ending: Tue Apr 1 17:01:08 JST 2014

※エラーが出ていた場合。
.cloginrcが指定の場所にないと下記のエラーが発生。

Trying to get all of the configs.
10.1.10.123 clogin error: Error: password file (/usr/local/rancid/.cloginrc) does not exist

.cloginrcを指定の場所に置きましょう。じぶんがやっちまったことです。

※データベースが間違っている場合

Trying to get all of the configs.
unknown router manufacturer for t-vlb011: adx
=====================================
Getting missed routers: round 1.
unknown router manufacturer for t-vlb011: adx
=====================================
Getting missed routers: round 2.
unknown router manufacturer for t-vlb011: adx
=====================================
Getting missed routers: round 3.
unknown router manufacturer for t-vlb011: adx
=====================================
Getting missed routers: round 4.
unknown router manufacturer for t-vlb011: adx

送信しています              router.db
ファイルのデータを送信しています .
リビジョン 41 をコミットしました。

router.dbのdevice_typeがまちがっている可能性がありますので確認しましょう。

 

 

RANCIDをcron.dに登録

定期的にネットワーク機器を監視するため(1時間ごとに監視)します。
以下の感じで書いてください。

# vi /etc/cron.d/rancid
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/usr/local/rancid
# Run config differ hourly
1 * * * * rancid /usr/local/rancid/bin/rancid-run
50 23 * * * rancid /usr/bin/find /usr/local/rancid/var/logs -type f -mtime +2 -exec rm {} \;

RANCIDをブラウザで出力します

RANCIDの設定が終わり、いよいよブラウザで管理するソフトをインストールします。
今回はViewVCをインストールしましたので手順を以下でまとめます。

 

 

ViewVCのインストール

ViewVCのパッケージを以下からダウンロードします。

#  wget http://viewvc.tigris.org/files/documents/3330/49347/viewvc-1.1.22.tar.gz
# tar zxvf viewvc-1.1.22.tar.gz

ダウンロードが成功すればあとはインストールだけ!

# cd viewvc-1.1.22
# ./viewvc-install
This is the ViewVC 1.1.22 installer.

It will allow you to choose the install path for ViewVC.  You will now
be asked some installation questions.  Defaults are given in square brackets.
Just hit [Enter] if a default is okay.

Installation path [/usr/local/viewvc-1.1.22]: /usr/local/viewvc  ←名前はバージョンを削除しただけ

DESTDIR path (generally only used by package maintainers) []: 何もしないで実行

ViewVCの設定

viewvc.confファイルを以下のように設定します。

[root@t-bobo011 viewvc]# vi /usr/local/viewvc/viewvc.conf
#svn_roots =
svn_roots = rancid:/usr/local/rancid/var/CVS
#default_root =
default_root = rancid

後は、以下のURLで確認すれば見えるはずです!

http://x.x.x.x/cgi-bin/viewvc.cgi

 

バグがありますのでご確認を

Viewvcのインストール時、エラーが出るので確認以下のようなエラーが出るときがあります。

Invalid command 'PythonHandler', perhaps misspelled or defined by a module not included in the server configuration

要は、mod_pythonのモジュールがないのでエラーを履いている模様でした。
ということでpythonモジュールをインストールします。

wget http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tgz
tar xzvf Python-2.6.6.tgz
cd Python-2.6.6
./configure --enable-shared
make
make install

pythonを確認

うまく入ったようです。

# cat /etc/redhat-release
CentOS release 6.4 (Final)
# python -V
Python 2.6.6

しかし、まだ同じエラーを吐くのでmod_pythonのみをインストールします。

 

 

mod_pythonインストール

やっとこさ、モジュールが見つかったのでダウンロードとインストールをします。

#wget http://archive.apache.org/dist/httpd/modpython/mod_python-3.3.1.tgz

#wget http://dist.modpython.org/dist/mod_python-3.5.0.tgz

--2014-03-14 15:41:33--  http://archive.apache.org/dist/httpd/modpython/mod_python-3.3.1.tgz
archive.apache.org をDNSに問いあわせています... 2001:610:1:80bc:192:87:106:229, 140.211.11.131, 192.87.106.229
archive.apache.org|2001:610:1:80bc:192:87:106:229|:80 に接続しています... 失敗しました: ホストへの経路がありません.
archive.apache.org|140.211.11.131|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 447954 (437K) [application/x-tar]
`mod_python-3.3.1.tgz' に保存中

100%[=====================================================================================>] 447,954      383K/s 時間 1.1s

2014-03-14 15:41:38 (383 KB/s) - `mod_python-3.3.1.tgz' へ保存完了 [447954/447954]

tar xzvf mod_python-3.5.0.tgz

まだまだエラーを吐きやがる

以下でも全然うまくいきません。

# cd mod_python-3.3.1
./configure --with-python=/usr/local/bin/python2.6 --with-apxs=/usr/sbin/apxs
make
make install

※makeでエラーが発生

make[1]: *** [mod_python.so] エラー 1
make[1]: ディレクトリ `/root/mod_python-3.3.1/src' から出ます
make: *** [do_dso] エラー 2

make installできない理由はpython-develが無かったため

問題はここでした。
python-develはyumでインストールできるので事前に入れておいてください!!!

前提パッケージとして以下を必ずインストールしておくこと!

# yum install gcc
# yum install httpd
# yum install httpd-devel
# yum install python-devel   #これを入れないとmakeできない

mod_python-3.3.1はバグがある為、makeする前にファイル修正をすること。

mod_pythonは以下のように142行目でのバグがあります。
ここを修正すれば。。。

# cd mod_python-3.3.1
# vim src/connobject.c

142行目
while ((bytes_read < len || len == 0) &&
-           !(b == APR_BRIGADE_SENTINEL(b) ||
+           !(b == APR_BRIGADE_SENTINEL(bb) ||
             APR_BUCKET_IS_EOS(b) || APR_BUCKET_IS_FLUSH(b))) {

# ./configure
# make
# make install   ←python-develをyumインストールしていないと上記エラーが再度発生するので注意する

それではもう一度ご確認を!

RANCID完成

きたーーーー!!!!!
以上です!

お疲れでやんした!

以上です。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!