GNS3

(作成:2015/12)

職場も変わって以前ほどがっつりインフラSEやらなくなった今日此頃。言っても少しくらいは職場の機器設定を弄る事もあるのだけれど、もう一人でイチから作り上げるような作業も無いだろうナーと思うと少しばかり寂しかったり寂しくなかったり。
しかしまあコレまで経験して覚えた技術を腐らせるのも勿体無い話なので、おうちで仮想のネットワーク環境を作って遊ぶことに。

Install on Windows 7

……は、拙サイトでまとめるよりも他に解り易いサイトが幾らもあるので、そちらの参照をお勧めします。The TENUKISM。

ていうか、ココの情報だけで当サイトで語りたいこと網羅してます。尊敬。んじゃ何の為の当サイトかと言う話だけれど、うーん自己満足と備忘録?

さておき、ココでは以下環境が整っている事を前提としてお話を進めようかと。括弧内はウチとこの環境デス。

  • 何はともあれPC環境 Windows 7 Home Premium SP1 64bit
  • GNS3 インストール済 1.2.3
  • Oracle VM VirtualBox インストール済 4.3.34 r 104062
  • CIsco IOSイメージ取得済 c3640-js-mz.124-25d.bin
  • CentOS 7 isoイメージ取得済 CentOS-7-x86_64-Minimal-1503-01.iso

バージョンをかっちり合わせる必要は無いけれど、各アプリの最新バージョンは色々細かな問題を抱えているので、マイナーバージョンくらいまでは揃えた方が良いかも知れませぬ。

GNS3

取り敢えずやる事は少ない。

  • 一般設定の変更
  • Cisco IOSイメージの展開
  • VirtualBox連携
  • 一般設定の変更

項目は何だか色々あるけれど、そんなに気にして弄るとこも無いかも。

  1. GNS3を起動してメニュー EditPreferences を開く
  2. GeneralGeneral を開き、My projects および My binary images に好きなフォルダを指定
    My projects は、GNS3で作った仮想ネットワーク環境を保存しとく場所のコト。
    My binary imagesは、Cisco IOSイメージを保管しとく場所のコト。

Cisco IOSイメージの展開

要はIOSイメージを使って仮想ルータ使えるようにする作業。シミュレータなんで色々制約はあるけれど。Catalystシミュレートできないのは哀しいネ。

  1. メニュー EditPreferences
  2. DynamipsIOS routers
  3. New
  4. IOS image は用意したIOSイメージファイルを選択して Next>
  5. Would you like to decompress this IOS image?と問われたら Yes
    Cisco IOSのbinファイルは通常ZIP圧縮形式なんだそうで、ココで非圧縮化しとくことで仮想ルータの動作が少しだけ快適になる。その分HDD容量食うけれど、まあ微々たるもんです。
  6. Name and platform は特に希望が無ければそのまま Next>
  7. Memory も特に希望が無ければそのまま Next>
    直下にある Check for minimum RAM requirement リンクから適したRAMのサイズを確認して指定しても良い。
  8. Network adapters も特に希望が無ければそのまま Next>
    ここは仮想ルータ追加時にデフォでシャーシに突っ込んどくモジュールを選択する項目。「常にこのモジュールは欲しいナァ」というのがあれば設定しておくと良い。
  9. Idle-PC も華麗にスルーして Finish
    これはどういう仕組みかよく判らんのだけれど、GNS3上で仮想ルータ追加して起動すると、初期状態ではCPU使用率をゴリゴリ食うみたい。で、起動したルータに適切なIdle-PC値を設定してやると大人しくなってくれるというシロモノ。この初期設定ではうまくいかない事が多いようなので、仮想ルータ追加の都度やった方が良いと思う。
まあIOSイメージファイルを選択する以外は、基本 Next> 連打でOK。するとルータが追加されて、仮想NWを作れるようになる。

VirtualBox連携

