Linux/Ubuntuでの仮想PC用LAN設定解説(1)
こんにちは。匠技術研究所の谷山 亮治です。
Ubuntu 8.04 LTSでVirtualBoxを試しています。VirtualBox上の仮想PCをLAN接続するためのLAN設定の結果です。
■実現イメージ
PC上のUbuntu 8.04 LTS上のVirtualBox仮想ソフトでさらにUbuntu 8.04 LTSを起動。その上のFirefoxでこのブログを表示しています。
実現したいこと:
br0(実LANのIP)=eth0(物理LAN接続。br0と結合)+tap0(仮想PCのLANと結合)
仮想PCにLANと同じIPセグメントのアドレスを付与したい。
準備:
設定を行うために、追加インストールしたパッケージ
uml-utilities - User-mode Linux (utility programs)
bridge-utils - Utilities for configuring the Linux ethernet bridge
説明:
1)eth0
サーバーPCに物理的に存在するインターフェイスで、LANケーブルを通じて事務所内LANに接続しています。基本ソフトをインストールするときに自動的に検出したものです。
デフォルトでDHCPでIPを取得しますが、サーバーPC内の仮想PCを事務所内LANのアドレスで通信させるために、IPを外し、promiscuous(無差別通信)モードを設定しています。この状態で、以下のブリッジインターフェイスbr0に含めることで、br0にLAN上の通信が結びつきます。
2)br0
サーバー内部の外部通信が可能な仮想LANインターフェイスで、PC内の仮想HUBです。eth0起動と連動してbrctlコマンドで作成しています。このHUB(br0)の上流のLANは実際の事務所のLANで、eth0を通じて通信します。
DHCPでIPを取得しています。このIPを使って、仮想サーバのホストOSが通信します。もちろん固定IPにすることもできます。
3)tap0
サーバー内部の仮想PCが利用するLANインターフェイスです。仮想PC(xVM)マネージャで仮想PCのLANインターフェイスとして指定します。独立したMACアドレスを持ち、サーバー内HUB(br0)と接続します。仮想PCが複数ある場合は必要な数をtap1、tap2、、と作成し同様にbr0と結び付けます。仮想PCはこのインターフェイスを通して上流のLANと直接結びつくので、上流LANからDHCPでアドレスを取得するなど、上流LANと同じIPセグメントのアドレスで通信を行います。上流LAN上のWindows端末からsshで接続するなど、他のIP端末間の通信ができます。ちょうどHUBに接続したように見えます。
tap0はbr0と同様にeth0起動と連動してtunctlコマンドで作成しています。またbrctlコマンドでbr0と結び付けています。
結果:
$ ifconfig
br0 Link encap:イーサネット ハードウェアアドレス 00:e0:4d:7e:3d:aa
inetアドレス:192.168.0.38 ブロードキャスト:192.168.0.255 マスク:255.255.255.0
inet6アドレス: fe80::2e0:4dff:fe7e:3daa/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:320 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:291 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:0
RXバイト:28692 (28.0 KB) TXバイト:49605 (48.4 KB)
eth0 Link encap:イーサネット ハードウェアアドレス 00:e0:4d:7e:3d:aa
inet6アドレス: fe80::2e0:4dff:fe7e:3daa/64 範囲:リンク
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 メトリック:1
RXパケット:328 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:290 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:34372 (33.5 KB) TXバイト:50499 (49.3 KB)
割り込み:219 ベースアドレス:0xc000
lo Link encap:ローカルループバック
inetアドレス:127.0.0.1 マスク:255.0.0.0
inet6アドレス: ::1/128 範囲:ホスト
UP LOOPBACK RUNNING MTU:16436 メトリック:1
RXパケット:1380 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:1380 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:0
RXバイト:69000 (67.3 KB) TXバイト:69000 (67.3 KB)
tap0 Link encap:イーサネット ハードウェアアドレス 00:ff:d5:05:1a:dc
inet6アドレス: fe80::2ff:d5ff:fe05:1adc/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:0 エラー:0 損失:161 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:500
RXバイト:0 (0.0 B) TXバイト:0 (0.0 B)
(*)tap0は仮想PC上でeth0として認識され、dhcpでアドレスを取得します。ホストOS上で仮想PCを起動しても、ホストOSからは、仮想PCのIPは見えません。
(*)この記事の作成・投稿はWindowsXPとFirefox3で行いました。
☆中小企業のIT活用に関する、ご質問・ご相談はお気軽にどうぞ!