どうもこんにちは、Infrabbitです。
毎度毎度自宅ラボいいよ!って記事書いたりしていますが、この度めでたくスイッチが一台死にました。
まあ真面目に監視しているわけでもなく、パトランプが光るわけでもないので、いつの間にか死んでた、という感じではあるんですが、基本的にはこの暑さの影響でしょう。電源部が吹っ飛んだようで、ポート一つ二つ死んだとかいうレベルではなく、そもそも電源がもう入りません。
うんともすんとも言わないので、なんともなりません。NetGearだからライフタイム保障あったような気もするけど、もう何も覚えてないので、めんどくせぇし交換機買いました。
まあそんなわけで交換用のスイッチを手配して、のんびりしていました。
え、ネットワーク機器死んだのにずいぶんのんびりだね、って?
そりゃまあ、スイッチ三台でループしてるので、どこか死んでもトラフィックは止まらないです。おかげでいつ死んだのか全く分からないわけですが。SNMPくらいどこかに流してた気がしますが、めんどくさいので調べてもいません。最近ちょくちょくWebMTGでトラフィック品質が良くないとかアラート出てたけどこれのせいかぁ…くらいには思いましたが。アラートあったんなら調べろよとかは言わないでください、その攻撃は俺に致命傷だ。
まあ壊れても大丈夫なようにはしてたので、そのときに処理すりゃいいや、と思ってたというのはあります。
せっかくなんで暑いし小さいオープンラックでも買って隙間あけてマウントすることにしつつ、調達した24ポートを追加セットアップ、ループを再構成しました。
一応、ゲートウェイに向かうラインのLACPを抱えてるスイッチ死ぬとゲートウェイに向かえなくなるので、そこだけは死んだらわかりますが、まあ変わりのLACPポート用意してあるので、つなぎなおせば回復する、という程度ですね。
これは自宅ラボなんでしょぼいトライアングルですが、基本的にネットワーク、特に基幹と呼ばれる箇所の構造はひとえに多重化の嵐です。こういったスイッチダウンに対応するのは、本来はスタック構造が一番望ましいわけです。
個人的にもスタック機ほしいんですけどね、高いんですよ。なのでトライアングル組んでRSTPでポートベースで動かす話になっているんです。
まあ100人いたら99人が何言ってんだこいつみたいな顔してるのはわかるんですが、ネットワーク好きなんだもの、しょうがないじゃないw
まあ世の中の普通の方々は基本的にポート速度くらいしか興味がありません。
なので、2.5Gbpsとか10Gbpsとかのポートを持つ機器に対してはすげえ!っていうんですが、そもそもネットワークはもっと深淵をのぞき込むような世界なのです。ポートの速度とかよりもずっと深いところで、皆さんのスマホは便利に使えるように作ってたりします。
というわけで、謎言語であるネットワークの言葉を、とりあえず何言ってるのかだけ理解できるように簡単にご紹介。
- VLAN
Virtual LAN、略してVLAN。今だと(L3レイヤでの実装として)VxLANなんかも規格としてはあります。ひっくるめてVLANと呼ぶことが多いですが、厳密にはL2だけだとVLANしか使ず、そもそも技術的にも全くの別物に近いですが、やりたいことは同じです。一つのネットワークポート上に、複数のネットワークアドレスのセグメントを重複して流すことができる機能。192.168.0.0/24と10.0.0.0/16のパケットを同じポート上に流して、それぞれ適切な宛先、戻り先に送り付けるためのもの。VLAN IDをセットして使う。 - LAG
Link Aggregation Group、リンク集約グループ。なんのこっちゃ。簡単にいうと、二本以上のネットワークポートを束ねて、一つのネットワークリンクとして見せかける機能。送信・受信帯域を広げる目的でも使用されるが、ネットワーク屋が好むのはポートダウン時にも片方が存続していれば稼働し続ける、というのが素敵な理由。夜寝れる。このLAGを構成するポートのことをLAGメンバー、なんていう。メーカーによってはポートトランク、ポートトランキングなどとも。シスコだとイーサチャネル。一人だけ頑なですが、そもそも独自拡張してるんで…。
当然、つなぐ相手側も同じ設定している必要がある。- LACP
LAGを形成するときに、スイッチ同士でお話して、ポート設定を行うためのプロトコル。ポートダウンの検出とか、トラフィックの流し方とかを決めている。LACPを使わない場合はStatic、つまり静的に管理者が設定して定めるが、めんどくさい。 - LACP優先度
ポート優先度とシステム優先度がある。値が小さいほど優先して使用される。トポロジを形成する際に性能の良いスイッチなんかを優先するためとかで使用。アクティブ/バックアップポートの選定や優先するシステムを定義できる。
- LACP
- スタッキング
スタック、とも。LAGなんかは「一つのスイッチ」のいくつかのポートをまとめることはできるが、スイッチAの1番ポートとスイッチBの1番ポート、みたいなことはできない。
スタッキングは、こういった複数のスイッチ自体を「一つのスイッチ機器」として扱うための機構。スタッカブルスイッチ、などと呼ばれる。当然だがメーカー違いの機器でスタックなんてできない。そもそも機器間接続が専用ケーブルだったりする。
48ポートスイッチ一つより、24ポートスイッチ二つ、のほうが耐障害性は高い。半面、故障の確率は増えますが、それでもどちらが安全か、と言ったら後者です。 - VRRP
Virtual Router Redundancy Protocol。L3レイヤで行われる、仮想ゲートウェイ。L3スイッチになってくると出没する。複数のゲートウェイを単一のゲートウェイのように見せかけるネットワーク機構。基本はAct-Standbyでバックアップ回線なんかの迂回路として設計する。
単一のフラットなネットワークではその程度だが、大規模なLAN間を複数のゲートウェイが蜘蛛の巣のようにローカルルータで結ばれているような構造の場合は、LAN間のトラフィックの迂回などにも使用できる。 - STP
スパニングツリープロトコル。ネットワークポートに対して、特定のパケットを投げて、「どのポートにそのパケットが返ってきたか」ということを行い、ネットワークを構成しているスイッチの論理構造ツリー、いわゆるトポロジーを検出する仕組み。検出されたトポロジーに基づいて、ポートをブロックすることでネットワークループを防ぐ。
高速に判定を行うRSTP(Rapid Spanning Tree Protocol)やVLAN IDごとに異なるトポロジーを形成することができるVSTPなどバリエーションがある。機能上、基本的にエッジはともかくとしてループネットワークするスイッチはすべて対応していなくては機能しない。
当然、LAG同様に優先度設定がポート毎にあり、VSTPなどではさらにそれがVLANのID数分構成できる。
さて、何となくスイッチ、というものがただケーブル挿したらPCとPCがつながる、みたいなバカな代物ではないかもしれないぞ、というのは感じられてくるのではないでしょうか。
かつてはそんなバカな機材もありましたが、現代ではほぼ使われないでしょう、バカハブなんて。
スイッチ、というものがやりたいのは、つながってるPCなりサーバなりの通信を「正しく」「指定された場所に」運びたい、という機械なのであって、無条件に相互接続させたいわけではないのです。
さて、そうなってくると基本的にスイッチって単体だとあまり意味を為さないんですね。単体のスイッチがやれること、となると本当にさっきのバカみたいな接続くらいです。せいぜいVLAN切って遊べますけど、それがどうしたレベルでしょう。
なので、スイッチにはこのように、「隣のスイッチは何する人ですかなもし?」と相互におしゃべりする機能があるのが普通です。あ、こういういう普通はネットワークの人の普通で、普通の電気屋さんで買ったスイッチングハブにそんな機能ないです。なので、この辺は共通の規格で相互にちゃんと喋れるよ、とかがないと困るわけですね。
さて、L2(ちょっとだけL3混ざったけど)はこんなもん(ほかにもARPテーブルだとかあるけどもw)ですが、L3になってくるとさらにいろんなもんが入ってきます。
まずはルーティングプロトコル。
これは、スイッチがパケットを「正しく」「指定された場所に」運びたいとき、そもそもどこに運べばいいのか、をどう定義しているのか、という話になります。
L2だけなら基本はMACアドレスで判断しており、そもそもIPアドレスすら見ていません。VLANだってL2のヘッダに埋め込まれている VLAN IDしか見ていないので、IPアドレスに興味がありません。そして、スイッチの各ポートは接続している相手のLANコネクタの持つ「MACアドレス」を集めて、そこにトラフィックを回しています。
しかし、L3スイッチになるとIPまで確認を始めます。IPの確認ができる、ということはそもそもパケットをもう一枚剝いているので、TCP、UDP、ポート番号まで見えてきます。ここまで見えてくると、モノによってはいろいろ見えてくるわけです。
L3とL2を分けているのは、もう単純に「ルーティングテーブルを持っているかどうか」です。
さあ、ここからはさらに深淵です。
- ルーティングプロトコル(RIP、BGP、OSPF、IGRP/EIGRP、IS-ISなど)
大きく分けて、IGP(内部ネットワーク向け)とEGP(AS間ネットワーク向け)に分けられます。前者がRIP、OSPF、EIGRP、IS-ISで、後者がBGPです。BGPとOSPFあたりわかってればだいたい何とかなります。
どれも宛先が自分の知ってるところにない時に、誰にパケット流せばいいかを決める仕掛けです。どこで動いてるか、何をもとにそれを決定したいか、ということで使いどころなんかが変わってきます。RIPが一番単純で、スイッチがそれぞれ、「ぼくの知ってる宛先リストはこう!」「ぼくのはこうだよ!」ってネットワークに向けて叫び続けます。小規模なネットワークならこれで十分といえば十分です。が、やがてスイッチが多くなってくると、この叫び声でネットワークがあふれかえることになります。結果、ネットワークの低速化をもたらしたりし始めます。
これを避けるには、スイッチは自分のネットワーク全体の構造を理解し、適切な人と適切な情報だけをやり取りしたうえで、適切な経路を設定しなければなりません。これを、リンクステート型、といいます。リンクステートでは、ネットワークトポロジに基づいて、誰に何を送れば最適か?を計算して求めます。
めんどくさいので簡単に言えば、BGPはASパス属性に基づいて計算、OSPFは最短パス経路コストを計算、IGRPはシスコ使わなきゃ知らんぷりできますが、RIP+リンクステートのハイブリッドで、パス計算に帯域やらいろんな要素も詰め込んで最適パスを計算します。IS-ISはOSPFと利用ケースは似ていますが、IPv6対応が単一で済む、柔軟なトポロジが組める、といった利点がありますね。 - AS
ナチュラルにBGPの説明にASとか言っていますが、ASってなんだよ、って話です。ASとは自律型ネットワーク、と呼ばれるもので、「インターネット」とは何か、という根幹の一つです。
そもそも「インターネット」とはこのASを相互接続したもの、のことです。ASはASごとに異なる運用ルールなどで運用された、巨大なネットワークの塊です。このASには、AS番号、と呼ばれる専用の番号が割り振られ、ASの管理、というのは「インターネットの管理」の一端を担う、といってもよいでしょう。
例えばみなさんのお使いのスマホ、ドコモでも構いませんが、ドコモさんとかもこのAS番号を持つネットワークの保有者です。まあ簡単に言っちゃえばBGP使って他のネットワークと接続したネットワークに対する管理番号、でしかないので。ただ、まあ、他のネットワークと相互疎通しようと思ったらBGP使うからAS番号が要る、という鶏が先か卵が先かみたいな話です。
まあ申請費用はさして高いものでもなくIPみたいに枯渇しているわけでもないので、結構皆さん持っています。なので、ネットワーク人はBGPの知識は持っていて損はありません。 - VPN
Virtual Private Network。L3までパケットの皮をひん剥いて裸にして、一番よくつかわれるのはこれじゃないでしょうか。遠隔から社内ネットワーク上のファイルサーバを参照したいだとか、営業所と本社を結びたいけど専用線なんか引けない、だとかでひょいひょい顔を出してくるので、ルーティングわかんないけどVPNだけはわかる、とかは居てもおかしくないです。
ひん剥いたパケットをVPNのパケットの皮かぶせなおして、相互にやり取りすることで、直接の接続のないネットワーク環境のパケットを、あたかも自分のネットワーク内から出されたパケットであるかのように扱う技術のことです。こういうパケットに別のパケットの皮をかぶせることをカプセリングといい、カプセルされたパケットが広域ネットワークなどを経由して別の場所に出現する様子をトンネリング、トンネル、なんて呼びます。
VPNはその種類によって、PPTPやIP-VPN、IPSec、SSL-VPNとかいろいろあります。接続方式を表していることもあれば、接続形態を指していることもあり、混乱しやすいですね。よく使うのはIPSecとPPTPです。ちょっと前にProxmox VE8でひゃっほーって喜んでたEVPNもこの範囲の機構ですが、VPN使って多層ネットワークをもっとどぎつく、素人とかマジお断りしようぜ。みたいなあれです。嘘ですが。MP-BGPなんかも絡んでくるので、単にVPNに入れてしまうのはなんか違うんですよね。
ものすごいざっくりいうと、EVPN+VxLANで、「L3ネットワークの上で、L2ネットワークを別途組む」というものです。なので、仮想データセンターがL2で作れるよ、という話になるのです。これがないと、仮想データセンターはL3のIPベースでのデータセンターしか作れません。まあとりあえず覚える必要もなければ、忘れておいて構いませんがwwww - ファイアウォール
防火壁。ここでいうFWはL3 FWと呼ばれるものです。そりゃまあパケットをL3までしか剥いておらず、丸裸にしたわけではないのでL3までのことしかできません。なんでL3FWがSQLインジェクションを防げないのかとか無理言わないでください。httpがどのレイヤのプロトコルなのか、アプリケーション屋さんはちゃんと認識しなければなりません。Apacheもネットワークもインフラがやるから、ってどっちも同じに扱っていいわけじゃないです。
なので、ここでのFWとか「パケットの宛先/送信元」「TCP/UDP/ICMPといったプロトコル」「ポート番号」に基づいて、「予期しないパケットが来ていたりはしないか」というのをチェックできる、ということになります。ステートフル、ステートレスのいずれでも定義できることが多いです。
ステートフル、はこっちが送ったパケットの応答は無条件で通す、とかの「通信のやり取りも含めた判断」をすることで、ステートレス、はそれがなく、厳密にパケットの属性を定めるものです。
ステートフルでいいじゃん、と思うかもしれませんが世の中厳密に管理されたネットワークというものは存在しており、それらがなぜ厳密なのか、と言ったら重要だから厳密なんです。 - ロードバランサー
え、それスイッチの機構なの?って思うかもしれませんが、はっきり言えば、FW機器もロードバランサーも、L3レイヤで動作する「スイッチの一形態」に過ぎません。
まあ世の中便利なのはL7 LoadBalancerなので、L3 LoadBalancerはそこまでもてはやされているわけでもないですが、L7 LBは一般にHTTP/HTTPSを扱うのに対して、L3 LBはTCP/UDPで扱います。つまり、よりネットワーク的で、バックエンド側が「TCP 10000番ポートで独自プロトコルで待ち受けしてんだよねー!」みたいな状況において当然のようにバランシングできる、というのはL3 LBの役目です。
で、こういう独自仕様プロトコルは一昔前に大変盛んに作られたりしたので、ちょっとでかいオンプレミスなんて入ったら当たり前のように特殊プロトコルがそこらへんにゴミのように転がってたりします。世の中すべてをREST APIやHTTP APIでラップできるわけではないのです。 - SNMP
Simple Network Management Protocol。一応L3。だけど、これだけは喋れる、みたいなL2機器は少なくはありません。
おもにスイッチなどのネットワーク機器のメンテナンス、メトリクスの送信、トラップの受信に用意されていて、ネットワーク機器のメンテナンス、といえばまずこのSNMPからのデータを用いて行います。
当たり前ですが、ネットワーク機器にZabbixだのPrometheusノードだのがインストールできるわけではないので、そういうものでの監視は基本外形監視になります。ポート個々がどれくらいのトラフィックを処理したか、エラーパケットがどの程度出たのか、そんな情報は外からは見えるわけがありません。まして、ポートダウンステートの通知なんてわかるはずもないです。
そして、それを教えてくれるのがこのSNMPの役目です。まあLinuxやってりゃ触ってるでしょう。 - QoS
こちらはL2+なんかにも組み込まれることが多い機能。Quality of Serviceの略。みなさんが送る業務メール一通よりも、システム間の決済通信とかのほうが重要度が高いですよね。まあそうじゃなくても、通常のTCPの通信と、動画のUDPだと、動画のUDPは輻輳の影響を受けてトラフィックが詰まったりするとブロックノイズが出たり、音声が途切れたりしますね。TCPはエラー訂正も再送もあるので待てばいいっちゃいいんですが、UDPだとそうじゃないので、TV会議やIP電話のUDP通信を優先で通し、TCPなんかの優先度を下げる、といったことができます。
これが、Quality of Serviceの役割で、限られた帯域を誰に、どれだけ使わせるか、というのを比率で定義したりします。~~Mbpsを~~に、とかではないのでそこは間違えないように。
同じような機構をL7などでもつばあいもあり、それらの時はもっとアプリケーション向けの制御が行われます(HTTP/FTPでFTPを優先、といったアプリケーション層レイヤでの制御)。 - PPP
L2ではその下は物理層しかないので「結線されているかどうか」なのですが、L3までサポートされると、結線されているかどうか、の上にさらにプロトコルを乗っけることができます。しかもIPを持てます。このレイヤで、デバイス間のPoint-to-Point通信を成立させるのがこのPPPです。
PPP自体はL2の技術実装ですが、その中にIPの割り当てなどL3の機構を持つために基本的にはL3のスイッチでの実装がほとんどです。
PPPはその名の通り、このデバイスと対向となるデバイスとの間のピアツーピア、つまり1対1の接続関係を形成することを指します。
この時、偽装可能なMACだけではなく、IPアドレスや認証を用いて、相互確認をとって、双方向の1対1の通信リンクの形成を行います。
PPPの技術自体はいろいろと使われてはいますが、代表的なのは家庭でもよく使用された、PPPoEでしょう。PPPをどの媒体の上で行うか、というのをover ~~という言い方をします。これは、PPPに限った話ではなく、IPv6 over v4とか、ネットワークのいろんなとこで出てくるいいまわしです。
なんでわざわざover Ethernetなんて言い方をするのか、というと、そもそもTCP/UDPの通信なんてEthernetじゃなきゃできない理由なんか何一つないからです。極端な話糸電話でもできますし、光ファイバ上でもできます。伝書バトでもいいんです。
まあ実際のところ、Ethernet以外の通信媒体って結構あるんですよ。例えばATMセルリンクとか。
とはいえそんなもん一般の目にはあまり見えないところで仕事しているものですが、PPP over ATMとかは普通に存在しますし、一昔前のxDSL時代を覚えている方なら、DSLAMなんて集合モデムを知っているかもしれません。こいつはADSLモデムとATMセルとしゃべることが多く、PPPoAを持っていたりもしました。
ATMってなんだ、って話ですが非同期通信モードというもので、広域通信でよくつかわれ、これ自体はL2の技術です。なので、ATMスイッチ、というL2レイヤ機器もあります。 - IPoE
PPPoEは現在ではすたれており、じゃあ何使ってんの、というとIPoEがよく使われます。これはもろにIP層をover Ethernetしちゃったものであり、何が起きるかっていうともう単純に光ファイバの向こう側からDHCPでIPv6のアドレスが取得できちゃったりします。
そもそもv6なのでゲートウェイがNATなんかする必要もなく、各機器はそのままIP接続できる、という状況になります。
認証含め組み込まれた仕組みではありますが、基本的にIPv6を想定して作られた規格であり、IPoEはIPv6で実装されます。結果、ご家庭内のIPv4ネットワークの通信を乗っけようとすると、IPv6 over v4をさらに重ねる必要があるわけで、この辺がセットになっていることが多いですね。
もちろん、ご家庭内がIPv6スタックしかもうない、ってんならover v4の必要はありませんが。
いかがでしょう、基本的なご家庭のインターネット接続、というところになるべくフォーカスして、その辺でよくつかわれたりする技術や、その辺を実現している技術等だけでも深淵の一端が見えるかと。
実際にはこの他にもファイバチャネルやファイバー結線周りの技術だったり、大陸間通信リンクのための海底ケーブルの技術だったり、低軌道衛星リンクといった人工衛星間通信リンクだったりが張り巡らされ、それらを為し遂げる技術もまた、通信分野、という側面では主役の一人です。もちろん、皆様なじみ深い携帯やスマホだって、移動体通信、という名の通信インフラ分野の一形態に過ぎません。そして、そこにはITインフラもいれば、ネットワーク屋さんも住んでいるのです。
何も、ITインフラ屋はサーバOSとWebやってるだけじゃねぇぞ、って話だったりします。なので、僕はバックエンド、はたぶん今後も名乗りません。
だってほら、電力会社さんの電線メンテナンスや発電所の運用だけが電力分野じゃないことくらいわかると思うんですよね。風力発電ならどんな羽が発電効率がいいのか、といった研究も電力関連の領分でしょうし、火力発電のタービンの効率だってその分野でしょう。もちろん、研究しているのは電力会社さんじゃないかもしれませんが、それがじゃあ電力分野ではない、とは言わないですよね。バッテリーだってそうですし、極端な話、山奥で鉄塔建てられる技術だって電力分野です。
通信分野、ってそのレベルで広いので、本当に深淵なんですよ。衛星まで言及したらそもそもNASAだって通信分野の研究機関だと言い張れる。というか、現代の人間の活動に不可欠レベルだから通信インフラ、って名乗ってるんです。伊達や酔狂でインフラ名乗っているわけではなく、我々ITインフラはその通信インフラのはじっこを担っているのだ、という自負を持っていたいなぁ、という話でした。
たぶん、世の中でいまどき「ぼくはインフラでー」とか言ってるやつは大なり小なりそういう思想持ってる人じゃないかな、って思っています。だってそうじゃないならバックエンドエンジニア名乗ったほうがかっこいいし、世の中に売れますよ。なんでわざわざインフラとかネットワーク屋とか言い出すんですかバカですか。って思うんです。
だから、たぶん、そういう名乗り上げるやつって基本的になんかねっこのところに変なプライドあると思っています。交通インフラ然り、生活インフラ然り、ですね。向こうは通信インフラなんか、って思ってるかもしれませんが、通信やITインフラのこちらとしては、ぶっちゃけアプリケーション開発エンジニアなんかよりもずっと親近感わくんですよね。謎ですねwwwwww