GNS3だけでもVPCSたらいうPCエミュレート環境やQEMUなんかが用意されている。けれどVirtualBoxを別途導入して連携することも出来る。個人的見解では、各エミュレート環境の違いは以下のような感じ。

  • VPCS: エンド2エンドの通信確認用、ネットワークコマンドは充実してるし超軽い。ケドOSとして使えるかは何とも。
  • QEMU: 正しくはCPUエミュレータらしい。PCエミュレータじゃないので、どんなOSでも入るってモンじゃなさげ。古いのは動くみたい?
  • VirtualBox: 大概のOSが問題無く導入できる。重い。

個人的にはQEMUがどこまで出来る子なのか試してみたい気もするけれど、時間と心に余裕がある時に後回すとして。今回はVirtualBoxを連携してGNS3 NW配下の端末として動かすための連携設定をする。
取り敢えず以下の設定項目を参考に、2台程サラリとVM環境を構築。

1台目 2台目
名前 tengu kappa
タイプ Linux Linux
バージョン Red Hat (64-bit) Red Hat (64-bit)
メモリーサイズ 512 MB 512 MB
ハードドライブ 仮想ハードドライブを作成する 仮想ハードドライブを作成する
ファイルサイズ 4.00 GB 4.00 GB
ハードドライブのファイルタイプ VDI (VirtualBox Disk Image) VDI (VirtualBox Disk Image)
物理ハードドライブにあるストレージ 可変サイズ 可変サイズ

