すいまの振り返り

Twitterや登壇やイベントの振り返り用の雑記です。

インフラ勉強会セッション ルーティングプロトコルの話

インフラ勉強会で2019/4/21に登壇したセッションです。

資料自体は数ヶ月前に作成済みでしたが、寝かせていたネタでした。

wp.infra-workshop.tech

scrapbox.io

概要

  • ルーティングとは
  • ルーティングテーブルとは
  • ルーティングプロトコルとは
    • 種類(特性によるジャンル分け)
  • RIP(Route Information Protocol)の動作

コメント要約

discord上に保持できるチャンネル数に限りがあることから、今回からコメントで出た話題を要約して残していこうと思います。 一部、私の個人的な考察も混ざっています。 「」がコメントです。

  • 「RIP懐かしい」
    • 授業や講義の中でやる場合は動作が単純なRIPを取り上げることが多いので懐かしく感じるのかな?
  • 「staticで済むのは設計がしっかりしている証拠」
    • おっしゃる通り
  • 「ネットワークと聞くと用語が多く、敷居が高い感じがする」
  • Googleのデータセンターと自宅直結したい」
  • 「ネットワークトポロジーは地図みたいなもの」
    • ノードの接続関係を示すものなので確かに地図みたいですね
  • 「ルーティングテーブルはAWSだとルートテーブル」
  • 「メトリックはあまり意識したことがない」
    • 「冗長経路を切り替えるときに使うかも」
      • 未確認ですがそういう使い方もできると思います
  • 「ダイナミックルーティングは動的なのにどうやって追加するのかがわかってない」

  • クイズ:ルーティングテーブルがないとルーティングできない。〇か×か?

    • みなさん×を選択されていましたが、ではルーティングテーブルがない場合どうするのかについては悩んでいらっしゃいました
      • 誤回答:「デフォゲ?」「ブロードキャストで総当たり」「パワーで解決」
      • 正解(のうちのひとつ):「パケットに経路情報を持つ」(「パスルーティング」と呼びます)
        • イメージしづらいようですが、次にどこに回すのか書いてある「回覧板」が近いイメージかと思います
  • 「経路の選択肢はどうやってわかるか?」
    • これもルーティングプロトコルの動作の目玉ですね 制御メッセージによって情報を集めることで経路の候補が"だんだん"わかってきます
  • 「IPの世界ではだいたいプロアクティブかつホップバイホップ」
  • 「ディスタンスベクタはRIP、リンクステートはOSPFが代表的」
  • 「ハートビート的なことをしている?」
    • 何秒かに1回メッセージを送信することで「生きてる」ことを知らせる役割もあります
  • 「育つルーティングテーブル」
    • 余談:資料などをみんなで「育てていく」という表現が好きです みんなからの情報が集まって形になる感じ
  • 「コスト≒メトリック」
    • 厳密に言い分けるとするとリンク1つに対するコストをメトリックと呼びます
    • 狭義のコストは送信元~宛先の経路すべてを通してのメトリックの総和を指します

経路ループについて

  • 「経路ループはどんな感じになる?」
    • ノードXが持つルーティングテーブル:宛先Aに対しての次ホップはY
    • ノードYが持つルーティングテーブル:宛先Aに対しての次ホップはX
    • ↑のようになるとA宛のパケットをXとYで送りあう形になりループします
    • 経路ループは主にノードが持つ情報間の不整合が原因です
    • 3つ以上のノードでループすることもあります
    • パケットのTTLが切れるまでループし続け、TTLが0になると破棄されます
  • 「スプリットホライズンは脇に置いてる感じですかね?」
    • スプリットホライズン:RIPに実装されている余分な情報を流さない仕組みです
    • 今回はRIPを例に挙げていますが、RIPに限定しない話にしたかったので説明からは除外しています
  • 「RIPのコストは16で無限扱い」
    • ルーティングプロトコルはオーバーヘッドを小さくするためにできるだけ動作が軽くなるよう実装されています
    • 変数のビット数も小さいものになっていることが多いです

TTLと経路ループ

  • 「(TTLについて)登壇者「ポケモンで言う"ほろびのうた"」
    • カウントが0になると死ぬので…
  • 「FFの死の宣告みたいな」
    • FFわかりませんごめんなさい
  • 「L2でのループのように半永久的に回り続けるわけではないので機器や回線への負荷は問題にならないこともあります(なることもある)」
    • L2だと本当にループし続けますからね… TTLはそこまで大きな値にならないので長くて数秒のループで済むはずです

