はじめに
SONiC と ZTP
ONIE (Open Network Install Environment) 搭載のスイッチの管理ポートなら、デフォルト上で DHCP Client 機能は有効となっています。もし DHCP サーバは事前に用意できた場合、スイッチ起動する際に ONIE と SONiC は DCHPから IP をゲットします。
ONIE と SONiC は、ハードウェア上の同じ物理的な管理ポートを使用しますが、ソフトウェア上では異なる役割を持ち、別々のもので考えればよいです。
本記事は、ONIE の方のイマージインストールを考えず、SONiC 上のコンフィグのみで検証します。
目標
以下のように初期状態の Spine-Leaf 構造を EVPN L2VNI に設定します。
環境
- OS version: EC SONiC VS 202111版、VS の導入について、前回の記事でSONiC VS 仮想スイッチを使ってみよう [Community/Edgecore] ご参考ください
- ESXi VMware
- ゲスト OS:Ubuntu Linux (64 ビット)
Topology
Clos 構造は、EC SONiC VS で EVPN BGP L2VNI -- 設定編 と同じです。
事前準備
- サーバ * 1
- DHCP service
- TFTP service
- mgmt switch * 1
- Spine * 2 & Leaf * 4
以下の設定完了のコンフィグファイルを事前にデバイスから取得/etc/sonic/config_db.json
/etc/sonic/frr/frr.conf
DHCP / TFTP サーバ
DHCP / TFTP サーバを作って GNS3 にインポートするため、Ubuntu docker container から作成するのは一番早いかもしれません。手順は以下に参考
-
ESXi 上の Ubuntu Linux のターミナルを開く
-
DCHP/TFTP 用の ubuntu イメージを作成
-
docker images
で既存のイメージを確認 -
docker run -id <image id>
でコンテナを実行 -
docker ps
で実行中のコンテナを確認する
-
docker exec -it <container id> bash
でコンテナに入る - 必要なパッケージをインストールする。DHCP/TFTP に必要なパッケージは以下となる。
apt update && apt install vim ssh openssh-client isc-dhcp-server tftpd-hpa tftp-hpa iproute2 iputils-ping tcpdump
- インストール完了後、
exit
でコンテナから離れる - 新しいコンテナのイメージをコミットする
docker stop <container id>
でイメージを停止させる
docker commit
で叩いたら、DCHP/TFTP用の ubuntu イメージを作成完了
-
-
GNS 上に、作った DCHP/TFTP 用の docker container を入れる
-
コンテナのネットワークインターフェースを設定
-
DHCP/TFTP サーバを起動する前の準備は完了
mgmt switch
Spine *2 / Leaf *4 の管理ポートに接続する mgmt switch について、もう一個の EC SONiC VS を使用して設定します。
Config
sudo config vlan add 100
sudo config interface ip add Vlan100 10.10.0.1/24
sudo config vlan member add 100 Ethernet0 -u
sudo config vlan member add 100 Ethernet4 -u
sudo config vlan member add 100 Ethernet8 -u
sudo config vlan member add 100 Ethernet12 -u
sudo config vlan member add 100 Ethernet16 -u
sudo config vlan member add 100 Ethernet20 –u
sudo config vlan member add 100 Ethernet24 -u
GNS3 で link up
ZTP JSON
ztp.json の書き方について、SONiC 公式サイトにも参考できます。
本記事は以下のように記述します。
{
"ztp": {
"01-download": {
"files": [
{
"url": {
"source": "tftp://10.10.0.5/frr/{$hostname}_frr.conf",
"destination": "/etc/sonic/frr/frr.conf"
}
}
]
},
"02-configdb-json": {
"url": {
"source": "tftp://10.10.0.5/configs/{$hostname}_config_db.json",
"destination": "/etc/sonic/config_db.json"
},
"reboot-on-success": true
}
}
}
DHCP Server config
-
vim /etc/default/isc-dhcp-server
で修正
DHCP サーバーがどのインターフェイスで DHCP リクエストを処理するかを設定します。
-
vim /etc/dhcp/dhcpd.conf
で修正
default-lease-time 86400;
max-lease-time 86400;
shared-network ecsonic_gns3{
allow client-updates;
allow unknown-clients;
subnet 10.10.0.0 netmask 255.255.255.0{
option routers 10.10.0.1;
option tftp-server-name "10.10.0.5";
option subnet-mask 255.255.255.0;
range 10.10.0.100 10.10.0.200;
option broadcast-address 10.10.0.255;
option domain-name-servers 8.8.8.8, 8.8.4.4;
host spine-1{
hardware ethernet 0c:86:bd:06:00:00;
fixed-address 10.10.0.101;
option bootfile-name "ztp/spine-1_ztp.json";
}
host spine-2{
hardware ethernet 0c:86:3d:4f:00:00;
fixed-address 10.10.0.102;
option bootfile-name "ztp/spine-2_ztp.json";
}
host leaf-1{
hardware ethernet 0c:78:59:ee:00:00;
fixed-address 10.10.0.111;
option bootfile-name "ztp/leaf-1_ztp.json";
}
host leaf-2{
hardware ethernet 0c:02:b1:58:00:00;
fixed-address 10.10.0.112;
option bootfile-name "ztp/leaf-2_ztp.json";
}
host leaf-3{
hardware ethernet 0c:90:a5:e8:00:00;
fixed-address 10.10.0.113;
option bootfile-name "ztp/leaf-3_ztp.json";
}
host leaf-4{
hardware ethernet 0c:c5:da:7f:00:00;
fixed-address 10.10.0.114;
option bootfile-name "ztp/leaf-4_ztp.json";
}
}
}
service isc-dhcp-server
でサービスを起動します。
TFTP server
Spine と Leafそれぞれの ztp.json、config_db.json、および frr.conf の設定ファイルは、/tftp
ディレクトリにコピーします。
/etc/default/tftpd-hpa
で、コンフィグファイルの保存先を指定します。
service tftpd-hpa
でサービスを起動します。
ZTP を実行
sudo config ztp run
で、ZTP プロセスできます。
sudo config ztp run
を実行した後、ztp json と config ファイルをダウンロードするログです。
完了後、show ztp --verbose
で ZTP プロセスの状態を確認できます。
実は、今年の福岡 JANOG53 でも、本記事の内容を Edgecore のブースで展示しました。DEMO 動画は以下でご参考いただければ幸いです。当時は、本記事と違って、純粋な BGP 環境でデモしました
ちなみに、VS 上の ZTP 実行する時間は、おおよそ 6 分半ぐらいです。
最後に
ZTP を使用することで、GNS3 上の設定や展開を自動化することができました!今後 EVPN L2VNI だけではなく、L3VNI、MLAG、Multihoming などの環境も GNS3 で試したく、ZTP はそれぞれの運用開始の手間を軽減します。手元にはHWがない私にとって、とても重要な第一歩ですね。
参考
Apresia 技術ブログ -- SONiC ZTPを仮想マシン環境で試してみた
[Enterprise SONiC] ZTP (Zero Touch Provisioning)
Community SONiC -- Zero Touch Provisioning (ZTP)