はじめに
ClosNWについて夏休みに触る機会があって自分でも組んでみたいと思い、今回は仮想環境上でClosNWを構築しようと思いました。
GNS3で一般的に使われるc3725やc7200もBGPを喋るので、このノードをボコボコ立ててやろうと思ったのですが、ポートが足りずどうしようか迷っていました。
そこで、色々調べてたらGNS3上でkvmを有効にして、qemuでLinuxをエミュレートさせれば、SONiCを動かせるとの記事を見つけたので、それを参考に今回は3layer/2rack構成のClosNWを組むことにしました。
本当は、3rack構成にしたかったのですが、リソースに限界があったため、妥協して2rack構成にすることにしました。。。
今回、Qiitaの記事を書くのもはじめてで、NW周りもまだ未熟な部分ばかりだと思うので、間違っているところもあるかもしれないです。。。あくまで参考程度で見ていただければ幸いです。
構成
環境
- OS:Windows 11 Pro(CPU:i5-12600k, RAM:48G)
- GNS3:ver. 2.2.33.1
- VMware WorkStation:ver. 16.2.4
- GNS3-server:ver. 2.2.33.1
(CPU:6core, RAM:32G) - SONiC: SONiC.master.147284-c53972b34
- GNS3-server:ver. 2.2.33.1
SONiCのイメージ取得
GNS3の環境構築は、ググれば色々出てくるので、省略します。mac・windows両方で環境構築しましたが、windowsでやろうとしたほうが、個人的にやりやすいと思います。
イメージURL:Artifact sonic-buildimage.vs
上記ページからtarget/sonic-vs.img.gz
(下から4番目?くらい)を取ってきます。
取ってきたら、.gns3a
ファイルに変換します。
Browse Router -> New Template -> Import an appliance file(.gns3a extension)
gns3-gui上で.gns3a
をテンプレートとしてインポート。
インポートする際の構成は以下の通り。
インポートできたら、後はドラッグアンドドロップでノードを自由に配置、結線。
補足
.gns3a
に変換しなくても、解凍したimgをgns3内のqemuで読み込ませても、動作します。(結局、applianceファイルを読み込んだときに、imgを読み込んでQemu VMを作成する形なので。)
ただし、デフォルトの設定で進めていくと、ramが256mで設定されるので、2,048mとかに変更しないとramが少なすぎて動作しないので気をつけてください。(やらかしてめっちゃ重いやんけってなってました、、、)
Edit -> Preference -> Qemu VMs -> New
ClosNWの構築
いよいよここから、Closの構築ですが、VMWareにRAMを32G与えています。単純にノード一台あたりに2G-RAM与えていて、ノードを10台起動させるので、20G-RAMくらい必要になってきます。
1G-RAMでも試してみましたが、再起動を繰り返すようになるため、最低でも2G-RAMは必要なのかなあって感じでした。
アドレス・AS番号の決定
今回は3layer/2rack構成のため、ノード10台でそれぞれのP2P-Address、Loopback-Address、AS番号を決める必要があります。
- P2P:10.0.8.0/24
- Loopback:10.0.9.0/24
- AS-num:65000/65100/65110/65200/65210
- PC[1~4]:192.168.10.0/24 ~ 192.168.40.0/24
上位層から/30ずつ区切って、それぞれにP2Pを与えました。Loopbackも同じく、/32ずつ区切って与えています。
AS番号は
- External-Layer:65000[Ex1,2]
- Spine-Layer:65100[Sp1,2]・65200[Sp3,4]
- Leaf-Layer:65110[Lf1,2]・65210[Lf3,4]
のように決定し、Spine/Leafはrackごとで異なる番号を割り当てています。
P2Pの設定
定義したアドレスを起動させたノードに、設定していきます。
例:Ethernet4(GNS3:Ethernet1)に対してアドレスを設定
config interface ip add Ethernet4 10.0.8.1 10.0.8.1
ここで注意する点として、SONiC側のinterfaceとGNS3側のinterfaceの名前が異なることです。
GNS3 | SONiC |
---|---|
Ethernet0 | Ethernet0 |
Ethernet1 | Ethernet4 |
Ethernet2 | Ethernet8 |
︙ | ︙ |
基本的に、4の倍数ごとに値が増えていってるだけなので、慣れれば問題ありません。
ちなみにこれは、25Gのポートを4つアグリゲーションして、100Gのポートにしているから、らしいです。
各ノードのinterfaceにアドレスの設定が完了したら、saveして設定を反映させます。
sudo config save
確認コマンドを使って、P2Pが正しく設定されているかを確認します。
show ip interfaces
対向のノード両方にアドレス設定が完了したら、一応pingで疎通確認しておくと良いと思います。
Loopbackの設定(config_db)
P2Pの設定も途中でコマンド打つことが面倒になってきたため、config_dbに直書きしてました。
SONiCのconfigファイルは/etc/sonic/config_db.json
に書かれていて、起動時にこのconfigファイルを読み込みます。余談ですが、config ~
コマンド設定後のsudo config save
での設定項目の保存では、このconfig_dbに設定を保存している状態になります。
では、早速編集していきます。
初期状態では、余計なIP、BGPの設定が投入されているため、消しておくほうが良いと思います。
"INTERFACE": {
"Ethernet0": {},
"Ethernet0|192.168.50.2/24": {},
"Ethernet4": {},
"Ethernet4|10.0.8.1/30": {},
"Ethernet8": {},
"Ethernet8|10.0.8.5/30": {},
"Ethernet12": {},
"Ethernet12|10.0.8.9/30": {},
"Ethernet16": {},
"Ethernet16|10.0.8.13/30": {},
"Ethernet20": {},
"Ethernet24": {},
"Ethernet28": {},
"Ethernet32": {}
}
今回使用しないinterface(e36以降)は消してしまっても、問題なく動きます。ただし、使用するinterfaceで、"Ethernet0": {}
の部分を消してしまうと、interface自体が消えてしまうっぽいので、注意。
Loopbackはこんな感じ
"LOOPBACK_INTERFACE": {
"Loopback0": {},
"Loopback0|10.0.9.1/32": {}
}
BGPでは、Loopbackが一意になっていないと、正しくneighbor関係が確立されないため、この設定は忘れずにしておくべきです。(自分はここでやらかしました、、、)
一通り設定を投入できたら、以下コマンドで設定を反映させます。
sudo config reload -y
reloadされるので、復帰したら一応コマンドで設定が反映されているかを確認しておきます。
Interface Master IPv4 address/mask Admin/Oper BGP Neighbor Neighbor IP
----------- -------- ------------------- ------------ -------------- -------------
Ethernet0 192.168.50.2/24 up/up N/A N/A
Ethernet4 10.0.8.1/30 up/up N/A N/A
Ethernet8 10.0.8.5/30 up/up N/A N/A
Ethernet12 10.0.8.9/30 up/up N/A N/A
Ethernet16 10.0.8.13/30 up/up N/A N/A
Loopback0 10.0.9.1/32 up/up N/A N/A
想定通りアドレスが設定されました。
BGP-neighborの設定(config_db)
BGP-neighborの設定投入にもconfig_dbを書き換えます。
BGP-neighborの設定情報は、BGP_NEIGHBOR
オブジェクト内に記述されているため、ここを書き換えます。
"BGP_NEIGHBOR": {
"10.0.8.2": { //neighbor-P2P_address
"asn": "65100", //neighbor-ASnum
"holdtime": "180", //default
"keepalive": "60", //default
"local_addr": "10.0.8.1", //local-P2P_address
"name": "Ex1-Sp1",
"nhopself": "0", //default
"rrclient": "0" //default
},
"10.0.8.6": {
"asn": "65100",
"holdtime": "180",
"keepalive": "60",
"local_addr": "10.0.8.5",
"name": "Ex1-Sp2",
"nhopself": "0",
"rrclient": "0"
},
"10.0.8.10": {
"asn": "65200",
"holdtime": "180",
"keepalive": "60",
"local_addr": "10.0.8.9",
"name": "Ex1-Sp3",
"nhopself": "0",
"rrclient": "0"
},
"10.0.8.14": {
"asn": "65200",
"holdtime": "180",
"keepalive": "60",
"local_addr": "10.0.8.13",
"name": "Ex1-Sp4",
"nhopself": "0",
"rrclient": "0"
}
}
ここで記述するaddressは隣接ノードのp2p_address、AS番号は隣接ノードのASnumです。
自ノードのaddressはlocal_addr
タグに記述します。
それから、自ノードのAS番号も書き換えておきます。
DEVICE_METADATA
オブジェクト内のbgp_asn
を定義したAS番号に書き換えればOKです。
"DEVICE_METADATA": {
"localhost": {
"bgp_asn": "65000",
"buffer_model": "traditional",
"default_bgp_status": "up",
"default_pfcwd_status": "disable",
"hostname": "SONiC-ExSW1",
"hwsku": "Force10-S6000",
"mac": "0c:0d:c3:c2:00:00",
"platform": "x86_64-kvm_x86_64-r0",
"type": "LeafRouter"
}
}
設定を投入できたら、sudo config reload -y
でconfigを反映させます。
reload後に、一応show ip interfaces
辺りを実行して、状態を確認しておきます。
Interface Master IPv4 address/mask Admin/Oper BGP Neighbor Neighbor IP
----------- -------- ------------------- ------------ -------------- -------------
Ethernet0 192.168.50.2/24 up/up N/A N/A
Ethernet4 10.0.8.1/30 up/up Ex1-Sp1 10.0.8.2
Ethernet8 10.0.8.5/30 up/up Ex1-Sp2 10.0.8.6
Ethernet12 10.0.8.9/30 up/up Ex1-Sp3 10.0.8.10
Ethernet16 10.0.8.13/30 up/up Ex1-Sp4 10.0.8.14
Loopback0 10.0.9.1/32 up/up N/A N/A
上手く反映できてたら、bgp neighbor情報が出るはずです。
その他にも、show ip bgp summary
、show ip bgp neighbors
、show ip bgp network
などで、確認しておくのも良いと思います。
BGP-network設定(vtysh)
neighborを確立できれば、後はnetworkコマンドを入力してやれば、各経路を広報してくれるようになります。
networkの設定をconfig_db
でどうするかがドキュメントを見てもよく分からなかったので、vtyshでやっています。
SONiC-ExSW1# conf t
SONiC-ExSW1(config)# router bgp 65000
SONiC-ExSW1(config-router)# network 10.0.8.0/30
SONiC-ExSW1(config-router)# network 10.0.8.4/30
SONiC-ExSW1(config-router)# network 10.0.8.8/30
SONiC-ExSW1(config-router)# network 10.0.8.12/30
各ノードに設定して、show ip route
でルーティングテーブルを確認してやれば、経路が広報されていることを確認できます。
admin@SONiC-SpSW1:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
f - OpenFabric,
> - selected route, * - FIB route, q - queued, r - rejected, b - backup
t - trapped, o - offload failure
B 10.0.8.0/30 [20/0] via 10.0.8.1 inactive, weight 1, 00:00:20
C>* 10.0.8.0/30 is directly connected, Ethernet0, 00:58:55
B>* 10.0.8.4/30 [20/0] via 10.0.8.1, Ethernet0, weight 1, 00:00:15
B>* 10.0.8.8/30 [20/0] via 10.0.8.1, Ethernet0, weight 1, 00:00:11
B>* 10.0.8.12/30 [20/0] via 10.0.8.1, Ethernet0, weight 1, 00:00:07
C>* 10.0.8.16/30 is directly connected, Ethernet4, 00:58:53
C>* 10.0.8.32/30 is directly connected, Ethernet28, 00:58:54
C>* 10.0.8.36/30 is directly connected, Ethernet32, 00:58:53
B>* 10.0.9.1/32 [20/0] via 10.0.8.1, Ethernet0, weight 1, 00:58:00
C>* 10.0.9.3/32 is directly connected, Loopback0, 00:58:54
B>* 10.0.9.7/32 [20/0] via 10.0.8.34, Ethernet28, weight 1, 00:58:34
最終的なルーティングテーブルはshow ip routeの方に載せています。
後は疎通確認して、pingが通れば構築完了です。
疎通確認
疎通確認にはping/tracerouteを使って、VPCSに対して疎通確認を実行します。
PC1 -> PC3
PC1> ping 192.168.30.2
84 bytes from 192.168.30.2 icmp_seq=1 ttl=59 time=14.473 ms
84 bytes from 192.168.30.2 icmp_seq=2 ttl=59 time=13.555 ms
84 bytes from 192.168.30.2 icmp_seq=3 ttl=59 time=6.840 ms
84 bytes from 192.168.30.2 icmp_seq=4 ttl=59 time=13.182 ms
84 bytes from 192.168.30.2 icmp_seq=5 ttl=59 time=4.948 ms
PC1> trace 192.168.30.2
trace to 192.168.30.2, 8 hops max, press Ctrl+C to stop
1 192.168.10.1 1.630 ms 1.093 ms 2.070 ms
2 10.0.9.3 1.669 ms 1.431 ms 1.560 ms
3 10.0.9.2 2.844 ms 2.865 ms 1.909 ms
4 10.0.9.5 3.724 ms 2.907 ms 2.310 ms
5 10.0.9.9 3.487 ms 3.264 ms 2.682 ms
6 *192.168.30.2 4.186 ms (ICMP type:3, code:3, Destination port unreachable)
ping/traceどちらも正しく通っていることが確認できます。
PC4 -> PC2
PC4> ping 192.168.20.2
84 bytes from 192.168.20.2 icmp_seq=1 ttl=59 time=5.583 ms
84 bytes from 192.168.20.2 icmp_seq=2 ttl=59 time=20.804 ms
84 bytes from 192.168.20.2 icmp_seq=3 ttl=59 time=7.042 ms
84 bytes from 192.168.20.2 icmp_seq=4 ttl=59 time=9.390 ms
84 bytes from 192.168.20.2 icmp_seq=5 ttl=59 time=4.120 ms
PC4> trace 192.168.20.2
trace to 192.168.20.2, 8 hops max, press Ctrl+C to stop
1 192.168.40.1 0.996 ms 0.524 ms 0.677 ms
2 10.0.9.6 5.814 ms 0.903 ms 0.826 ms
3 10.0.9.1 1.836 ms 1.473 ms 1.289 ms
4 10.0.9.4 3.272 ms 2.389 ms 5.351 ms
5 10.0.9.8 5.138 ms 3.168 ms 2.776 ms
6 *192.168.20.2 3.142 ms (ICMP type:3, code:3, Destination port unreachable)
こちらの方も、ping/traceどちらも正しく通っていることが確認できます。
以上で構築は完了です!
確認用コマンドのチートシート
SONiC内で使用する確認用コマンド
show ip interfaces
SONiC内のinterface情報(IP, BGP)を確認可能
admin@SONiC-ExSW1:~$ show ip interfaces
Interface Master IPv4 address/mask Admin/Oper BGP Neighbor Neighbor IP
----------- -------- ------------------- ------------ -------------- -------------
Ethernet0 192.168.50.2/24 up/up N/A N/A
Ethernet4 10.0.8.1/30 up/up Ex1-Sp1 10.0.8.2
Ethernet8 10.0.8.5/30 up/up Ex1-Sp2 10.0.8.6
Ethernet12 10.0.8.9/30 up/up Ex1-Sp3 10.0.8.10
Ethernet16 10.0.8.13/30 up/up Ex1-Sp4 10.0.8.14
Loopback0 10.0.9.1/32 up/up N/A N/A
show interfaces status
interfaceのstatus(主にup, downなど)を確認可能
admin@SONiC-ExSW1:~$ show interfaces status
Interface Lanes Speed MTU FEC Alias Vlan Oper Admin Type Asym PFC
----------- --------------- ------- ----- ----- -------------- ------ ------ ------- ------ ----------
Ethernet0 25,26,27,28 40G 9100 N/A fortyGigE0/0 routed up up N/A N/A
Ethernet4 29,30,31,32 40G 9100 N/A fortyGigE0/4 routed up up N/A N/A
Ethernet8 33,34,35,36 40G 9100 N/A fortyGigE0/8 routed up up N/A N/A
Ethernet12 37,38,39,40 40G 9100 N/A fortyGigE0/12 routed up up N/A N/A
Ethernet16 45,46,47,48 40G 9100 N/A fortyGigE0/16 routed up up N/A N/A
Ethernet20 41,42,43,44 40G 9100 N/A fortyGigE0/20 routed down up N/A N/A
Ethernet24 1,2,3,4 40G 9100 N/A fortyGigE0/24 routed down up N/A N/A
Ethernet28 5,6,7,8 40G 9100 N/A fortyGigE0/28 routed up up N/A N/A
Ethernet32 13,14,15,16 40G 9100 N/A fortyGigE0/32 routed up up N/A N/A
︙
show ip bgp summary
設定を投入したbgp neighborの情報を確認可能
admin@SONiC-ExSW1:~$ show ip bgp sum
IPv4 Unicast Summary:
BGP router identifier 10.0.9.1, local AS number 65000 vrf-id 0
BGP table version 12
RIB entries 19, using 3496 bytes of memory
Peers 4, using 2963232 KiB of memory
Peer groups 2, using 128 bytes of memory
Neighbhor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd NeighborName
----------- --- ----- --------- --------- -------- ----- ------ --------- -------------- --------------
10.0.8.2 4 65100 13 13 0 0 0 00:02:02 3 Ex1-Sp1
10.0.8.6 4 65100 9 8 0 0 0 00:00:12 2 Ex1-Sp2
10.0.8.10 4 65200 14 14 0 0 0 00:02:17 3 Ex1-Sp3
10.0.8.14 4 65200 11 11 0 0 0 00:01:49 3 Ex1-Sp4
Total number of neighbors 4
show ip bgp neighbors
各種設定項目(ngibor-IP/AS, local-AS/holdtime/keepalive...)の確認が可能
admin@SONiC-ExSW1:~$ show ip bgp neighbors
BGP neighbor is 10.0.8.2, remote AS 65100, local AS 65000, external link
Description: Ex1-Sp1
Member of peer-group PEER_V4 for session parameters
BGP version 4, remote router ID 0.0.0.0, local router ID 10.0.9.1
BGP state = Active
Last read 00:39:53, Last write never
Hold time is 180, keepalive interval is 60 seconds
︙
show ip bgp network
bgp周りの設定確認。router-id, local-asNum, networkなどの情報を確認可能。
admin@SONiC-ExSW1:~$ show ip bgp network
BGP table version is 12, local router ID is 10.0.9.1, vrf id 0
Default local pref 100, local AS 65000
Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.0.9.1/32 0.0.0.0 0 32768 i
*> 10.0.9.3/32 10.0.8.2 0 0 65100 i
*> 10.0.9.4/32 10.0.8.6 0 0 65100 i
*> 10.0.9.5/32 10.0.8.10 0 0 65200 i
*> 10.0.9.6/32 10.0.8.14 0 0 65200 i
*> 10.0.9.7/32 10.0.8.2 0 65100 65110 i
*= 10.0.9.8/32 10.0.8.6 0 65100 65110 i
*> 10.0.8.2 0 65100 65110 i
*= 10.0.9.9/32 10.0.8.14 0 65200 65210 i
*> 10.0.8.10 0 65200 65210 i
*= 10.0.9.10/32 10.0.8.14 0 65200 65210 i
*> 10.0.8.10 0 65200 65210 i
Displayed 9 routes and 12 total paths
docker container ls -a
SONiCは各モジュールをcontainerで管理しているので、それぞれのcontainerの状態を確認する必要があるので、SONiC内部で動作している各プロセス(container)を確認可能なこのコマンドを使うと良い。
reloadをした後などでinterfaceがなかなか上がってこないときなどは、containerの状況を確認すべき。特に、swss
はinterfaceを管理しているcontainerっぽいので、swss
が上がらないとbgp
も上がってこないはず。
admin@SONiC-ExSW1:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4de709b79d95 docker-sonic-telemetry:latest "/usr/local/bin/supe…" 8 days ago Up 11 minutes telemetry
23ebfe3caf9d docker-sonic-mgmt-framework:latest "/usr/local/bin/supe…" 8 days ago Up 11 minutes mgmt-framework
93c2112f109b docker-snmp:latest "/usr/local/bin/supe…" 8 days ago Up 11 minutes snmp
a4a2020df5bd docker-lldp:latest "/usr/bin/docker-lld…" 8 days ago Up 12 minutes lldp
7f46f29320f2 docker-router-advertiser:latest "/usr/bin/docker-ini…" 8 days ago Up 12 minutes radv
454862eeb103 docker-gbsyncd-vs:latest "/usr/local/bin/supe…" 8 days ago Up 12 minutes gbsyncd
d43e854b1578 docker-syncd-vs:latest "/usr/local/bin/supe…" 8 days ago Up 12 minutes syncd
fb3af6311a42 docker-teamd:latest "/usr/local/bin/supe…" 8 days ago Up 12 minutes teamd
d85c2a69edfd docker-orchagent:latest "/usr/bin/docker-ini…" 8 days ago Up 12 minutes swss
960a6af915c9 docker-platform-monitor:latest "/usr/bin/docker_ini…" 8 days ago Up 13 minutes pmon
4f6d72d4cb65 docker-fpm-frr:latest "/usr/bin/docker_ini…" 8 days ago Up 13 minutes bgp
da38cf39aba8 docker-eventd:latest "/usr/local/bin/supe…" 8 days ago Up 13 minutes eventd
d36c54948bc7 docker-database:latest "/usr/local/bin/dock…" 8 days ago Up 14 minutes database
トラブルシューティングとして、特定のプロセスが上がってこなければ、sudo journalctl
で各プロセスのjournalを確認。
show ip route
ルーティングテーブルの確認。
admin@SONiC-ExSW1:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
f - OpenFabric,
> - selected route, * - FIB route, q - queued, r - rejected, b - backup
t - trapped, o - offload failure
C>* 10.0.8.0/30 is directly connected, Ethernet4, 00:47:52
C>* 10.0.8.4/30 is directly connected, Ethernet8, 00:47:50
C>* 10.0.8.8/30 is directly connected, Ethernet12, 00:47:55
C>* 10.0.8.12/30 is directly connected, Ethernet16, 00:47:54
B>* 10.0.8.16/30 [20/0] via 10.0.8.2, Ethernet4, weight 1, 00:10:06
B>* 10.0.8.20/30 [20/0] via 10.0.8.6, Ethernet8, weight 1, 00:08:21
B>* 10.0.8.24/30 [20/0] via 10.0.8.10, Ethernet12, weight 1, 00:06:54
B>* 10.0.8.28/30 [20/0] via 10.0.8.14, Ethernet16, weight 1, 00:05:22
B>* 10.0.8.32/30 [20/0] via 10.0.8.2, Ethernet4, weight 1, 00:10:06
B>* 10.0.8.36/30 [20/0] via 10.0.8.2, Ethernet4, weight 1, 00:10:06
B>* 10.0.8.40/30 [20/0] via 10.0.8.6, Ethernet8, weight 1, 00:08:21
B>* 10.0.8.44/30 [20/0] via 10.0.8.6, Ethernet8, weight 1, 00:08:21
B>* 10.0.8.48/30 [20/0] via 10.0.8.10, Ethernet12, weight 1, 00:06:54
B>* 10.0.8.52/30 [20/0] via 10.0.8.10, Ethernet12, weight 1, 00:06:54
B>* 10.0.8.56/30 [20/0] via 10.0.8.14, Ethernet16, weight 1, 00:05:22
B>* 10.0.8.60/30 [20/0] via 10.0.8.14, Ethernet16, weight 1, 00:05:22
C>* 10.0.9.1/32 is directly connected, Loopback0, 00:48:42
B>* 10.0.9.3/32 [20/0] via 10.0.8.2, Ethernet4, weight 1, 00:46:21
B>* 10.0.9.4/32 [20/0] via 10.0.8.6, Ethernet8, weight 1, 00:44:32
B>* 10.0.9.5/32 [20/0] via 10.0.8.10, Ethernet12, weight 1, 00:46:37
B>* 10.0.9.6/32 [20/0] via 10.0.8.14, Ethernet16, weight 1, 00:46:08
B>* 10.0.9.7/32 [20/0] via 10.0.8.2, Ethernet4, weight 1, 00:46:21
B>* 10.0.9.8/32 [20/0] via 10.0.8.2, Ethernet4, weight 1, 00:44:32
* via 10.0.8.6, Ethernet8, weight 1, 00:44:32
B>* 10.0.9.9/32 [20/0] via 10.0.8.10, Ethernet12, weight 1, 00:46:08
* via 10.0.8.14, Ethernet16, weight 1, 00:46:08
B>* 10.0.9.10/32 [20/0] via 10.0.8.10, Ethernet12, weight 1, 00:46:08
* via 10.0.8.14, Ethernet16, weight 1, 00:46:08
B>* 192.168.10.0/24 [20/0] via 10.0.8.2, Ethernet4, weight 1, 00:25:57
B>* 192.168.20.0/24 [20/0] via 10.0.8.2, Ethernet4, weight 1, 00:13:17
* via 10.0.8.6, Ethernet8, weight 1, 00:13:17
B>* 192.168.30.0/24 [20/0] via 10.0.8.10, Ethernet12, weight 1, 00:11:59
* via 10.0.8.14, Ethernet16, weight 1, 00:11:59
B>* 192.168.40.0/24 [20/0] via 10.0.8.10, Ethernet12, weight 1, 00:10:50
* via 10.0.8.14, Ethernet16, weight 1, 00:10:50
C>* 192.168.50.0/24 is directly connected, Ethernet0, 00:47:55
躓いた点
- 各パラメータの設定ミス
自分で定義しておきながら、AS番号を間違って設定していたり、GNS3で結線したポートとは違うinterfaceにアドレスを設定したりしていました。そのため、neighborが確立されなかったり、arp要求が溢れていたりして、特定に結構時間がかかりました。トラブルシューティング時の原因のほとんどがヒューマンエラーだったので、コマンドを発行前に入念にチェックすべきだと身にしみて感じました。。 - コンポーネント故障による問題の特定
リソースがそこまで潤沢に与えられていなかったので、頻繁にノードが落ちてコンポーネントが故障してしまったりしてしまっていて、ヒューマンエラーなのかコンポーネントの故障なのかの問題の特定に時間がかかりました。
おわりに
今回は、2rack/3layerのClosNWをSONiCでGNS3上に構築しました。
全てのノードに対して、設定ファイルを手書きで入力したので結構時間がかかりました。
今後は、Ansibleなどの構成管理ツールを使ってそこら辺を自動化したいなあと考え中です。
あと、GNS3を使うのではなくて、vbox上で各ノードを立ててk8sクラスタを組んで、フォールトトレラントとスケーラビリティを向上させた環境の構築が出来れば良いなあとも思っています。今の環境だと、リソースが固定化されているため、メモリがギリギリ(構築中に最大40G割り当てで90%くらいまで上昇)になったり、ノードのコンポーネントが壊れたりしているので、そういった改善も必要だと思っています。