4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RENATの使い方の例(BIRDルータ編)

Last updated at Posted at 2019-05-06

自分が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.yamlbird01 のルータを追加する。ここに追加された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

スクリーンショット 2019-05-06 18.51.38.png

ここで、+のマークを選択すると、各ステップの詳細情報が見える。また、以下のurlで、書く装置の実行ログも確認できる
http://127.0.0.1/~robot/renat-sample/test01/result/bird01.log

スクリーンショット 2019-05-06 18.54.29.png

#まとめ
RENATを使い、birdルータの基本コマンドを確認テストitemの方法について簡単に説明した。シナリオを実行した例でしめしたように、ユーザがlogin/logoutやログ収集について一切気にせず、renatへ任せることができた。ユーザが、検証したい内容を注目し、シナリオを書き、テストを実行することによって、従来の検証プロセスをより効率的に実現できるだろう。

また、元々、birdをサポートしていないrenat対して、簡単にbirdのサポートを入れる方も説明した。今回、コンセプトを見せるため、テストの内容は基本のコマンドを確認するだけにしたが、renatを用い、他のNW装置、トラヒックジェネラータを含めた複雑なテスト・シナリオも作成、確認できる。また、今度別の記事を書きたいと思う。

ここでは簡単な使い方を説明したが、renatの詳細は以下のサイトへ。

#参考資料

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?