Cumulus Linux - 基本的な L3 設定(FRR, Static) - 1
Cumulus Linux に興味が湧いたので触っています。ここでは頭の整理として基本的な部分をまとめました。
また、長くなったので記事を分割しました。
- Cumulus Linux - 基本的な L3 設定(FRR, Static) - 1
- Cumulus Linux - 基本的な L3 設定(OSPF) - 2
- Cumulus Linux - 基本的な L3 設定(BGP) - 3
ここでは FRR と Static について扱います。
FreeRangeRouting
OSPF, BGP など一般的に求められる機能がサポートされていますが、そのドキュメントを読むと随所にFRR
という単語が出てきます。
プロトコルの前にまずはFRR
について整理します。
概要
FRRとはQuagga(ソフトウェアルータ)
をルーツとした LinuxFoundation が管理している Linux/Unix のプラットフォームに向けた IP Routing Protocol Suite です。簡単にいうとライブラリです。
名前の通り Free のためGitHubにソースが公開されています。
サポートしている RFC をみたいときにはFeatureMatrixが参考になるかもしれません。
このことから各種プロトコルの設定は FRR
の設定ファイルに当たる /etc/frr/frr.conf
に設定されます。
アーキテクチャ
bgpd
, ospfd
, ospf6d
といったようにプロトコル単位に daemon があり、それらをzebra
が差分を吸収し、Kernel Routing Table
に経路情報を設定します。
利用している daemon は yes
となります。
cumulus@leaf01:mgmt:~$ sudo cat /etc/frr/daemons ... bgpd=yes ospfd=yes ospf6d=yes ripd=no ripngd=no isisd=no fabricd=no pimd=no ldpd=no nhrpd=no eigrpd=no babeld=no sharpd=no pbrd=no fabricd=no vrrpd=no
このことから設定の変更を反映させるには各 daemon を再起動する必要がありますが、frr.service
を再起動することで、結果的に依存している各種サービスも再起動することができます。
詳細はArchitectureを参照ください。
設定の変更について
Cumulus Linux のユーザーには3つの設定方法が用意されています。そのため、各種マニュアルには3つの方法が記載されています。
net(NCLU)
コマンドを通してfrr.conf
に設定vtsh(FRR)
コマンドを通してfrr.conf
に設定vi /etc/frr/frr.conf
で直接編集
net
コマンドと、vtsh
コマンドの比較はココに書いてあります。
個人的な意見ではvtsh
の方が慣れればシンプルなので高速に思いますが、他の操作もあるのでnet
コマンドでまずは慣れるほうがいいと感じています。
ちなみに、/etc/network/interfaces
からインターフェース情報をルーティングテーブルに継承する仕組みのため、vtsh
やfrr.conf
ではプロトコル"のみ"変更を行います。
ログについて
以上のことからプロトコルのログは/var/log/frr/frr.log
で確認できます。出力レベルはinfo
となり、debug
に変更したい場合はマニュアルを参照してください。
Route Entries
設計にあたって重要なスペックですが、Broadcom など汎用チップと共に利用するため、その仕様に合わせる必要があります。
詳細はマニュアルを参照ください。
簡単にいうと MAC アドレス、IPv4、IPv6、Neighbor 数に応じてメモリの割り当て量をセットしたパターンから1つ選択します。例えば L2 スイッチで使うなら、L3 関連のリソースは不要なのでl2-heavy-1
を選ぶ、、といった考え方です。
ECMP
ECMP は次の仕様となります。
- デフォルトで有効
- 同じプロトコルで等コストであること
- フローベーすハッシュ
- Hash*は IP protocol, 入力 IF, src IP, dst IP, src TCP/UDP, dst TCP/UDP
* Meallnox などの Spectrum ASIC 搭載の L2 では src/dst MAC, Etye Type, VLAN ID も評価
hash-seed の変更は次の通りです。範囲が広いでの loopback から求めるような仕組みにしてもいいかもしれません。
cumulus@spine01:mgmt:~$ net add forwarding ecmp hash-seed <0-4294967295> : An integer from 0 to 4294967295
ハッシュのカスタマイズは Mellanox のスイッチでサポートされています。詳細はマニュアルを参照ください。
Static Routing
Static Routing です。一般的な方法かと思います。
net add routing route 0.0.0.0/0 192.168.0.2 net add routing route 192.168.1.0/24 192.168.0.2
route に追加されます。
cumulus@spine01:mgmt:~$ net show route static RIB entry for static ==================== ... S>* 0.0.0.0/0 [1/0] via 192.168.0.2, swp1, weight 1, 00:01:29 S>* 192.168.1.0/24 [1/0] via 192.168.0.2, swp1, weight 1, 00:08:46
また next-hop には IP だけではなく、blackhole
やreject
があるので、再配信の時に利用するかもしれませんね。
cumulus@leaf01:mgmt:~$ net add routing route 192.168.200.0/24 <interface> : An interface name "swp1" or glob "swp1-4,6,10-12" <ipv4> : an IPv4 address lo : interface eth0 : LLDP peer oob-mgmt-switch swp1 : interface swp2 : interface swp3 : interface swp49 : LLDP peer leaf02 swp50 : LLDP peer leaf02 swp51 : LLDP peer spine01 swp52 : LLDP peer spine02 swp53 : LLDP peer spine03 swp54 : LLDP peer spine04 Null0 : Null interface blackhole : Silently discard pkts when matched g-ebgp : interface group-ibgp : interface mgmt : interface reject : Emit an ICMP unreachable when matched
IPv6 は同じ方法なので省略します。
まとめ
ざっと最低限使う機能を整理しました。他のプロトコルも触っていこうと思います。
よければ他の記事も参照ください。