自分がRENATの開発者である。今回、ユーザの立場から、RENATの使い方を説明する 。
元々、RENATはネットワーク装置の検証の目的で作られた(参照資料)。今回、ソフトウェア・ルータを用い、renatの使い方を簡単に説明する。物理ルータや他のネットワーク装置へ対しての使い方は同じである。
仮想ルータはなんでもいいが、昔からBIRDを使おうと持っていたので、今回birdを使ってみる。
#環境
- osX Mojave
- docker desktop Version 2.0.0.3
- renat 0.1.14
概要
以下の流れで説明する
- renatとは
- ネットワークトポロジー
- renatのインストール
- birdルータのインストール
- シナリオ作成・実行
- 実行結果の確認
- まとめ
RENATとは
詳細を省略するが、RENATはRobotframeworkを拡張したネットワーク検証用のフレームワークである。簡単なテキストのシナリオを用い、ラボで検証する内容をほぼ再現でき、実際の現場、サービスで既に多く使われている。
ネットワークトボロジー
作りたいトポロジーはとても簡単なもので、ソフトウェアルータ(bird)とrenatサーバが直結されるものである。
+-------+ +-------------+
| ルータ +-----+ renatサーバ |
+-------+ +-------------+
birdルータのインストール
今回、cloudRouter(fedora/bird)を試す。以下の手順で一つのルータを立ち上げる。
root権限でcontainerを開始する
$ docker run --privileged --publish-all=true cloudrouter/bird-fedora /sbin/init
設定を変更するため、containerへloginする
$ docker exec -it 22f73220b705 /bin/bash --login
telnet-serverを追加し、rootでloginできるようにする
$ rm -f /etc/yum.repos.d/cloudrouter.repo
$ yum install -y telnet-server
$ sed -i '/pam_securetty.so/d' /etc/pam.d/remote
$ systemctl start telnet.socket
このcontainerのIP(eth0)を確認する。この場合は、ルータのIPが 172.17.0.2
である。
[root@22f73220b705 etc]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1
link/tunnel6 :: brd ::
34: eth0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
rootアカウントのパスワードを system
へ変更する
$ echo "cloudrouter" | passwd root --stdin
BIRDを開始する
$ bird
#renatのインストール
以下のようにrenat環境を構築する。RENAT(github)のサイトでインストール方法を書いてあるが、ためすだけならば、dockerのイメージは最もは早い方法である。
dockerからインストール
RENAT(docker)の手順に従い、renatサーバを動かす(dockerhub.comから最新なイメージをダウンロードしてくる)
$ mkdir /opt/renat
$ docker run --rm -d --privileged -v /opt/renat:/opt/renat -p 80:80 -p 10022:22 --name renat bachng/renat:latest
ここで、renatサーバが動き始め、http port 80
で実行結果が確認できるようになる。
renat環境を調整
renatの設定ファイルは全て$RENAT_PATH/config
のは以下で、以下ファイルである。なお、環境変数 $RENAT_PATH
はデオフォルトで /home/work/robot/renat
である。
- template.yaml: サポートしているplatformの情報(プロムプトなど)
- auth.yaml: 認証情報
- device.yaml: システムワイドの設備情報(主にIP情報)
元々、renatではJuniper
,Cisco
などのNW装置をサポートしているが、birdのサポートは入っていない。以下のように、birdのサポートを追加する。
必要なのは、template.yaml
ファイルにBIRDのサポートを追加するのみである。
access-template:
bird:
access: telnet
auth: plain-text
profile: default
prompt: ".*(>|#) "
login-prompt: "login: "
password-prompt: "Password: "
init:
- birdc
finish:
- quit
- exit
ssh-host:
...
ここで、ホストへのアクセスをtelnet
とし、ホストにログイン成功したら、birdc
を呼び、birdのCLIに入る。また、認証はplain-text
で、認証情報のプロフィルはdefault
とする。
auth.yaml
を編集し、BIRDルータの認証情報設定する。
auth:
plain-text:
default:
user: root
pass: cloudrouter
samurai:
...
ここでは、BIRDルータのパスワードは前節でbird containerのrootパスワードと同じにする
device管理ファイルdevice.yaml
に bird01
のルータを追加する。ここに追加されたdeviceはrenatサーバを共有したテストitemから利用できるようになる。
device:
# Cloudrouter
bird01:
type: bird
description: a cloudrouter BIRD version
ip: 172.17.0.2
# Testers
...
ここで IPアドレスは、birdコンテナのIPアドレスである。
シナリオ作成・実行
renatサーバへrobotユーザとしてログインする。デフォルトで /home/robot/work
がワーキングフォルダーになる。
$ docker exec -it --user robot renat /bin/bash --login
まず、~/work
は以下で、テストprojectを作成する。
[robot@9985510e9a87 work]$ cd /home/robot/work/
[robot@9985510e9a87 work]$ $RENAT_PATH/tools/project.sh renat-sample
created test project: renat-sample
entered project folder: renat-sample
use item.sh to create test case
[robot@9985510e9a87 work]$ cd ~/work/renat-sample
[robot@9985510e9a87 renat-sample]$
そして、batchモードでbird01というデバイスを含めたテストitemを作成する。
[robot@9985510e9a87 renat-sample]$ $RENAT_PATH/tools/item.sh -b -l -n bird01 test01
=== Created `test01` test item ===
Case scenario: /home/robot/work/renat/tools/test01/main.robot
Case run file: /home/robot/work/renat/tools/test01/run.sh
Local config file: /home/robot/work/renat/tools/test01/config/local.yaml
Tester config file:/home/robot/work/renat/tools/test01/config/
Check and change the `local.yaml` local config file if necessary
[robot@9985510e9a87 renat-sample]$
test01
は以下にシナリオ・ファイル main.robot
を以下のように編集する(既存のテンプレートは消しても良い)
20
21 *** Test Cases ***
22 01. 基本的なコマンドの確認
23 Router.Switch bird01
24 Router.Cmd show status
25 Router.Cmd show memory
26
まず、文法チェックを行う
[robot@9985510e9a87 test01]$ ./run.sh --dryrun
Current time: Mon May 6 09:46:07 UTC 2019
Current RENAT path: /home/robot/work/renat
### Current folder is /home/robot/work/renat-sample/test01 ###
Run only once
Run: 001
Current local.yaml: /home/robot/work/renat-sample/test01/config/local.yaml
Loaded extra library `Hypervisor`
==============================================================================
test01 :: This is a sample test item
==============================================================================
01. 基本的なコマンドの確認 | PASS |
------------------------------------------------------------------------------
test01 :: This is a sample test item | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Output: /home/robot/work/renat-sample/test01/result/output.xml
Log: /home/robot/work/renat-sample/test01/result/log.html
Report: /home/robot/work/renat-sample/test01/result/report.html
全てPASS
ならば、次に実際シナリオを実行する(--dryrun
なしで)
### Current folder is /home/robot/work/renat-sample/test01 ###
Run only once
Run: 001
Current local.yaml: /home/robot/work/renat-sample/test01/config/local.yaml
Loaded extra library `Hypervisor`
==============================================================================
test01 :: This is a sample test item
==============================================================================
RENAT Ver:: RENAT 0.1.14
------------------------------------------------------------------------------
README:
Write you readme file here
------------------------------------------------------------------------------
00. Lab Setup
------------------------------------------------------------------------------
01. 基本的なコマンドの確認 | PASS |
------------------------------------------------------------------------------
99. Lab Teardown
------------------------------------------------------------------------------
test01 :: This is a sample test item | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Output: /home/robot/work/renat-sample/test01/result/output.xml
Log: /home/robot/work/renat-sample/test01/result/log.html
Report: /home/robot/work/renat-sample/test01/result/report.html
#実行結果の確認
前節でシナリオの実行が終わったら、dockerホストからのブラウザーでテストitemの結果を確認できる。renatの各ユーザのwork
フォルダーが ~<username>
へマッピングされる。今回、このurlで結果が確認できる http://127.0.0.1/~robot/renat-sample/test01/result/log.html
ここで、+
のマークを選択すると、各ステップの詳細情報が見える。また、以下のurlで、書く装置の実行ログも確認できる
http://127.0.0.1/~robot/renat-sample/test01/result/bird01.log
#まとめ
RENATを使い、birdルータの基本コマンドを確認テストitemの方法について簡単に説明した。シナリオを実行した例でしめしたように、ユーザがlogin/logoutやログ収集について一切気にせず、renatへ任せることができた。ユーザが、検証したい内容を注目し、シナリオを書き、テストを実行することによって、従来の検証プロセスをより効率的に実現できるだろう。
また、元々、birdをサポートしていないrenat対して、簡単にbirdのサポートを入れる方も説明した。今回、コンセプトを見せるため、テストの内容は基本のコマンドを確認するだけにしたが、renatを用い、他のNW装置、トラヒックジェネラータを含めた複雑なテスト・シナリオも作成、確認できる。また、今度別の記事を書きたいと思う。
ここでは簡単な使い方を説明したが、renatの詳細は以下のサイトへ。
#参考資料