ぐるっとぐりっど

日曜プログラマがいろいろ試してみたことを、後の自分のためにまとめておく場所

超簡単!VMware Player上の仮想マシンをスイッチ・ルーターにする

あらすじ

かわいいは作れる!

ならば

ルーターは作れる!
スイッチングハブも作れる!

本当のあらすじ

snmpしゃべれるルーターほしーなー、でもたけーなー
というか価格コムでもconeco.netでもBuffaloのサイトでも、snmpしゃべれるかどうかで絞込みできないじゃん。
もういい!とりあえず仮想マシン上に立てて作れること確認しちゃうもん!ひとりでできるもん!

仮想マシン上でできたら、実機でも動くっしょ
実機用意するのいつになるかわからないからメモっておこう

構成

すべてVMware上の仮想マシン(CentOS 6.4)で構成

  • ルーター
    • 192.168.11.0セグメントと192.168.22.0セグメントをルーティングする
    • eth0 : 192.168.11.250
    • eth1 : 192.168.22.250
  • スイッチ
    • 192.168.22.0セグメントに配置
    • eth0, eth1, eth2の3つのNICを装備
    • 管理用に192.168.22.2のIPアドレスを振っておく
  • 試験用マシン
    • 192.168.22.0セグメントに配置
    • eth0 : 192.168.22.3
    • スイッチを超えないとルーターにたどり着けないようにする

準備

ひたすら仮想マシンを作る

簡易インストールつかったらランレベル5で起動しやがってとってもとってもめんどかった

  • ルーター用マシン
    • 192.168.11.0セグメントと192.168.22.0セグメントの2つにつながるので、VM作成時にNICを二つつくっておく
      • ひとつはブリッジ・・・外部につなぎたかったので、yumつかえないとめんどい!
      • ひとつはLANセグメント(セグメント1)
  • スイッチ用マシン
    • スイッチっぽくするために無駄にNICを3つ作っておいた
      • すべてLANセグメントで、セグメントはすべて別のものを割り当てた(混信対策)
  • 試験用マシン
    • スイッチを経由してルーターにアクセスできないと、スイッチの試験にならないのでスイッチが使ってるLANセグメントのうち、ルーターが使ってないセグメントを割り当てた

L3スイッチ化

天に祈りながら下記コマンドをおもむろに打ち込むだけ!

# echo 1 > /proc/sys/net/ipv4/ip_forward
# route add -net 192.168.11.0 netmask 255.255.255.0 gw 192.168.11.250
# route add -net 192.168.22.0 netmask 255.255.255.0 gw 192.168.22.250

ね、簡単でしょう?
永続化するには設定ファイルに書かなきゃだめだけど、今回はよしとする

テスト

まだスイッチ化してないスイッチ用マシンから192.168.11.0セグメントの適当なマシンにping飛ばしてみた

帰ってきた!成功!

一応tracerouteしてみるとルーター経由してICMP飛んでることが確認できたのでよしとする

# traceroute 192.168.11.2
traceroute to 192.168.11.2 (192.168.11.2), 30 hops max, 60 byte packets
 1  192.168.22.250 (192.168.22.250)  0.358 ms  0.206 ms  0.165 ms
 2  192.168.11.2 (192.168.11.2)  1.477 ms  0.782 ms  2.790 ms

※ 192.168.11.0セグメントの宛先マシンのルーティングテーブルもいじって、192.168.22.0セグメントへのルータをきちんと指し示してやらないと返事が返ってこないので注意。わたしはそこではまりました

L2スイッチ化

/etc/sysconfig/network-scripts/ifcfg-eth0~2
/etc/sysconfig/network-scripts/ifcfg-vbr0
の4つのファイルを作成して、

# service network restart

するだけ!

ifcfg-eth0からifcfg-eth2の中身

DEVICE="eth0"
BOOTPROTO=static
ONBOOT="yes"
TYPE="Ethernet"
BRIDGE=vbr0

たぶんBRIDGE=vbr0が鳥獣用!あとIPADDR=ほげほげを書かないのも超重要!だと思う

ifcfg-vbr0の中身

DEVICE=vbr0
BOOTPROTO=static
IPADDR=192.168.22.2
NETMASK=255.255.255.0
NETWORK=192.168.22.0
ONBOOT=yes
TYPE=BRIDGE
STP=OFF
GATEWAY=192.168.22.250

複数のセグメントをL2ベースでルーティングするスイッチが完成したぞ!

試験

  1. 試験用PCから192.168.11.0セグメントのPCにpingする。設定がうまくいってたら届く。
  2. スイッチのネットワークを落とすと、pingが帰ってこなくなる。スイッチ経由してなかったらネットワーク落としてもping通り続ける
    • # service network stop
  3. スイッチのネットワーク復活させると、再度pingが帰ってくる

たぶん、スイッチ経由してるからこんな挙動してるんだろう、よしとしよう。

ついでにフォワーディングテーブルを確認してみると・・・

# brctl showmacs vbr0
port no mac addr                is local?       ageing timer
  1     00:0c:29:58:e4:8b       yes                0.00
  3     00:0c:29:58:e4:9f       yes                0.00
  1     00:0c:29:c3:f0:3f       no                 0.00
  3     00:0c:29:fd:02:02       no               190.05
  2     00:50:56:30:d8:19       yes                0.00

こんな感じで、各ポートのMACアドレスとポートの接続先のMACアドレスが出てくる!ついでにエージングタイマーも出てくる!すげー!