t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VLANを理解するためにCisco 892ルーターで色々と遊んでみた

今回は手持ちのルーターCisco 892を使ってVLANの挙動を確かめてみた。

Vagrantで仮想マシンを4台起動させてUSB-LANアダプターへブリッジネットワークを作成し、ルーターと次のように接続している。
f:id:t-hom:20220323003944p:plain

4台の仮想マシンをそれぞれのLANアダプターへブリッジさせる方法は以下の記事参照。
thom.hateblo.jp

ルーターは内部的にはスイッチング機能とルーター機能に分かれていて、スイッチング機能のほうは実質L2スイッチとなっている。各FastEthernetポートはデフォルトではVLAN 1が割り当てられており、たとえネットワークセグメントが違ったとしてもポートに接続された機器同士は通信ができてしまう。
f:id:t-hom:20220323004702p:plain

ここで今回ややこしいのが、VMにネットワークの出口が2つあるということだ。
ひとつはeth0で、ホストPCへ繋がっている。
もう一つはeth1で、ルーターのスイッチポートへ繋がっている。

何がややこしいかというと、eth1と異なるネットワークへ通信しようとした場合、通常はeth0へ探しに行ってしまうということ。

なのでVM側で経路設定してやらないと、先ほど書いた「たとえネットワークセグメントが違ったとしてもポートに接続された機器同士は通信ができてしまう。」ということを検証できない。

VM側で経路設定するにはip routeコマンドを使用する。
例えばVM-A(10.1.10.2)とVM-B(10.1.10.3)で以下のコマンドを入力することで、10.1.20.0/24ネットワークへ向かう場合の出口はeth1だということを教えてやることができる。

sudo ip route add 10.1.20.0/24 via 0.0.0.0 dev eth1

VM-C(10.1.20.2)とVM-D(10.1.20.3)では反対に10.1.10.0/24への経路を設定する。

sudo ip route add 10.1.10.0/24 via 0.0.0.0 dev eth1

何とも面倒な話なので、以前はデフォルトゲートウェイをeth1側にすれば良いのではと思ってたんだけど、そうするとaptコマンドで特定のパッケージをインストールするのにネットに繋げたいというときに不便なので、これくらいの検証ならスタティックに経路設定するというところに落ち着いた。

さて、この設定が終わると、例えばVM-AからVM-Cへのpingが疎通するようになる。

IPアドレスのネットワークセグメントが違うのにどうして通信できるのか?
ルーターだからルーティングしてるのでは?と思うかもしれないけどルーティングはしてない。

答えは単純で、スイッチングはそもそもL2(データリンク層)の話なので、IPアドレスなんて最初から見てなくて、MACアドレスで通信してるから。

これを論理的にネットワーク分割する機能がVLAN。
以下のようにVLAN 10とVLAN 20に分けた場合、VM-AからVM-Cへのpingは通らなくなる。
f:id:t-hom:20220323011335p:plain

ルーターやL3スイッチの場合はVLANの仮想インターフェースにIPアドレスを設定することでVLAN間がルーティングされ、再びVM-AからVM-Cへpingが疎通するようになる。
f:id:t-hom:20220323011656p:plain


もともと1つだったものをVLANで分けて、またルーターで繋げるなんて、なんでそんなややこしいことをするのか?
私が理解したメリット以下の3つである。

  1. VLANで分割することによりブロードキャスト(全員宛通信)の範囲を絞ることができる。
  2. どのVLANの通信を優先的にインターネットと通信させるかなど、通信の優先度をコントロールできる。
  3. VLAN間をルーターで接続することで特定の相手との通信は可能になり、さらにどんな通信を通してどんな通信をブロックするのか細やかに制御できる。


ということで今回はVLANで分割したり、VLAN間をルーティングさせたりということを1台のルーターを使ってやってみた。
やはり書籍を読んだだけでは理解がおぼつかなかった部分も実機を触ってみるとスッキリと理解できるということを改めて実感した。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。