BGP in the Data Centerの前半部分を読んだので、気になったところをメモしておく。CLOSネットワークをどのように設計するか、BGPをどのように運用するかについて、実践的な内容が書かれていた。普段触っていない領域なので、勘違いもあると思う。
1. Introduction to Data Center Networks
- ローカルネットワーク内のサーバ間通信をEast-Westトラフィック、ローカルネットワークと外部のネットワークの間の通信をNorth-Southトラフィックと呼ぶ。
- 大量のケーブルを管理する必要があるので、巨大なネットワークの管理者は、それぞれ管理技術を持っている。Prescriptive Topology Manager(PTM)というOSSもある。
- 同一のスイッチで巨大なネットワークを構成しておくと、故障した場合でも、単純に取り替えるだけで復旧できる。日々の運用コストについて考えておくことが大事。
- CLOSネットワークを外部と接続するために、Border PodあるいはBorder Leavesを配置する。データセンタ内で使われているルーティングプロトコルは外部とは分離しておく。もし、Border PodやBordor Leavesを配置できない場合には、すべてのSpinesを外部と接続させる(Spineの対称性を保つため)。
- iBGPに比較し、eBGPは理解やデプロイが容易なので、eBGPを採用するのが良い。歴史的な観点から、eBGPのほうが完成度の高い実装が多い。
2. How BGP Has Been Adapted to the Data Center
- PublicなASNは使わないほうが良い。オペレータを混乱させてしまったり、万が一外部に漏れた時にBGPハイジャックになってしまったりといった危険性がある。
- 2バイトのASNを4バイトへ拡張すると、およそ95,000,000個のprivate ASNを利用できる。
- 単純にすべてのBGPスピーカにユニークなASNを割り当てると、Path Huntingに苦しむことになる。
- あるPrefixへの到達性をもつノードがダウンしたときに、その情報が収束するまでに時間がかかってしまう。これは、BGPのベストパス選択の性質に起因する。
- 真に到達不可能なのか、それとも別の経路でもって到達できるのかの区別ができない。
- 密に接続したCLOSトポロジでは、顕著な問題となる。
- Path Hunting問題への対応として、以下のASN割り当てモデルがある。ループを検出できるので、必要以上にメッセージを送らなくて済む。ただし、Route Summarizationができないことに注意する。
- すべてのToRはユニークなASN
- LeafはPodごとにユニークなASN。Pod内では同一のASN
- Spineは共通のASN
- OSPFやIS-ISはBest path選択のメトリクスを1つだけ。一方、BGPではそれが8つある。
- Wise Lip Lovers Apply oral medication Every Night.
- Wight, LOCAL PREFERENCE, Locally originated, ASPATH, ORIGIN, MED, eBGP over iBGP, NextHop IGP Cost
- これら8つが等しければ、Equal Costと考えられ、Multipath Selectionできる。
- ASPATHの比較については、長さに加えて要素がすべて等しければ、Equal Costとみなされる。
- 例えば、同一のPrefixが異なるASから届いた時には、Multi Pathとはならない。
- ただし、
bestpath -as-path multipath-relax
の設定を行うと、ASPATH長のみで(内容には触れずに)比較するよう設定できる。
- タイマ設定を変更することで、CLOSトポロジにおける収束を早くする必要がある。ふつうはプロバイダ向けを想定して、安定性を第一にデフォルトが設定されていることが多いので、適宜設定する。
- Advertisement Interval:このInterval内に含まれるメッセージは統合されて、送り出される。eBGPの場合、デフォルト30秒だが、0秒に設定すれば良い。
- Keepalive and hold Timers:ある周期でkeepaliveメッセージをピアと交換する。Hold timeの期間内に、keepaliveを受け取らなかった場合は、ノードダウンと判定される。ケーブル障害の検知のために、BFD(Bidirectional forwarding Detectiion)を導入している場合でも、BGPプロセス自体のエラー検出のために、これらのタイマを調整する必要がある。おすすめは、3秒ごとのKeepaliveと9秒間のhold timersである。
- Connect Timer:ピアの接続が切れた時、再接続までの待ち時間。
3. Bulding an Automatable BGP Configuration
bgp router-id
はIPアドレスにしておくのが良い。- 広報したいprefixをstaticに設定するよりも、connected、kernel、ospf、bgp、ripなどのprotocolからrouteを引き継くとよい。
- ただし、不正なアドレスをまちがって広報する可能性があるので、routing policyの設定が必要になる。
prefix equal
よりもprefix belongs
のほうが管理が楽。
- また、routing policyはふつう
route-map
で設定される。
# routing policyの例
ACCEPT_DC_LOCAL(prefix)
{
if prefix belongs to 10.1.0.0/16 then accept
else if (10.0.254.0/24 contains prefix and subnet equals 32) then accept
else reject}
}