CentOS 7にNW機器のコンフィグバックアップ自動化ツール「rancid」をインストールする

NW機器のコンフィグ自動バックアップ方法について調べていたところ、「rancid」というツールが良さそうだったので少し触ってみることにした。
比較的いろんなベンダーのNW機器に対応しており、CVSを用いての世代管理もできるようで、情報も豊富にありそうだ。一応、ViewVCを入れることでWebからコンフィグを管理させることも可能なようだ。というわけで、今回はCentOS7にこのrancid + ViewVCをインストールしてみる。こちらを見る限り、yumやapt-getでもインストールできそうだが、今回はソースをダウンロードしてインストールを行うことにした。手順については、こちらを参考に進めている。

なお、事前に以下のコマンドでSELinuxの無効化、firewalldで必要となるポートの開放を行っている。

setenforce 0
sed -i.bak "/SELINUX/s/enforcing/disabled/g" /etc/selinux/config
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

1.前提パッケージのインストール

まずは、以下のコマンドで前提となるパッケージ類の導入をする。

yum -y update
yum -y install vim wget ftp telnet mariadb-server mariadb perl tcl expect gcc cvs rcs httpd autoconf php-common php-gd php-pear php-pecl-memcache php-mysql php-xml mod_ssl MySQL-python

ViewVCを利用するために入れたhttpdのサービス起動設定をする。

systemctl enable httpd
systemctl start httpd

次に、グループおよびユーザの作成をする。

groupadd netadm
useradd -g netadm -c "Networking Backups User" -d /home/rancid rancid

2.rancidのインストール・初期設定を行う

次に、rancidのインストールを行う。
まず、以下のコマンドでソースのダウンロードを行う。
なお、最新版のパッケージについてはこちらからURLを確認しておくこと。

mkdir /home/rancid/tar
cd !$
wget ftp://ftp.shrubbery.net/pub/rancid/rancid-3.5.1.tar.gz

ダウンロード完了後、以下のコマンドでコンパイルしインストールを行う。

tar xzvf rancid-*.tar.gz
cd rancid-*/
./configure --prefix=/usr/local/rancid
make && make install

これで、rancidのインストールが完了した。
次に、バックアップ対象の機器情報やrancidのコンフィグについて、テンプレートなどをコピーしてファイルの作成を行う。

cp cloginrc.sample /home/rancid/.cloginrc
chmod 0600 /home/rancid/.cloginrc
chown -R rancid:netadm /home/rancid/.cloginrc
chown -R rancid:netadm /usr/local/rancid/
chmod 775 /usr/local/rancid/

設定ファイルを編集して、任意のグループ名を設定する。

sed -i.bk '/# list of rancid groups/,/^#LIST_OF_GROUPS/cLIST_OF_GROUPS="任意のグループ名(今回は「NetworkDevice」にしている)"' /usr/local/rancid/etc/rancid.conf

rancidユーザに切り替えてCVSの設定を行う。

su - rancid
/usr/local/rancid/bin/rancid-cvs
[root@BS-PUB-WEBTOOL-TEST01 rancid-3.5.1]# su - rancid
[rancid@BS-PUB-WEBTOOL-TEST01 ~]$ /usr/local/rancid/bin/rancid-cvs

No conflicts created by this import

cvs checkout: Updating Router
Directory /usr/local/rancid/var/CVS/Router/configs added to the repository
cvs commit: Examining configs
cvs add: scheduling file `router.db' for addition
cvs add: use 'cvs commit' to add this file permanently
RCS file: /usr/local/rancid/var/CVS/Router/router.db,v
done
Checking in router.db;
/usr/local/rancid/var/CVS/Router/router.db,v <-- router.db
initial revision: 1.1
done

No conflicts created by this import

cvs checkout: Updating And
Directory /usr/local/rancid/var/CVS/And/configs added to the repository
cvs commit: Examining configs
cvs add: scheduling file `router.db' for addition
cvs add: use 'cvs commit' to add this file permanently
RCS file: /usr/local/rancid/var/CVS/And/router.db,v
done
Checking in router.db;
/usr/local/rancid/var/CVS/And/router.db,v <-- router.db
initial revision: 1.1
done

