APRESIA Technical Blog

Cumulus LinuxでIP CLOS構築

IP CLOSって?

データセンターネットワークにて求められている、スケールアウトが容易なLeaf-SpineアーキテクチャをL3で構築する技術です。 今回は、オープン・スタンダードであるBGPを使用し、Leaf-Spine間をL3接続し、シンプルなアンダーレイを構築します。 多くの大規模DC(Google、Facebook、Microsoft、ヤフーなど)で採用されています。

IP CLOS デザイン

IPCLOS
  • 一つのルーティングプロトコル(eBGP)のみを使用
  • Leaf(ラック)毎にPrivate ASNを割り当て(トラブルシューティングの簡素化)
  • ECMPによる負荷分散(multipath relax)
  • 高速コンバージェンス(Leaf-Spine間直接リンクダウン、またはBFD使用)
  • BGPによる柔軟な経路制御
  • VMモビリティは同一ラック内
  • EVPN-VXLANへのマイグレーションが容易

それでは、Cumulus LinuxでIP CLOS構築していきます!

ネットワーク構成

"BGP unnumbered"を使用します。"BGP unnumbered"を使用するとスイッチ間のBGP接続にIPv6リンクローカルアドレスを使用した自動的なBGPピア形成が可能です。これにより、IP CLOSファブリック内の多数のIPサブネット管理から解放されます。Cumulus Linuxを使用する場合、unnumberedは鉄板ですね。

ネットワーク構成
  • Leaf SWは、Edgecore Networks社のAS5812-54Tを使用
  • Spine SWは、Edgecore Networks社のAS5812-54Xを使用
  • Cumulus Linux 3.7.3を使用

Config設定

Leaf01

  • /etc/network/interfaces
    # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/*.intf # The loopback network interface auto lo iface lo inet loopback address 10.0.0.11/32 # The primary network interface auto eth0 iface eth0 address 192.168.100.90/24 gateway 192.168.100.1 auto swp1 iface swp1 bridge-vids 10 auto swp49 iface swp49 link-speed 40000 auto swp50 iface swp50 link-speed 40000 auto bridge iface bridge bridge-ports swp1 bridge-vids 10 bridge-vlan-aware yes auto vlan10 iface vlan10 address 172.16.0.1/24 vlan-id 10 vlan-raw-device bridge
  • /etc/frr/frr.conf
    frr version 4.0+cl3u9 frr defaults datacenter hostname Leaf01 username cumulus nopassword ! service integrated-vtysh-config ! log syslog ! interface swp49 ipv6 nd ra-interval 10 # BGP unnumbered interface no ipv6 nd suppress-ra # BGP unnumbered interface ! interface swp50 ipv6 nd ra-interval 10 # BGP unnumbered interface no ipv6 nd suppress-ra # BGP unnumbered interface ! router bgp 65011 bgp router-id 10.0.0.11 bgp bestpath as-path multipath-relax # BGPマルチパス設定 neighbor FABRIC peer-group neighbor FABRIC remote-as external neighbor FABRIC bfd neighbor FABRIC capability extended-nexthop # BGP unnumbered neighbor swp49 interface peer-group FABRIC # unnumbered I/F指定 neighbor swp50 interface peer-group FABRIC # unnumvered I/F指定 ! address-family ipv4 unicast network 10.0.0.11/32 network 172.16.0.0/24 exit-address-family ! line vty !

Spine01

  • /etc/network/interfaces
    # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/*.intf # The loopback network interface auto lo iface lo inet loopback # The primary network interface address 10.0.0.1/32 # The primary network interface auto eth0 iface eth0 address 192.168.100.85/24 gateway 192.168.100.1 auto swp49 iface swp49 link-speed 40000 auto swp50 iface swp50 link-speed 40000
  • /etc/frr/frr.conf
    frr defaults datacenter hostname Spine01 username cumulus nopassword ! service integrated-vtysh-config ! log syslog ! interface swp49 ipv6 nd ra-interval 10 no ipv6 nd suppress-ra ! interface swp50 ipv6 nd ra-interval 10 no ipv6 nd suppress-ra ! router bgp 65020 bgp router-id 10.0.0.1 bgp bestpath as-path multipath-relax neighbor FABRIC peer-group neighbor FABRIC remote-as external neighbor FABRIC bfd neighbor FABRIC capability extended-nexthop neighbor swp49 interface peer-group FABRIC neighbor swp50 interface peer-group FABRIC ! address-family ipv4 unicast network 10.0.0.1/32 exit-address-family ! line vty
  • Leaf02、Spine02は割愛(IPアドレス、ASN、ルーターIDなど個別パラメーターのみの違い)

動作確認

  • PC1→PC2へPing:当然通ります
# ping 172.16.1.10 -c 1 PING 172.16.1.10 (172.16.1.10) 56(84) bytes of data. 64 bytes from 172.16.1.10: icmp_seq=1 ttl=61 time=2.78 ms --- 172.16.1.10 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 2.789/2.789/2.789/0.000 ms
  • BGP確認(Leaf01)
cumulus@Leaf01:~$ net show bgp show bgp ipv4 unicast ===================== BGP table version is 41, local router ID is 10.0.0.11 Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, i internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 10.0.0.1/32 swp49 0 0 65020 i *> 10.0.0.2/32 swp50 0 0 65020 i *> 10.0.0.11/32 0.0.0.0 0 32768 i *= 10.0.0.12/32 swp49 0 65020 65012 i *> swp50 0 65020 65012 i *> 172.16.0.0/24 0.0.0.0 0 32768 i *= 172.16.1.0/24 swp49 0 65020 65012 i *> swp50 0 65020 65012 i
"172.16.1.0/24"のPrefixをマルチパスで学習していることが分かります。Next Hopとして出力ポート(swp49,swp50)が表示されます。

cumulus@Leaf01:~$ net show route 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, D - SHARP, F - PBR, > - selected route, * - FIB route B>* 10.0.0.1/32 [20/0] via fe80::aa2b:b5ff:fe9d:c0ec, swp49, 03w2d05h B>* 10.0.0.2/32 [20/0] via fe80::aa2b:b5ff:fe9d:bfc4, swp50, 03w2d06h C>* 10.0.0.11/32 is directly connected, lo, 03w2d06h B>* 10.0.0.12/32 [20/0] via fe80::aa2b:b5ff:fe9d:bfc4, swp50, 01w1d00h * via fe80::aa2b:b5ff:fe9d:c0ec, swp49, 01w1d00h C>* 172.16.0.0/24 is directly connected, vlan10, 03w2d02h B>* 172.16.1.0/24 [20/0] via fe80::aa2b:b5ff:fe9d:bfc4, swp50, 01w1d00h * via fe80::aa2b:b5ff:fe9d:c0ec, swp49, 01w1d00h C>* 192.168.100.0/24 is directly connected, eth0, 03w2d06h
net show routeで確認すると、Next Hopとして対向装置のIPv6リンクローカルアドレスが表示されます。

まとめ

BGP unnumberedを使用することで、スイッチ間のリンク用のIPアドレス設定やBGPピアアドレスの指定が不要となり、BGPベースのCLOS構成を非常にシンプルなConfigで構成することが確認できました。

次回は、今回構築したIP CLOSのアンダーレイNWにオーバーレイNW(EVPN-VXLAN)を追加してみようと思います。

実機で試してみたい方必見!POCキャンペーン開催中!!


ホワイトボックスに興味ある方はこちら