💬

cEOSでVRFの動作を確認する

に公開

この記事について

この記事ではcEOSでコンテナ間の通信を制御する手順について記載します
追記:タイトルには「VRFの動作を確認する」と記載していますがルーティングしていないので動作確認にはなっていません

構築するネットワーク


OS: Ubuntu24.04
CPU: Intel Core i5-1240P

Arista Networks

Arista Networksは2004年に創業したネットワーク機器の会社です
CiscoやJuniperといった企業が自社でASICを設計、製造している一方、Aristaはチップベンダーから購入した製品を機器に搭載している点が特徴です
これによりAristaはチップ設計にかかる時間を省略して次々に新製品を市場に投入しています

EOS

Extensible Operating System (EOS)はAristaのネットワーク機器を制御するOSです
特にFedoraをベースにした純粋なLinuxである点と、全てのArista製品を一つのEOSで制御することができる点の二つが特徴的です
純粋なLinuxであるためbashもpythonもコンテナも追加のパッケージも利用することができます
ネットワーク機器特有のCLIもCli(これはCliという名前のプログラムです)として提供されています
全てのArista製品は同一のEOSで制御できるためネットワークエンジニアはEOSを習熟するだけでよく、AristaとしてもEOSのみ開発に集中すればよいのでお互いにお得です

参考:User Manual

cEOS

AristaはArista製品以外の環境でEOSを使用するための特別なEOSをいくつか提供しています
cEOSはそのうちの一つです
コンテナとして提供されておりホワイトボックススイッチ上でEOSを利用するシーンを想定して作られています[要出典]
cEOS以外にもVMで実行することを想定したvEOSが存在します

VRF

Virtual Routing and Fowarding (VRF)はルーティングテーブルの分離機能です
単一機器上で重複するネットワーク設定を動作させることができるようになります

構築手順

0. dockerのインストール

省略します

1. コンテナイメージの取得

cEOSはAristaのダウンロードページからダウンロードしてください

sudo docker import cEOS64-lab-4.34.0F.tar ceos:4.34.0F
sudo docker pull ubuntu:24.04

2. コンテナの作成

sudo docker create \
  --name=ceos \
  --privileged \
  -e INTFTYPE=eth \
  -e ETBA=1 \
  -e SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 \
  -e CEOS=1 \
  -e EOS_PLATFORM=ceoslab \
  -e container=docker \
  -it ceos:4.34.0F /sbin/init \
  systemd.setenv=INTFTYPE=eth \
  systemd.setenv=ETBA=1 \
  systemd.setenv=SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 \
  systemd.setenv=CEOS=1 \
  systemd.setenv=EOS_PLATFORM=ceoslab \
  systemd.setenv=container=docker
オプション 説明
-e INTFTYPE=eth interfaceのラベル
-e ETBA=1 ソフトウェアデータプレーンを使用する
-e SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 ZTP無効
-e CEOS=1 cEOS
-e EOS_PLATFORM=ceoslab cEOSのバージョン指定
-e container=docker docker
sudo docker create --name=ubuntu-1-1 --privileged -it ubuntu:24.04
sudo docker create --name=ubuntu-1-2 --privileged -it ubuntu:24.04
sudo docker create --name=ubuntu-2-1 --privileged -it ubuntu:24.04
sudo docker create --name=ubuntu-2-2 --privileged -it ubuntu:24.04

3. コンテナネットワークの作成

sudo docker network create net-1-1
sudo docker network create net-1-2
sudo docker network create net-2-1
sudo docker network create net-2-2
sudo docker network connect net-1-1 ceos
sudo docker network connect net-1-2 ceos
sudo docker network connect net-2-1 ceos
sudo docker network connect net-2-2 ceos
sudo docker network connect net-1-1 ubuntu-1-1
sudo docker network connect net-1-2 ubuntu-1-2
sudo docker network connect net-2-1 ubuntu-2-1
sudo docker network connect net-2-2 ubuntu-2-2

4. コンテナの起動

sudo docker start ceos
sudo docker start ubuntu-1-1
sudo docker start ubuntu-1-2
sudo docker start ubuntu-2-1
sudo docker start ubuntu-2-2

5. コンテナのインタフェース設定

ubuntu-1-1

sudo docker exec -it ubuntu-1-1 bash
apt-get update
apt-get install iproute2 iputils-ping tcpdump
ip a add 192.168.1.1/24 dev eth1

ubuntu-1-2

sudo docker exec -it ubuntu-1-2 bash
apt-get update
apt-get install iproute2 iputils-ping tcpdump
ip a add 192.168.1.2/24 dev eth1

ubuntu-2-1

sudo docker exec -it ubuntu-2-1 bash
apt-get update
apt-get install iproute2 iputils-ping tcpdump
ip a add 192.168.1.1/24 dev eth1

ubuntu-2-2

sudo docker exec -it ubuntu-2-2 bash
apt-get update
apt-get install iproute2 iputils-ping tcpdump
ip a add 192.168.1.2/24 dev eth1

6. VRFの設定

sudo docker exec -it ceos Cli
>enable
#config
(config)#vrf instance vrf-1
(config-vrf-vrf-1)#interface vlan 1
(config-if-Vl1)#vrf vrf-1
(config-if-Vl1)#interface Ethernet 1
(config-if-Et1)#switchport mode access
(config-if-Et1)#switchport access vlan 1
(config-if-Et1)#interface Ethernet 2
(config-if-Et2)#switchport mode access
(config-if-Et2)#switchport access vlan 1
(config-if-Et2)#end
(config)#vrf instance vrf-2
(config-vrf-vrf-2)#interface vlan 2
(config-if-Vl2)#vrf vrf-2
(config-if-Vl2)#interface Ethernet 3
(config-if-Et3)#switchport mode access
(config-if-Et3)#switchport access vlan 2
(config-if-Et3)#interface Ethernet 4
(config-if-Et4)#switchport mode access
(config-if-Et4)#switchport access vlan 2
(config-if-Et4)#end

動作確認

確認したい箇所でpingを送ってみます

ping 192.168.1.2

他はtcpdumpで通信を見てみます

tcpdump -i eth1

それぞれ確認すると長くなりますが必要な箇所だけ通信していることが確認できます


左上:ubuntu-1-1
左下:ubuntu-1-2
右上:ubuntu-2-1
右下:ubuntu-2-2
ubuntu-2-1 -> ubuntu-2-2 の通信だけ流れていることが確認できます
省略しますが他の通信も正常に流れることが確認できます

削除手順

sudo docker stop ceos
sudo docker stop ubuntu-1-1
sudo docker stop ubuntu-1-2
sudo docker stop ubuntu-2-1
sudo docker stop ubuntu-2-2
sudo docker network disconnect net-1-1 ubuntu-1-1
sudo docker network disconnect net-1-2 ubuntu-1-2
sudo docker network disconnect net-2-1 ubuntu-2-1
sudo docker network disconnect net-2-2 ubuntu-2-2
sudo docker network rm net-1-1
sudo docker network rm net-1-2
sudo docker network rm net-2-1
sudo docker network rm net-2-2
sudo docker rm ceos
sudo docker rm ubuntu-1-1
sudo docker rm ubuntu-1-2
sudo docker rm ubuntu-2-1
sudo docker rm ubuntu-2-2
sudo docker image rm ceos:4.34.0F
sudo docker image rm ubuntu:24.04

Discussion