No conflicts created by this import

cvs checkout: Updating Switches
Directory /usr/local/rancid/var/CVS/Switches/configs added to the repository
cvs commit: Examining configs
cvs add: scheduling file `router.db' for addition
cvs add: use 'cvs commit' to add this file permanently
RCS file: /usr/local/rancid/var/CVS/Switches/router.db,v
done
Checking in router.db;
/usr/local/rancid/var/CVS/Switches/router.db,v <-- router.db
initial revision: 1.1
done

3.ViewVCのインストール・初期設定を行う

3-1.ViewVCのインストール

次に、Webでコンフィグファイルを管理できるよう、ViewVCのインストールを行う。
ViewVCの最新版については、こちらからバージョンを確認してURLを適宜書き換えてもらいたい。

cd /home/rancid/tar/
wget http://viewvc.org/downloads/viewvc-1.1.25.tar.gz
tar xzvf viewvc-*.tar.gz
cd viewvc-*/
./viewvc-install
[root@BS-PUB-WEBTOOL-TEST01 viewvc-1.1.25]# ./viewvc-install
This is the ViewVC 1.1.25 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.25]:

DESTDIR path (generally only used by package maintainers) []:

Installing ViewVC to /usr/local/viewvc-1.1.25:
   created   /usr/local/viewvc-1.1.25/bin/cgi/
   installed /usr/local/viewvc-1.1.25/bin/cgi/viewvc.cgi
   ....

これで、ViewVCのインストールが完了した。
次に、設定ファイルを編集してrancidのCVSを参照するように定義する。

sed -e '/^#root_parents =/croot_parents = /usr/local/rancid/var/CVS : cvs' \
    -e '/^#rcs_dir/crcs_dir = /usr/local/bin' \
    -e '/^#use_rcsparse/cuse_rcsparse = 1' \
    -i.bk /usr/local/viewvc-*/viewvc.conf

3-2.httpdまわりの設定を変更する

次に、以下のコマンドでcgiファイルをコピーする。

cp /usr/local/viewvc-*/bin/cgi/*.cgi /var/www/cgi-bin
chmod +x /var/www/cgi-bin/*.cgi
chown apache:apache /var/www/cgi-bin/*.cgi

httpdの設定ファイルを編集する。

cat <<EOF >> /etc/httpd/conf.d/rancid.conf
<VirtualHost *:80>
        DocumentRoot /var/www
        ScriptAlias /cgi-bin/ "/var/www/cgi-bin"
        ScriptAlias /viewvc /var/www/cgi-bin/viewvc.cgi
        ScriptAlias /query /var/www/cgi-bin/query.cgi
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>
</VirtualHost>
EOF

3-3.MariaDBまわりの設定を変更する

ViewVCで利用するMariaDBに関する設定を行う。
まず、以下のコマンドでサービスの起動設定と最低限のセキュリティ設定を行う。

systemctl enable mariadb
systemctl start mariadb
mysql_secure_installation

次に、以下のコマンドでViewVCで利用するためのユーザ(「VIEWVC」およびリードのみの権限を持つ「VIEWVCRO」ユーザ)の作成を行う。

mysql -u root -p -e "CREATE USER 'VIEWVC'@'localhost' IDENTIFIED BY 'パスワード';
GRANT ALL PRIVILEGES ON *.* TO 'VIEWVC'@'localhost' WITH GRANT OPTION;
CREATE USER 'VIEWVCRO'@'localhost' IDENTIFIED BY 'パスワード';
GRANT SELECT ON ViewVC.* TO 'VIEWVCRO'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit"

データベースの作成スクリプトを実行する。

/usr/local/viewvc-*/bin/make-database
[root@BS-PUB-WEBTOOL-TEST01 viewvc-1.1.25]# /usr/local/viewvc-*/bin/make-database
MySQL Hostname (leave blank for default):
MySQL Port (leave blank for default):
MySQL User: VIEWVC
MySQL Password: P@ssw0rd
ViewVC Database Name [default: ViewVC]:

Database created successfully.  Don't forget to configure the
[cvsdb] section of your viewvc.conf file.

ViewVCの設定ファイルを編集し、DBへの接続設定を行う。

sed -e '/^#host/chost = localhost' \
    -e '/^#port/cport = 3306' \
    -e '/^#database_name/cdatabase_name = ViewVC' \
    -e '/^#user/cuser = VIEWVC' \
    -e '/^#passwd/cpasswd = パスワード' \
    -i.bk /usr/local/viewvc-*/viewvc.conf

最後に、以下のコマンドを実行してデータベースをビルド、Apacheを再起動する。

/usr/local/viewvc-*/bin/cvsdbadmin rebuild /usr/local/rancid/var/CVS/CVSROOT/
systemctl restart httpd

あとは、ブラウザから「http://サーバのIPアドレス/viewvc」にアクセスすればよい。

これで、ViewVCの設定が完了した。

4.各機器の設定・バックアップの実行

4-1.接続情報の設定ファイルを編集

接続情報について設定されているファイル「/home/rancid/.cloginrc」に、各NW機器の接続情報についてを記述する。
接続する各機器のIDやパスワードはワイルドカードでの指定もできる(ホスト名の部分一致で同じユーザIDやパスワードを指定できる)。

telnetおよびsshで、以下のように設定をする。
なお、事前にバックアップをとっておき、もともと入っていた設定については削除をすること。

telnet

add password IPアドレスorホスト名(ワイルドカードあり) ログインパスワード Enableパスワード

ssh

add user IPアドレスorホスト名(ワイルドカードあり) ユーザ名
add method IPアドレスorホスト名(ワイルドカードあり) ssh
add password IPアドレスorホスト名(ワイルドカードあり) ログインパスワード Enableパスワード

4-2.機器リストの設定

次に、各機器のリストを設定する。
リストは、「/usr/local/rancid/var/」配下にある「Router」および「Switches」フォルダにあるrouter.dbがそれに当たる。

機器の種類に応じて、それぞれのファイルに追加する。設定できるデバイスタイプについては、こちらを参照するとよいだろう。
(:(コロン)ではなく;(セミコロン)である)

ホスト名;デバイスタイプ(ベンダー);up

4-3.接続テストを行う

実際に、接続テストを行ってみよう。
以下のコマンドを実行する。

sudo -u rancid /usr/local/rancid/bin/clogin 対象ホスト
[root@BS-PUB-WEBTOOL-TEST01 viewvc-1.1.25]# sudo -u rancid /usr/local/rancid/bin/clogin 172.2X.XXX.XXX
172.2X.XXX.XXX
spawn telnet 172.2X.XXX.XXX
Trying 172.2X.XXX.XXX...
Connected to 172.2X.XXX.XXX.
Escape character is '^]'.

User Access Verification

Password:
BN-L2-T01>enable
Password:
BN-L2-T01#

無事ログインできるようであれば接続設定はちゃんとできている。

4-4.バックアップを取得してみる

ログインが無事行えたら、ちゃんとバックアップが行えるか確認をする。
以下のコマンドを実行する。

sudo -u rancid /usr/local/rancid/bin/rancid-run

無事に行えた場合は、ログに正常終了として残っている。
ログは、「/usr/local/rancid/var/logs」配下に出力されている。
"All routers sucessfully completed."の一文があれば正常に終了している。

バックアップしたコンフィグファイルについては、「/usr/local/rancid/var/カテゴリ名/configs/」配下に配置されている。
ViewVCからも見れるので、そちらでも確認可能だ。

定期的にバックアップを取得する場合は、先ほど実行したコマンドをcronで回してやるとよいだろう。