更に 設定 を開いて以下のように修正。

  • tengu
    • オーディオ
      オーディオを有効化: 未チェック
    • ネットワーク: アダプター1
      割り当て: NAT
    • シリアルポート:ポート1
      シリアルポートを有効化
      ポートモード: ホストにパイプ
      パイプ作成: チェック
      ポート/ファイルパス: \\.\pipe\VBOX\tengu
  • `kappa
    • オーディオ
      オーディオを有効化: 未チェック
    • ネットワーク: アダプター1
      割り当て: NAT
    • シリアルポート:ポート1
      シリアルポートを有効化
      ポートモード: ホストにパイプ
      パイプ作成: チェック
      ポート/ファイルパス: \\.\pipe\VBOX\kappa

このうちあまり聞き慣れないのは シリアルポート:ポート1 の設定かしらん。VMホストに名前付きパイプを作って、それをゲストOSのシリアルポートに繋げて仮想的にシリアル接続を実現する仕組み。 \\.\pipe\ なるNPFS(Named Pipe FileSystem)配下に置かれて、通常のファイル形式ではないけれど、以下のプログラムを使うと現状どんなパイプがあるか確認できる。

使い方は以下のような感じ。設定済VMを起動して実行すると、色々なパイプのうちの1つとして上記名前付きパイプが追加されたことが判る。VMを停止すれば無くなる。

GNS3自体がコンソール持っているしあまり意味無いかもだけど、SuperPuttyでコンソール作業をまとめたいって人には便利なのかな。但し動作確認した感じでは今一不安定。繋がったり繋がらなかったり、そもそもVMの動作(特に電源ON/OFF周り)がうまく動かなくなったりして謎。ウチとこのホストPCが不安定なせいかも。さておき。

イメージを用意したらCentOS 7のisoを読み込ませて起動、サクッとインストール、シリアルポートを許可する設定を仕込んでおく。

# vi /etc/default/grub
##GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos_tengu/root rd.lvm.lv=centos_tengu/swap rhgb quiet"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos_tengu/root rd.lvm.lv=centos_tengu/swap rhgb quiet console=tty0 console=ttyS0,9600n8"
# grub2-mkconfig -o /boot/grub2/grub.cfg

ここまでVirtualBoxのお話。さてよーやっとGNS3側の設定だけれど、まああまり大した事するわけでもなく。

  1. メニュー EditPreferences
  2. VirtualBoxVirtualBox VMs
  3. New
  4. VM listtengukappa それぞれ選択して Finish
いじょ。これでVirtualBox仮想環境をGNS3ネットワーク端末として登録する準備が整う。

Windowsホスト

GNS3の仮想NWに繋げる端末はVirtualBoxだけでなく、ホストPC自体のNICに繋げる事も出来る。というか仮想NW内からInternet接続する為にも必要なので、初期設定として準備しておく。

ループバック・アダプタの作成

  1. デバイスマネージャー
  2. ホスト名を右クリック レガシハードウェアの追加
  3. 一覧から選択したハードウェアをインストールする を選択して 次へ
  4. ネットワークアダプター を選択して 次へ
  5. Microsoft Microsoft Loopback Adapter を選択して 次へ
……とやるとループバック・アダプタが追加できる。

ループバック用IPとICS設定

  1. ネットワークと共有センター
  2. アダプターの設定の変更
  3. ローカルエリア接続 XX ……という名前は非常に判り難いので Loopback などの名前に変更
  4. まずはIP設定。 Loopback を右クリック プロパティ
  5. インターネットプロトコルバージョン4(TCP/IPv4)プロパティ
  6. IPアドレス サブネットマスク の2つのみ設定
    設定値はGNS3のインターネット接続口に利用する予定のIPアドレス。詳しくは後述するけれど、ウチとこは以下のような感じ。
    IPアドレス: 172.16.254.1
    サブネットマスク: 255.255.255.248
  7. 続いてICS設定。現在ホストPCでインターネット接続に利用している ネットワーク接続 を右クリック、プロパティ
  8. 共有 を開き、以下の通り設定
    ネットワークのほかのユーザーに、このコンピューターのインターネット接続をとおしての接続を許可する: チェック
    # どうでも良いけれどWindowsはたまーにみょんな言い回しをしよる。
    ホームネットワーク接続: Loopback
    ネットワークをほかのユーザーに、共有インターネット接続の制御や無効化を許可する: チェックを外す

ループバック・アダプタとICSの恩恵

以下蛇足、この作業は一体何なのって話。順を追って、まず何だかよく判らん言葉をちょいと補足。

  • ループバック・アダプタ
    よく 127.0.0.1 とか、自分自身を示す「ループバック・アドレス」てのがある。ある端末に 192.168.1.1 というIPが設定されていて、だけれど該当のNICが通信機器に接続されていない場合、自身のIPに対し ping 192.168.1.1 してもリンクダウンのため応答しない。しかし自身のループバック・アドレスに対する ping 127.0.0.1 は、NICがダウンしていても変わらず応答してくれる。その端末の内では 192.168.1.1 = 127.0.0.1 という認識をしていて、それが所謂自分自身を示す「ループバック・アドレス」の役割。ポイントは「NICがリンクダウンしていても応答してくれる」という点。
    「ループバック・アダプタ」も同様に、こちらはNIC自身を示すループバック。これもNICが無効だったりダウンしてても常に応答してくれるアダプタとして振舞う。

    ……んでコレ、何が嬉しいのん?という話なのだが。
    仮想環境(以下ゲスト)のNICは、一般的にホストのNICと連携させてNATやBridgeして使うことが多い。そんな時おもむろにホストのNICをぶっ千切ったらどうなるか。同NICと連携している全てのゲスト側のNICも全滅し、通信出来なくなる悲しみの連鎖。
    そこでゲスト側のNICを「ループバック・アダプタ」に連携しておくと、例えホストのNICがぶっ千切れても、ループバック・アダプタは常に応答してくれるため、ゲスト側の通信まで巻き添えを食わずに済む。

  • ICS
    端折って言えばWindows版NAPT。これ有効化することで、該当のNICは「ホームネットワーク接続」上の他端末からの通信を中継・IP変換してくれるようになる。

GNS3は仮想NWなので当然ながら直接Internet回線に繋げられない。そこで代わりに Loopback のループバック・アダプタを使い、物理NICへ中継してInternetへ出られるようにしてやる。GNS3に限らず、仮想環境のネットワーク設定としては割と常套手段らしいデス。