2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コンテナ化された cJunosEvolved を Containerlab で使ってみた

Last updated at Posted at 2025-07-21

Juniper から無料で利用できる新しいコンテナ版の Junos の cJunosEvolved がリリースされていて、Containerlab の version 0.69 から利用できるようになっていたので、その環境を作ったメモ

▼ cJunosEvolved

▼ Containerlab の version 0.69 のリリースノートの cJunosEvolved 説明部分

今回のやったこと

今回は Ubuntu サーバ上に Containerlab を構築して、cJunosEvolved と freeRouter で SR-MPLS・EVPN を構築してみました

以下の図のように 2 台の cJunosEvolved を EVPN の PE ルータとして利用して、freeRouter は SR-MPLS の P ルータと、エンドエンドの CE ルータとして利用の 3 台利用しています

image.png

各バージョンは以下となります

  • Ubuntu 24.04.2 LTS
  • Containerlab 0.69.0
  • cJunosEvolved 25.2R1.8-EVO
  • freeRouter-rare v23.10.11-cur

Containerlab

Containerlab とは

ChatGPTさんにざっくり説明したもらった内容は以下のとおりです

  • Containerlabはネットワーク機器の仮想ラボ構築ツール
  • DockerコンテナやVMでNOSを実行可能
  • YAMLでトポロジーを定義し、CLIで操作
  • containerlab deployで簡単にラボ展開・削除が可能
  • Juniper・Cisco・Aristaなど複数ベンダーに対応
  • CI/CDやIaCとの連携に優れ、再現性のある検証環境が構築可能

Containerlab インストール

こちらのサイトにインストール方法は記載されています
手っ取り早くインストールしたい場合は、以下のコマンド一発で Containerlab と必要なソフトのインストールが完了します

curl -sL https://containerlab.dev/setup | sudo -E bash -s "all"

cJunosEvolved

ダウンロード

以下のサイトからダウンロードできます。無料でかつユーザ登録などもなしで利用できます

ダウンロードサイト内の「Container」-「Docker Tarball - AMD64」をダウンロードしてください
ダウンロード前に出てくる内容を確認・同意の上ダウンロードしてください

Docker イメージを使えるように準備

ダウンロードしたファイルを、Containerlab の Ubuntu サーバに保存し、Ubuntu 上で以下のコマンドを実行すると Docker イメージを使えるようになります

docker image load -i cJunosEvolved-25.2R1.8-EVO.tar.gz

docker imagesコマンドで以下のように表示されれば準備完了です

$ docker images
REPOSITORY              TAG            IMAGE ID       CREATED          SIZE
cjunosevolved           25.2R1.8-EVO   6748aac28acd   3 weeks ago      2.01GB

Containerlab で cJunosEvolved の動作確認

Containerlab deploy

以下の 3 つの手順で簡単に今回の検証環境の接続とコンフィグが登録された状態で起動してきます

今回の構成やコンフィグを一式 GitHub からダウンロード

git clone --depth=1 https://github.com/katsumi2018/clab-cjunos-freertr-evpn.git

ディレクトリ移動

cd clab-cjunos-freertr-evpn

containerlab deployで検証環境が起動します。

  • 初回は、FreeRTR のコンテナのダウンロードが自動で行われます
  • FreeRTR は速攻で起動しますが、cJunosEvolved は結構時間がかかります。自分の環境だと 5 分くらいかかりました
containerlab deploy

環境の説明

今回は、以下のようにインターフェースやIPアドレスを設定しています

image.png

  • ログインのユーザ名とパスワードは、cJunosEvolved・FreeRTR ともに、ユーザ名 admin、パスワード admin@123 としてます
  • 各インターフェースは、( )で囲まれた文字が Docker 上でのインターフェースで、( )で囲まれていない方が機器にログインしたときのコンフィグ上のインターフェース名
  • マネージメントのIPアドレスは cjunosfreertr.clab.yml 内のmgmt-ipv4で指定
  • コンフィグについては cjunosfreertr.clab.yml の以下の場所でノードごとに指定
    • cJunosEvolved : startup-configでファイル指定
    • FreeRTR : bindsの部分でファイルをコンテナ内に読み取り専用(最後に:roをつける)でマウントさせる
      • Containerlab のこちらの説明では、読み取り専用ではありませんでしたが、自分の環境だと読み取り専用でないとデフォルトのコンフィグに上書きされてしまってうまくコンフィグが読み込まれなかったです

cjunosfreertr.clab.yml の内容は以下となります

cjunosfreertr.clab.yml
cjunosfreertr.clab.yml
name: cjunosfreertr

mgmt:
  network: clab-mgmt        # docker network 名 
  ipv4-subnet: 172.20.100.0/24

