task4233のめも

書きたいことをつらつらと

NTTコミュニケーションズ ISPネットワークのつくり方 参加記

はじめに

こんにちは。task4233 です。

2022年1月22日(土)にNTTコミュニケーションズにて開催された「ISPネットワークのつくり方」に参加しました。午前中にはISPネットワーク構築に関する座学が、午後にはハンズオンが行われました。

この記事は、特に学びが多かった午後のハンズオンの内容を書き記すために執筆されました。そのため、ハンズオンに繋がるStatic RoutingとDynamic Routingの話を紹介した上で、ハンズオンで利用したJunos OSとCisco IOSと私が挑戦したExtra Stageの内容について書きます。

午前 - 座学

今回の座学は、OSI基本参照モデルネットワーク層に該当し、ネットワーク機器間の通信経路を確立するための処理に関わる話がメインでした。

前提知識

説明に関わる基本単語をここで提示します。

  • AS(Autonomous System)
    • 相互に接続し合うネットワークのこと
    • 世界で一意な番号が付与されている
  • Peer
    • 接続したASの経路を交換して、お互いのネットワーク到達性を確保する関係のこと
  • ISP(Internet Service Provider)
    • インターネット接続サービスを提供するプロバイダ
  • IX(Internet eXchange)
    • 必要な回線数を減らすためにISPやデータセンタ同士の相互接続するポイントのこと
    • IXが無いと、N個のASがある場合フルメッシュでPeerを張るとN(N-1)/2 回線必要
      • IXを用意すれば、各ASがIXにアクセスするだけで良いので N 回線で済む
      • 嬉しいね
  • ルーティング
    • TCP/IPネットワーク上で目的のノードまでの最適な経路を選択すること
  • ルーティングプロトコル
    • ネットワークの経路情報を交換するためのプロトコル
    • Static Routing(静的経路制御)とDynamic Routing(動的経路制御)の2つがある

ルーティングに利用されるロジックと技術

ルーティングにおける最適経路選択におけるロジックとして、下記の3つのロジックがあります。

  1. Longest Prefix Match
  2. Administrative Distance(AD値)
  3. Metric

それぞれ簡単に説明します。

  • Longest Prefix Match
  • Administrative Distance(AD値)
    • プロトコルごとで優先度をつけるための値
    • 値が小さい方が優先される
    • ベンダによって異なることがあるが、大枠の優先順位としては変わらない
  • Metric
    • 同一のルーティング, プロトコルでルートが重複した際にどちらを優先するか決める値
    • 値が小さい方が優先される
    • RIPならホップ数、OSPFならインタフェースの帯域幅と言ったようにルーティングプロトコルに応じて異なるMetricを利用する
      • 全てのルーティングプロトコルで同じ指標なわけないよね

以上の経路の情報はRIB(Routing Information Base)として保持されます。このRIBはルーティングテーブルとも呼ばれ、後述するDynamicなルーティングプロトコルであるOSPFやBGPごとに存在し、ルータはそれらの経路をマージして1枚のルーティングテーブルを作成します。

この情報を用いてルータのパケット転送に最適な情報であるFIB(Forwarding Information Base)が生成されます。この結果がルータのCAMに書き込間れることで、ハードウェア的に高速なルート決定を行っています。

CAMとTCAM等については、こちらのスライドの説明が具体的で分かりやすかったです。

www.slideshare.net

Static Routing と Dynamic Routing

先述したとおり、ルーティングプロトコルには、Static Routing(静的経路制御)とDynamic Routing(動的経路制御)の2つがあります。正しくは、ルータが直接接続しているネットワークであるConnected(直接接続経路)もありますが、そのままなので説明は省きます。

  • Static Routing
    • 静的に設定された経路情報を使う
    • メリット
      • 帯域幅が狭い時に適している
        • Dynamic Routingのような経路探索のための通信が発生しないため
      • ルータに負荷がかかりづらい
        • 入れた瞬間にルータ自身のRIBとしての計算は走るが1回のみ
    • デメリット
      • 障害があったときに死んだまま
      • ネットワークが大きくなればなるほど設定が辛い
  • Dynamic Routing
    • ルーティングプロトコルにて他のルータの経路情報を使う
    • メリットとデメリットはStatic Routingのvice versa
    • ルーティングプロトコルとして、IGPならOSPF、EGPならBGPが有名
      • OSPFに関しては、DR*1とBDR*2を用意して、それらのルータにコネクションを集中させることで、ネットワーク全体のコネクション数を削減している
        • BDRはバックアップという位置付けではあるが、実質ダブルマスターの構成のイメージ

この後、ISPネットワークへの攻撃手法と対策、監視と制御、SDNに関する話がありました。午後のハンズオンに大きく関わる訳ではないので詳細は省きますが、基本的な内容でした。