古いルートはどうなる?

  • 「ノードが移動したとして、ルータにとって移動後のコストが移動前のコストより高かったら書き換えられないままになってしまうことはないのでしょうか?」
    • 有効期限や、その経路がいつ登録されたかの情報を持っているので古いものが使われ続けるということはないようになっています
    • 同じ経路の有効性が確認できれば有効期限は延長されます
  • 「「お前の知っているルートは古いんじゃ~」と言われる仕組みってあるんでしょうか?」
    • 制御メッセージに載っている経路にも有効期限や時刻の情報は持っているので、新しい情報が来たら更新するように実装されているものもあります

IP保持したままの移動

  • 「有線の世界だとIP保持したままノードが移動するのがピンと来ないんですけど、無線の世界だとよくある動作なんでしょうか」
    • 無線ネットワークでも接続するネットワークが変わればIPアドレスは変わります
    • 複数のアクセスポイントで同じSSIDを持つようなネットワークや、メッシュネットワークが例として挙げられます
  • 「4G/LTEとかもメッシュネットワークなのかな?」「携帯の基地局なんかは結構大規模に経路変わりそう」

    • 4G/LTEをはじめとする「携帯電話網」はメッシュネットワークと考え方が大きくことなります
    • 絵にすると似たような感じになるんですけどね
  • 「どちらかというと途中のルータが死んだときの方が使うかも」

  • 「Q. デフォルトゲートウェイとデフォルトルートに違いはありますか」

    • ルーティングテーブルになかった場合に送る先を管理しているという意味では同じです
    • 送る先そのものを呼ぶか、送る経路として呼ぶかの違いだと思います
  • 「Q. 実機を使わずにネットワークの勉強をしたい人向けに何かいい方法はありますか」

    • 非常に悩ましい質問でした
    • ネットワークの何を学びたいかによりますが、概念や基本的な考え方であれば書籍は充実していると思います
    • 実務で使うようなテクニックという意味では、中古で実機を買うか、シミュレータ、エミュレータを触ってみるしかないかもしれません
    • 以下、コメントでいただいたアイデアです
    • 「シスコのパケットトレーサー(シミュレーター)とかいいんじゃないですか?」
    • 「GNS3(エミュレーター)は無料で使える」
    • 「学習環境を整えるのが難しいのが敷居が高い原因かも」
    • 「どこのサイトにも中古を買えって書いてある」
    • 「NW機器ベンダーによって微妙に動作も違うから注意」
    • VMware ESXi で各ベンダーの仮想ルータを構築して接続している」
    • Linux(iproute)ベースだとmininetとかも」
    • 「中古保守切れ品を安く買ってコマンド確認とかしてた」
    • ciscoだと公式でvirlというのがある(有料)」「年間更新なのでブラックフライデーがねらい目」
    • 「packet.comのベアメタルクラウド上でvirl使うと端末に負荷がかからなくて最高」
    • 「dockerとかのコンテナいっぱい使ってネットワークエミュレートできないかなー(思い付き)」
      • 「docker要素が多くて学習としては向かないかも」
  • 「Q. ダイナミックルーティングはどんなケースで使われるのでしょうか?ISPやDC運用者が中継するのに使うのはわかるのですが、それ以外はどんなケースがあるのでしょう?」

    • 一般家庭やオフィス内の汎用的なPCなど厳密な管理が必要ではない場合はダイナミックルーティングで問題ないケースです
  • AWSVPCVPNやDirect Connectでオンプレ等から繋ぐとき、スタティックでなければBGP4でルーティングしますね」
  • 「有線と無線って結構違うので最初は優先だけ考えたほうがシンプルな気がする」
    • 仕組み的には大きく違わないですが、シーンというかネットワークトポロジー特性はかなり違うので混乱するかもしれません
  • 「メッシュネットワークわからん」
    • 別セッション開催します!資料ができ次第開催予定です
  • 「Q. 過去の特定時点のルーティング情報って後から調べることはできますか?」
    • ルーティングプロトコルとしてそのような仕組みはありません(独自実装していなければ)
    • 必要な場合は、ルーティングテーブルをログに吐くような設定を各ノードで行う必要があります

感想

インフラに携わっていてもルーティングプロトコル(≒ダイナミックルーティング)は馴染みがない方も多いのではと思い概要の解説セッションをやりました。

さすがインフラ勉強会。インフラの話だけあって参加者数(60人ぐらい)や盛り上がりがすごかったです。 有線の話はあまり詳しくないので、特に学習の話はコメントに助けられました。

「あれを説明するにはこれを説明しなきゃ」とどんどん話題が広がってしまうので、難しい面もありました。 メッシュネットワークの話は馴染みがなく、ややこしく感じているような印象を受けましたので別セッションとして分けて解説したいと思います。

ルーティングに限らず、「他の領域を(あまり)意識しないで済む」というのは、IT技術の特長のひとつだと思います。 だからこそ、他の領域に興味を持つきっかけがないとなかなか手が伸ばせないと思うので、セッション/登壇はそういった興味を持ってもらう/持つきっかけにしていきたいです。