topology:
  nodes:
    cjunosevo-pe-1:
      kind: juniper_cjunosevolved
      mgmt-ipv4: 172.20.100.21
      image: cjunosevolved:25.2R1.8-EVO
      startup-config: cjunosevo-pe-1.cfg
      env:
        CPTX_COSIM: "BT"

    cjunosevo-pe-2:
      kind: juniper_cjunosevolved
      mgmt-ipv4: 172.20.100.22
      image: cjunosevolved:25.2R1.8-EVO
      startup-config: cjunosevo-pe-2.cfg
      env:
        CPTX_COSIM: "BT"

    freertr-p-1:
      kind: rare
      mgmt-ipv4: 172.20.100.11
      image: ghcr.io/rare-freertr/freertr-containerlab:latest
      binds:
        - freertr-p-1-sw.txt:/rtr/run/conf/rtr-sw.txt:ro

    freertr-ce-1:
      kind: rare
      mgmt-ipv4: 172.20.100.31
      image: ghcr.io/rare-freertr/freertr-containerlab:latest
      binds:
        - freertr-ce-1-sw.txt:/rtr/run/conf/rtr-sw.txt:ro

    freertr-ce-2:
      kind: rare
      mgmt-ipv4: 172.20.100.32
      image: ghcr.io/rare-freertr/freertr-containerlab:latest
      binds:
        - freertr-ce-2-sw.txt:/rtr/run/conf/rtr-sw.txt:ro

  links:
    - endpoints: ["freertr-p-1:eth1", "cjunosevo-pe-1:eth4"]
    - endpoints: ["freertr-p-1:eth2", "cjunosevo-pe-2:eth4"]
    - endpoints: ["cjunosevo-pe-1:eth5", "freertr-ce-1:eth1"]
    - endpoints: ["cjunosevo-pe-2:eth5", "freertr-ce-2:eth1"]

各機器のコンフィグは、以下を参照

動作確認

ssh admin@172.20.100.31 で freertr-ce-1 に SSH ログイン(パスワードはadmin@123)して、freertr-ce-2 のアドレスに PING (ping 192.168.0.1 vrf CORE) を打って、EVPNを経由してPING疎通できることを確認

freertr-ce-1# ping 192.168.0.2 vrf CORE
pinging 192.168.0.2, src=null, vrf=CORE, cnt=5, len=64, df=false, tim=1000, gap=0, ttl=255, tos=0, sgt=0, flow=0, fill=0, alrt=-1, sweep=false, multi=false
!!!!!
result=100.0%, recv/sent/lost/err=5/5/0/0, took 8, min/avg/max/dev rtt=1/1.6/2/0.2, ttl 255/255/255/0.0, tos 0/0.0/0/0.0
freertr-ce-1#

次に、ssh admin@172.20.100.21 で cjunosevo-pe-1 に SSH ログイン(パスワードはadmin@123)して動作確認

MAC アドレスが、EVPN で学習できていることを確認

admin@cjunosevo-pe-1> show mac-vrf forwarding mac-table

MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static, C - Control MAC
           SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC
           GBP - group based policy, B - Blocked MAC)


Ethernet switching table : 2 entries, 2 learned
Routing instance : EVPN_MACVRF_100
    Vlan                MAC                 MAC         Age   GBP     Logical                NH        MAC        RTR
    name                address             flags             Tag     interface              Index     property   ID
    VLAN100             aa:c1:ab:18:c4:e4   D             -           et-0/0/1.100           0                    0
    VLAN100             aa:c1:ab:67:bf:e0   DC            -                                  8032                 8032

MP-BGP で peer が接続できていることを確認

admin@cjunosevo-pe-1> show bgp summary

Warning: License key missing; requires 'BGP' license

Threading mode: BGP I/O
Default eBGP mode: advertise - accept, receive - accept
Groups: 1 Peers: 1 Down peers: 0
Table          Tot Paths  Act Paths Suppressed    History Damp State    Pending
bgp.evpn.0
                       5          5          0          0          0          0
Peer                     AS      InPkt     OutPkt    OutQ   Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
10.99.2.1             65000         16         15       0       0        4:13 Establ
  bgp.evpn.0: 5/5/5/0
  EVPN_MACVRF_100.evpn.0: 5/5/5/0
  __default_evpn__.evpn.0: 0/0/0/0

OSPF の SR-MPLS で Node-SID が学習されていることを確認

admin@cjunosevo-pe-1> show ospf spring sid-database

Warning: License key missing; requires 'Segment Routing' license


    OSPF database, Area 0.0.0.0
SID     Prefix             Advertised-by    Route-type
1       10.99.0.1/32       10.99.0.1        Intra-Area
11      10.99.1.1/32       10.99.1.1        Intra-Area
21      10.99.2.1/32       10.99.2.1        Intra-Area

終了時の処理

終了してデプロイしたラボを落とす場合は、containerlab destroyで終了できます

containerlab destroy

最後に

今回は、Containerlab で cJunosEvolved を動かしてみました
2 台の cJunosEvolved だと結構メモリを使っていたので、1 台で試したい場合は公式サイトにあるこちらで試してみてもいいかもです

Githubから設定ファイルを落としてcontainerlab deployで速攻で環境つくれるのがすごく便利

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?