この記事ではその設定方法を紹介します オープンデイライト ネットワーク機器を操作し、その使用方法も示します。 Postman そしてシンプルな レストコンフ リクエストに応じて、この機器を制御できます。 ハードウェアは使用しませんが、その代わりに、 Vrnetlab オーバー Ubuntu 20.04, XNUMX, XNUMX LTS.
まずはルーターを例に詳細な設定を説明します ジュニパー vMX 20.1R1.11、そしてそれを設定と比較します Cisco xRV9000 7.0.2.
ページ内容
- 必要な知識
- Часть1: 簡単に話し合う OpenDaylight(以下、 ODL), Postman и Vrnetlab そしてなぜそれらが必要なのでしょうか
- Часть2: バーチャルラボの説明
- Часть3: 構成、設定 オープンデイライト
- Часть4: 構成、設定 Vrnetlab
- Часть5: を使用して Postman 仮想ルータを接続する (ジュニパー vMX)へ ODL
- Часть6: を使用してルーター構成を取得および変更します Postman и ODL
- Часть7: Cisco xRV9000 を追加
- まとめ
- PS
- 参考文献
必要な知識
記事がシートにならないように、いくつかの技術的な詳細を省略しました (詳細を読むことができる文献へのリンクも付いています)。
これに関連して、読む前に知っておくとよい (ただし、ほとんど必要ではない) トピックを紹介します。
パート 1: いくつかの理論
- あらゆる種類のネットワークを管理および自動化するオープン SDN プラットフォーム。 Linux Foundationの
- Java の内部
- モデル駆動型サービス抽象化レベル (MD-SAL) に基づく
- YANG モデルを使用して、ネットワーク デバイス用の RESTCONF API を自動的に生成します
ネットワーク管理のメインモジュール。 それを通じて、接続されたデバイスと通信します。 独自の API を通じて管理されます。
OpenDaylight について詳しく読むことができます
- APIテストツール
- シンプルで使いやすいインターフェース
私たちの場合、REST リクエストを OpenDaylight API に送信する手段としてこれに興味があります。 もちろん、リクエストを手動で送信することもできますが、Postman ではすべてが非常に明確に見え、私たちの目的に完全に適合します。
掘り下げてみたい人のために: たくさんのトレーニング資料が書かれています (
- Docker に仮想ルーターをデプロイするためのツール
- サポート: Cisco XRv、Juniper vMX、Arista vEOS、Nokia VSR など。
- オープンソース
非常に興味深い楽器ですが、あまり知られていません。 この例では、これを使用して通常の Ubuntu 9000 LTS 上で Juniper vMX と Cisco xRV20.04 を実行します。
詳細については、次の URL で読むことができます。
パート 2: ラボ
このチュートリアルでは、次のシステムをセットアップします。
これはどう動かすのですか
- ジュニパー vMX 上昇する デッカー コンテナ(手段によって) Vrnetlab) であり、最も一般的な仮想ルーターとして機能します。
- ODL ルーターに接続して制御できるようになります。
- Postman 別のマシンで起動され、それを通じてコマンドが送信されます ODL: ルーターの接続/取り外し、設定の変更などを行います。
システムのデバイスの解説
ジュニパー vMX и ODL 安定した動作にはかなりのリソースが必要です。 ひとつだけ vMX 6 Gb の RAM と 4 コアが必要です。 したがって、すべての「ヘビーウェイト」を別のマシンに移動することが決定されました (Heulett Packard Enterprise MicroServer ProLiant Gen8、Ubuntu 20.04 LTS)。 もちろん、ルーターはその上で「飛行」しませんが、小規模な実験には十分なパフォーマンスです。
パート 3: OpenDaylight をセットアップする
この記事の執筆時点での ODL の現在のバージョンは Magnesium SR1 です。
1) インストール Java オープン JDK 11 (より詳細なインストールについては、
ubuntu:~$ sudo apt install default-jdk
2) 最新のビルドを見つけてダウンロードする ODL
3) ダウンロードしたアーカイブを解凍します。
4) 作成されたディレクトリに移動します
5) 打ち上げ ./bin/karaf
この段階で ODL が開始され、コンソールが表示されます (ポート 8181 は外部からのアクセスに使用されます。これは後で使用します)。
次にインストールします ODLの機能プロトコルで動作するように設計されている ネットコンフ и レストコンフ。 コンソールでこれを行うには ODL 実行します:
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-all
これが最も簡単なセットアップです。 ODL 完成しました。 (詳細については、を参照してください)
パート 4: Vrnetlab のセットアップ
システムの準備
インストール前 Vrnetlab 動作に必要なパッケージをインストールする必要があります。 そのような
ubuntu:~$ sudo apt update
ubuntu:~$ sudo apt -y install python3-bs4 sshpass make
ubuntu:~$ sudo apt -y install git
ubuntu:~$ sudo apt install -y
apt-transport-https ca-certificates
curl gnupg-agent software-properties-common
ubuntu:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
ubuntu:~$ sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs)
stable"
ubuntu:~$ sudo apt update
ubuntu:~$ sudo apt install -y docker-ce docker-ce-cli containerd.io
Vrnetlab のインストール
取り付け用 Vrnetlab github から対応するリポジトリのクローンを作成します。
ubuntu:~$ cd ~
ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.git
ディレクトリに移動 バーチャルネットラボ:
ubuntu:~$ cd ~/vrnetlab
ここには、実行に必要なすべてのスクリプトが表示されます。 ルーターのタイプごとに対応するディレクトリが作成されていることに注意してください。
ubuntu:~/vrnetlab$ ls
CODE_OF_CONDUCT.md config-engine-lite openwrt vr-bgp
CONTRIBUTING.md csr routeros vr-xcon
LICENSE git-lfs-repo.sh sros vrnetlab.sh
Makefile makefile-install.include topology-machine vrp
README.md makefile-sanity.include veos vsr1000
ci-builder-image makefile.include vmx xrv
common nxos vqfx xrv9k
ルーターのイメージを作成する
サポートされている各ルーター Vrnetlabには、独自の設定手順があります。 いつ ジュニパー vMX ルーターを使用して .tgz アーカイブをアップロードするだけです (次からダウンロードできます)。 make
:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Копируем в эту директорию .tgz архив с роутером
ubuntu:~$ sudo make
イメージの構築 vMX 10~20分ほどかかります。 コーヒーを飲みに行く時間だよ!
なぜそんなに長いのか、あなたは尋ねますか?
翻訳
「これは、VCP (コントロール プレーン) が初めて起動されるときに、vMX で VRR VCP として実行するかどうかを決定する構成ファイルを読み取るためです。以前は、この起動は Docker の起動中に行われていましたが、これは VCP が仮想ルーターが使用可能になる前に常に 5 回再起動されるため、起動時間が長くなります (約 XNUMX 分)。現在、VCP の最初の実行は Docker イメージのビルド中に行われます。また、Docker ビルドは - では実行できないため、 -privileged オプションは、qemu が KVM ハードウェア アクセラレーションなしで動作することを意味し、そのためビルドに非常に長い時間がかかります。このプロセス中に大量のログが出力されるため、少なくとも何が起こっているかを確認できます。長いビルドになると思いますイメージは一度作成すればたくさん起動するので、それほど怖くはありません。」
ルーターの画像が表示されたら、 デッカー:
ubuntu:~$ sudo docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/vr-vmx 20.1R1.11 b1b2369b453c 3 weeks ago 4.43GB
debian stretch 614bb74b620e 7 weeks ago 101MB
vr-vmxコンテナを起動する
次のコマンドから始めます。
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453c
次に、アクティブなコンテナに関する情報を確認できます。
ubuntu:~$ sudo docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
120f882c8712 b1b2369b453c "/launch.py" 2 minutes ago Up 2 minutes (unhealthy) 22/tcp, 830/tcp, 5000/tcp, 10000-10099/tcp, 161/udp jun01
ルーターに接続する
ルーターのネットワーク インターフェイスの IP アドレスは、次のコマンドで取得できます。
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2
デフォルト、 Vrnetlab ルーター上にユーザーを作成します vrnetlab/VR-netlab9.
とつながる ssh
:
ubuntu:~$ ssh [email protected]
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
ECDSA key fingerprint is SHA256:g9Sfg/k5qGBTOX96WiCWyoJJO9FxjzXYspRoDPv+C0Y.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.17.0.2' (ECDSA) to the list of known hosts.
Password:
--- JUNOS 20.1R1.11 Kernel 64-bit JNPR-11.0-20200219.fb120e7_buil
vrnetlab> show version
Model: vmx
Junos: 20.1R1.11
これでルーターのセットアップは完了です。
さまざまなベンダーのルーターのインストールに関する推奨事項については、次の Web サイトを参照してください。
パート 5: Postman - ルーターを OpenDaylight に接続する
郵便配達員の設置
インストールするには、アプリケーションをダウンロードするだけです
ルーターをODLに接続する
作成しましょう PUT リクエスト:
- クエリ文字列:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
- リクエスト本文 (「本文」タブ):
<node xmlns="urn:TBD:params:xml:ns:yang:network-topology"> <node-id>jun01</node-id> <host xmlns="urn:opendaylight:netconf-node-topology">172.17.0.2</host> <port xmlns="urn:opendaylight:netconf-node-topology">22</port> <username xmlns="urn:opendaylight:netconf-node-topology">vrnetlab</username> <password xmlns="urn:opendaylight:netconf-node-topology">VR-netlab9</password> <tcp-only xmlns="urn:opendaylight:netconf-node-topology">false</tcp-only> <schema-cache-directory xmlns="urn:opendaylight:netconf-node-topology">jun01_cache</schema-cache-directory> </node>
- 「認証」タブで、パラメータを設定する必要があります。
Basic Auth
ログイン/パスワード: admin/admin。 これは ODL にアクセスするために必要です。
- [ヘッダー] タブで、XNUMX つのヘッダーを追加する必要があります。
- アプリケーション/XMLを受け入れる
- Content-Type アプリケーション/xml
私たちのリクエストは完了しました。 お送りします。 すべてが正しく構成されていれば、ステータス「201 Created」が返されるはずです。
このリクエストは何をするのでしょうか?
内部にノードを作成します ODL アクセスしたい実際のルーターのパラメータを使用します。
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"
これらは内部名前空間です XML (XML名前空間) ために ODL それに従ってノードを作成します。
さらに、それぞれ、ルータの名前は、 ノードID、ルーターアドレス - host 等々。
最も興味深いのは最後の行です。 スキーマキャッシュディレクトリ すべてのファイルがダウンロードされるディレクトリを作成します ヤンスキーマ 接続されているルーター。 あなたがそれらを見つけることができます $ODL_ROOT/cache/jun01_cache
.
ルーターの接続を確認する
作成しましょう GET リクエスト:
- クエリ文字列:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/
- 「認証」タブで、パラメータを設定する必要があります。
Basic Auth
ログイン/パスワード: admin/admin。
お送りします。 「200 OK」のステータスと、デバイスでサポートされているすべてのリストを受け取る必要があります ヤンスキーマ:
コメント: 後者を確認するには、私の場合、実行後約 10 分待つ必要がありました PUT全部まで ヤンスキーマ に荷降ろしする ODL。 ここまでの作業を行うと、 GET クエリでは次のように表示されます。
ルーターを削除する
作成しましょう DELETE リクエスト:
- クエリ文字列:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
- 「認証」タブで、パラメータを設定する必要があります。
Basic Auth
ログイン/パスワード: admin/admin。
パート 6: ルーター構成を変更する
構成の取得
作成しましょう GET リクエスト:
- クエリ文字列:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/
- 「認証」タブで、パラメータを設定する必要があります。
Basic Auth
ログイン/パスワード: admin/admin。
お送りします。 ステータス「200 OK」とルーター設定を取得する必要があります。
構成を作成する
例として、次の構成を作成して変更してみましょう。
protocols {
bgp {
disable;
shutdown;
}
}
作成しましょう POST リクエスト:
- クエリ文字列:
POST http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
- リクエスト本文 (「本文」タブ):
<bgp xmlns="http://yang.juniper.net/junos/conf/protocols"> <disable/> <shutdown> </shutdown> </bgp>
- 「認証」タブで、パラメータを設定する必要があります。
Basic Auth
ログイン/パスワード: admin/admin。 - [ヘッダー] タブで、XNUMX つのヘッダーを追加する必要があります。
- アプリケーション/XMLを受け入れる
- Content-Type アプリケーション/xml
送信後、「204 No Content」ステータスが表示されるはずです。
構成が変更されたことを確認するには、前のクエリを使用できます。 ただし、たとえば、ルーターに設定されているプロトコルに関する情報のみを表示する別のものを作成します。
作成しましょう GET リクエスト:
- クエリ文字列:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
- 「認証」タブで、パラメータを設定する必要があります。
Basic Auth
ログイン/パスワード: admin/admin。
リクエストを実行すると、次のように表示されます。
構成を変更する
BGPプロトコルに関する情報を変更してみましょう。 アクションを実行すると、次のようになります。
protocols {
bgp {
disable;
}
}
作成しましょう PUT リクエスト:
- クエリ文字列:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
- リクエスト本文 (「本文」タブ):
<protocols xmlns="http://yang.juniper.net/junos/conf/protocols"> <bgp> <disable/> </bgp> </protocols>
- 「認証」タブで、パラメータを設定する必要があります。
Basic Auth
ログイン/パスワード: admin/admin。 - [ヘッダー] タブで、XNUMX つのヘッダーを追加する必要があります。
- アプリケーション/XMLを受け入れる
- Content-Type アプリケーション/xml
以前のものを使用する GET リクエストを実行すると、次のような変化が見られます。
設定を削除する
作成しましょう DELETE リクエスト:
- クエリ文字列:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
- 「認証」タブで、パラメータを設定する必要があります。
Basic Auth
ログイン/パスワード: admin/admin。
電話をかけるとき GET プロトコルに関する情報を含むリクエストを送信すると、次のことが表示されます。
追加:
構成を変更するために、次の形式でリクエストボディを送信する必要はありません。 XML。 これは次の形式でも実行できます JSONの.
これを行うには、たとえばクエリで PUT 構成を変更するには、リクエスト本文を次のものに置き換えます。
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Changed in postman"
}
}
}
[ヘッダー] タブのヘッダーを次のように変更することを忘れないでください。
- アプリケーション/jsonを受け入れる
- Content-Type アプリケーション/json
送信後、次の結果が得られます(答えは次のとおりです) GET リクエスト):
パート 7: Cisco xRV9000 の追加
ジュニパー、そうジュニパーについて一体何なのでしょうか? シスコについて話しましょう!
xRV9000 バージョン 7.0.2 (8Gb RAM と 4 コアを必要とする野獣) を見つけました。これは無料で入手できないため、お問い合わせください。
コンテナの実行
Docker コンテナを作成するプロセスは、Juniper と実質的に変わりません。 同様に、ルーターを使用して .qcow2 ファイルをその名前 (この場合は xrv9k) に対応するディレクトリにドロップし、コマンドを実行します。 make docker-image
.
数分後、イメージが作成されたことがわかります。
ubuntu:~$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/vr-xrv9k 7.0.2 54debc7973fc 4 hours ago 1.7GB
vrnetlab/vr-vmx 20.1R1.11 b1b2369b453c 4 weeks ago 4.43GB
debian stretch 614bb74b620e 7 weeks ago 101MB
コンテナを起動します。
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fc
しばらくすると、コンテナーが開始されたことがわかります。
ubuntu:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
058c5ecddae3 54debc7973fc "/launch.py" 4 hours ago Up 4 hours (healthy) 22/tcp, 830/tcp, 5000-5003/tcp, 10000-10099/tcp, 161/udp xrv01
SSH 経由で接続します。
ubuntu@ubuntu:~$ ssh [email protected]
Password:
RP/0/RP0/CPU0:ios#show version
Mon Jul 6 12:19:28.036 UTC
Cisco IOS XR Software, Version 7.0.2
Copyright (c) 2013-2020 by Cisco Systems, Inc.
Build Information:
Built By : ahoang
Built On : Fri Mar 13 22:27:54 PDT 2020
Built Host : iox-ucs-029
Workspace : /auto/srcarchive15/prod/7.0.2/xrv9k/ws
Version : 7.0.2
Location : /opt/cisco/XR/packages/
Label : 7.0.2
cisco IOS-XRv 9000 () processor
System uptime is 3 hours 22 minutes
ルーターをOpenDaylightに接続する
追加は、vMX とまったく同じ方法で行われます。 名前を変更するだけです。
PUT リクエスト:
しばらくしてから電話する GET すべてが接続されていることを確認するクエリ:
構成を変更する
次の構成をセットアップしましょう。
!
router ospf LAB
mpls ldp auto-config
!
作成しましょう POST リクエスト:
- クエリ文字列:
POST http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf
- リクエスト本文 (「本文」タブ):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } }
- 「認証」タブで、パラメータを設定する必要があります。
Basic Auth
ログイン/パスワード: admin/admin。 - [ヘッダー] タブで、XNUMX つのヘッダーを追加する必要があります。
- アプリケーション/jsonを受け入れる
- Content-Type アプリケーション/json
実行後、「204 No Content」ステータスが表示されるはずです。
何が得られたかを確認してみましょう。
これを行うために、 GET リクエスト:
- クエリ文字列:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf
- 「認証」タブで、パラメータを設定する必要があります。
Basic Auth
ログイン/パスワード: admin/admin。
実行後、以下が表示されるはずです。
構成を削除するには、次を使用します DELETE:
- クエリ文字列:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf
- 「認証」タブで、パラメータを設定する必要があります。
Basic Auth
ログイン/パスワード: admin/admin。
まとめ
お気づきかもしれませんが、全体として、Cisco と Juniper を OpenDaylight に接続する手順に違いはありません。これにより、創造性の余地が非常に広がります。 すべてのネットワーク コンポーネントの構成管理から始まり、独自のネットワーク ポリシーの作成で終わります。
このチュートリアルでは、OpenDaylight を使用してネットワーク機器を操作する方法の最も簡単な例を示しました。 間違いなく、上記の例のクエリをさらに複雑にして、マウス XNUMX 回のクリックでサービス全体をセットアップすることができます。すべてはあなたの想像力によってのみ制限されます *
継続するには...
PS
突然これらすべてをすでに知っている場合、または逆に、ODL の魂を経験して深く理解した場合は、ODL コントローラでのアプリケーション開発に目を向けることをお勧めします。 始めることができます
実験成功!
参照
Vrnetlab: KVM と Docker を使用してネットワークをエミュレートする / ブライアン・リンクレター- OpenDaylight Cookbook / Mathieu Lemay、Alexis de Talhouet、他
- YANG によるネットワーク プログラマビリティ / Benoit Claise、Loe Clarke、Jan Lindblad
- XML の学習、第 XNUMX 版 / Erik T. Ray
- 効果的な DevOps / ジェニファー・デイビス、リン・ダニエルズ
出所: habr.com