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

BGP in the Data Center

  • 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}
}