RANCIDでVyatta/VyOSのコンフィグを管理する
はじめに
自宅のサーバ環境を一部更新するのにあたってついでなので VyOS/1.1.0 のインストールをしてみました。
こんな感じで、2台の hypervisor 上に VyOS/1.1.0 と VC/6.3 が乗っています。VLAN 101, 103 はそれぞれ hypervisor 上の物理的に異なる NIC で接続されているので、片側の Hypervisor の VLAN101 用 NIC (uplink) が壊れてももう片側の hypervisor から接続できるようになっています。といっても VLAN 101,103 を収容するスイッチは1台なのでたいした意味ないですが…。どちらかというと無駄に階層 OSPF 作ってみたかったってだけか。
RANCIDでコンフィグ管理
さて。こうして複数ルータ管理するとなると、コンフィグの自動バックアップや変更管理をやりたいと思うわけです。まあ、もともと RANCID+ViewVCでコンフィグ管理 しているので、そこに乗っけてしまおうと。Vyatta 1台だけでずっとやってたときは、ベースのコンフィグ採っておけばまあ後は何とかなっちゃうので放置していましたが、この際まとめて RANCID でとるようにしちゃおうと。
RANCID 導入したのが 2011 年 12 月ということでほぼ 3 年前…。もしかしたら今やるには古いのでは、という気がするけどそう違ってないでしょうおそらく。
"RANCID Vyatta" とかで検索すると
というのが出てきたのでこれを使ってみます。
ダウンロードとインストール
git clone するか zip 落として解凍します。
~/vyatta-rancid$ ls LICENSE README.md vlogin vrancid ~/vyatta-rancid$
vlogin, vrancid を rancid の $BASEDIR/bin
にコピーします。いまの環境では $BASEDIR=/var/lib/rancid
です。
/var/lib/rancid/bin$ ls -l | egrep -e' v[login|rancid]' -rwxr-xr-x 1 root root 13910 Nov 23 12:39 vlogin -rwxr-xr-x 1 root root 9246 Nov 23 14:22 vrancid /var/lib/rancid/bin$
デバイスクラスの追加
この $BASEDIR/bin
は各ベンダ・各種機器ごとの expect script 類が入っているのですが、どのデバイスに対してどのコマンドを使うかという情報が $BASEDIR/bin/rancid-fe
の中にあるので、それを編集してやります。
--- rancid-fe.orig 2014-11-23 12:46:19.000000000 +0900 +++ rancid-fe 2014-11-23 12:46:48.000000000 +0900 @@ -82,7 +82,8 @@ 'riverstone' => 'rivrancid', 'smc' => 'srancid', 'tnt' => 'tntrancid', - 'zebra' => 'zrancid' + 'zebra' => 'zrancid', + 'vyos' => 'vrancid' ); if ($vendortable{$vendor} eq "") {
デバイスの登録
追加したデバイスクラス("vyos")で VC/VyOS を登録してやります。(ここでは $LIST_OF_GROUPS="router switch"
みたいになっています。)
/var/lib/rancid/router# ls configs router.db routers.all routers.down routers.up /var/lib/rancid/router# cat router.db edge:cisco:up rtr6:cisco:up vyatta:vyos:up vyos:vyos:up /var/lib/rancid/router#
なお、各ルータは OS そのまま "vyatta", "vyos" というホスト名にしてしまっていて、ホスト名を hosts に書いちゃってます…こうして見ると紛らわしいな…。
あ、あと、ルータへのログイン情報(アカウント情報) $BASEDIR/.cloginrc も必要に応じて適宜編集してください。宅内環境だとルータへのログイン情報は統一しちゃってるので今回は特にいじってないです…。
動作確認
順序的には、動作チェックはデバイスの登録する前の方がいいか…。
自動ログイン
vlogin コマンドで自動ログインできるかどうかを試しましょう。
/var/lib/rancid$ sudo -u rancid bin/vlogin vyos vyos spawn ssh -c 3des -x -l stereocat vyos Welcome to VyOS stereocat@vyos's password: Linux vyatta 3.13.11-1-amd64-vyos #1 SMP Wed Sep 3 20:04:22 UTC 2014 x86_64 Welcome to VyOS. This system is open-source software. The exact distribution terms for each module comprising the full system are described in the individual files in /usr/share/doc/*/copyright. Last login: Mon Nov 24 05:47:12 2014 from 192.168.2.16 stereocat@vyos:~$ stereocat@vyos:~$ exit logout Connection to vyos closed. /var/lib/rancid$
自動ログイン+コマンド実行
-c でコマンドを渡すだけ。これ、RANCID 実行時のデバッグに使います。
/var/lib/rancid$ sudo -u rancid bin/vlogin -c"show version" vyos (略) stereocat@vyos:~$ stereocat@vyos:~$ set terminal length 0 stereocat@vyos:~$ show version exit Version: VyOS 1.1.0 Description: VyOS 1.1.0 (helium) Copyright: 2014 VyOS maintainers and contributors Built by: maintainers@vyos.net Built on: Thu Oct 9 22:27:26 UTC 2014 Build ID: 1410092227-af6433f System type: x86 64-bit Boot via: image Hypervisor: VMware HW model: VMware Virtual Platform HW S/N: VMware-56 4d 96 d9 68 0d 2f d4-ee 07 e0 6d 78 bd 18 88 HW UUID: 564D96D9-680D-2FD4-EE07-E06D78BD1888 Uptime: 12:08:06 up 1 day, 17 min, 1 user, load average: 0.00, 0.01, 0.05 stereocat@vyos:~$ exit logout Connection to vyos closed. /var/lib/rancid$
VC 向け注意
上の vlogin -c の実行結果で気づけばよかったんですが、rancid-run -r vyatta したら expect がタイムアウトしてしまいました。結論から行くと、VC6.3 に対して show configuration したときに more (pager) 処理ができていなくて止まっていたという話なんですが、ページャをオフにするコマンドが違うんだよね。
- VC6.3: terminal length 0
- VyOS: set terminal length 0
やるんだったら vlogin で set terminal length 0 投げてる当たりをいじるんだろうけど、今回はちょっと姑息な手で逃げています。あんまりいい方法じゃないけど…*1
--- /home/stereocat/vyatta-rancid/vrancid 2014-11-23 12:38:53.000000000 +0900 +++ vrancid 2014-11-23 14:22:57.000000000 +0900 @@ -217,9 +217,9 @@ # Main @commandtable = ( - {'show version' => 'ShowConfiguration'}, - {'show configuration' => 'ShowConfiguration'}, - {'show configuration commands' => 'ShowConfiguration'}, + {'show version | no-more' => 'ShowConfiguration'}, + {'show configuration | no-more' => 'ShowConfiguration'}, + {'show configuration commands | no-more' => 'ShowConfiguration'}, ); # Use an array to preserve the order of the commands and a hash for mapping # commands to the subroutine and track commands that have been completed.
*1:別途 "vyatta" クラスを作って vlogin/vrancid を別名でコピーしてページャをオフにするコマンド書き換えて…とかやるのもそれはそれで無駄だなあ、と。VC は前に作ったのをそのまま使ってるけど、今後これに対してどうこうするという話は基本ナイので。