午後 - ハンズオン

ハンズオンでは、提示された要件を満たすネットワークを構築しました。
ネットワークは2つのASから構成され、AS間はEGPとしてBGPを、AS内ではIGPとしてOSPFを用います。

ネットワーク機器の設定でミスが発生すると大きな障害に繋がり、最悪の場合SLAに大きな打撃を与える可能性があります。そのため、データベースのトランザクションのように、変更がCommitされるまで適用されないという特徴を兼ね備えているものが多いそうです。

今回のネットワーク内ではJunos(Juniper Networks)およびCisco IOS(Internet Os Software)が混在していました。いずれも処理の流れに大きな違いはありませんでした。

基本の流れは下記の3手順でした。

  1. 状態の確認
  2. 変更のプール
  3. 変更の適用

ネットワークの構成図は非公開だと思うので、ハンズオンでよく利用したコマンド等を備忘録として貼っておきます。困ったらヘルプが見れるので大体 ? を実行しておけば良いです。

Junos OS

Junos OSはシェルコマンドモード、オペレーションモード、コンフィグレーションモードの3つのモードが存在します。下記ページの説明がわかりやすかったです。

www.infraeye.com

よく利用したコマンドは下記の通りです。大体 ? を実行するかドキュメントを参照すればなんとかなります。

  • オペレーションモードからコンフィグレーションモードに移行したい時
    • configure
  • 現行の状態を表示したい時
    • show ${表示対象のキーワード}
    • 困ったら show ? でなんとかなる
    • e.x.) show configuration, show route
  • 情報を新たに設定したい時
    • set ${表示対象のキーワード} ...
    • 困ったら set ? でなんとかなる
  • 変更を取り消したい時
    • delete ${削除対象のキーワード} ...
    • 困ったら delete ? でなんとかなる
  • commit前の変更差分を見たい時
    • show | compare
  • commitする時
    • commit check で変更内容のバリデーション
    • commit でコミット

Cisco IOS

Cisco IOSは4つのモードがあります。下記ページの説明がわかりやすかったです。

www.infraexpert.com

よく利用したコマンドは下記の通りです。大体 ? を実行するかドキュメントを参照すればなんとかなります。

  • Privileged EXECモードからGlobal Configurationモードに移行したい時
    • configure terminal
  • 現行の状態を表示したい時
    • show ${表示対象のキーワード}
    • 困ったら show ? でなんとかなる
    • e.x.) show running-config
  • 情報を新たに設定したい時
    • 設定したいコンフィグレーションモードに入る
    • コンフィグレーションモードに入ると、(config-*)# の様に表示される
      • interfaceのコンフィグレーションなら (config-if)#
      • routerのコンフィグレーションなら (config-router)#
  • 変更を取り消したい時
    • no句を接頭辞として、情報を新たに設定したい時と同じ処理を実行すれば良い
    • 困ったら no ? でなんとかなる
  • commit前の変更差分を見たい時
    • show commit changes diff
  • commitする時
    • commit でコミット

Extra Stage

追加課題が5つ用意されていた内2つ解きました。その時の問題と解答例をこちらで供養しておきます。

1.任意のリンク切断

  • 任意のリンクを切断することによりルーティングテーブルやTrafficにどのような変化が起きますか?
    • 切断したリンクのTrafficが0になった
    • ルーティングテーブルは確認していないが、リンク切断に応じてそのルートの優先度が低い並びに変更されていると考えられる
  • Dynamic Routing Protocol(OSPFやBGPなど)はどのようなしくみで動的に経路を制御しているでしょうか?
    • Neighborとの到達を確認することで、そのコストを動的に確認することで制御していると考えられる

2.in-boundおよびout-boundのtrafficをねじ曲げる

  • 指定した経路をTrafficが流れるように設定を変えてください
    • 指定した経路のBGPのLP(LOCAL_PREF)属性を高く、MED(MULTI_EXIT_DISC)属性を低くする
      • ちなみに、configを見る限り、LPはINはout-bound用に、MEDはin-bound用に利用されると考えられる
    • 指定した経路以外の経路に逆操作を行う
  • Static Routing/Dynamic Routingそれぞれのメリット/デメリットとして何が考えられるでしょうか?

おわりに

マスタリングTCP/IPの入門編程度しか読んでいなかった中で、実際にコマンドを実行しながらISPネットワークの構築とルーティングプロトコルについて学べるイベントでした。そもそもASを複数利用する現場にJOINすることがなかった(今後もなさそうな)ので、非常に貴重な経験ができたと思います。

来年も実施されるようであればぜひ参加してみてはいかがでしょうか? (これ毎回言ってる気がしますね)

*1:Designated Router: 代表ルータ

*2:Backup Designed Router: バックアップ代表ルータ