VirtualBoxのゲストOSからネットワーク通信(ブリッジ+NAT)
特に予備知識もない中で、
- [1] ホストOS: Windows XP
- [2] ゲストOS([1]のVirtualBox 4.1上で動作): Ubuntu 10.10
- [3] [1]と同一ネットワーク上にある別OS:Windows XP
という構成で、すでにある社内ネットワーク内で
- [2]⇔[1]、[2]⇔[3]の間で通信(ssh接続)ができる
- [2]から外部接続(インターネットなど)ができる
という状態にする必要が仕事上出てきて、いろいろ試行錯誤していた。いったんなぜかうまくいって使えていたのに、ネットワーク設定をいじったせいかうまくいかなくなって、全部見直して‥という泥道を歩いたために、だいぶ理解が深まった。
手順
結局振り返ると、[2]での設定だけ行えばうまくいった。
1. VirtualBoxの設定画面でゲストOSにネットワークカードを追加
- [ブリッジ アダプタ]を追加
- [Promiscuous Mode]を[Allow All]にする。[Allow VMs]や[Deny]でもいいのかも知れないが、切り分けしきれず
- [アダプタ2]として[NAT]を追加
2. ゲストOSを起動して ifconfig を確認
(MACアドレス)から、各ネットワークカードが「eth0」「eth1」どちらに紐づいたかを確認
eth0 Link encap:Ethernet HWaddr (MACアドレス)
(以下の行は省略)
eth1 Link encap:Ethernet HWaddr (MACアドレス)
(以下の行は省略)
lo Link encap:Local Loopback
(以下の行は省略)
以下のファイル編集はすべて sudo で。たとえば
$sudo gedit /etc/network/interfaces
3. /etc/network/interfaces を編集
[ブリッジ アダプタ]が割り当てられたほうのIPアドレスを固定する。今回は eth0 だったので
auto lo
iface lo inet loopback
の後ろに以下を追記する。address はそのネットワークで有効な空きIPアドレスで、例として 172.16.0.25 としている。netmask などもその社内ネットワークの設定と合わせる(要はそのネットワークにもう1台をIPアドレス固定で追加するイメージ)
auto eth0
iface eth0 inet static
address 172.16.0.25
netmask 255.255.240.0
network 172.16.0.0
broadcast 172.16.0.255
5. /etc/hosts に追記
[2]からアクセスする[1]や[3]の(ほかにもサーバがほかにあればそれも含めて)IPアドレスとホスト名を追記しておく。「127.0.0.1 localhost」のような行があってもそのままでよい。たとえば [1] gari, 172.16.4.60 [3] ikura, 172.16.5.55 だったとすると
172.16.4.60 gari
172.16.5.55 ikura
6. /etc/udev/rules.d/70-persistent-net.rules を編集
# This file maintains persistent names for network interfaces.
# See udev(7) for syntax.
#
# Entries are automatically added by the 75-persistent-net-generator.rules
# file; however you are also free to add your own entries.
# PCI device 0x8086:0x100e (e1000)
というコメント行の下にたとえば以下のような行が存在しているので、一度すべて削除する。(試行錯誤していると eth2 や eth3 の情報が残っていることがあるがこの場合も削除)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="(MACアドレス)", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="(MACアドレス)", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
7. ネットワークの再起動
$sudo /etc/init.d/networking restart
$cat /etc/udev/rules.d/70-persistent-net.rules
として、70-persistent-net.rules に SUBSYSTEM=="net" で始まる行が2つ(eth0とeth1)追加されたかを確認。何度か試す中で追加されていないことがあったので、そのときは念のため仮想マシン [2] そのものを再起動する。
参考になった情報
- VirtualBox Virtual Networking
- バージョン3時代の文章ながら、VirtualBoxで設定できる各種ネットワークアダプタの動作が図解されていてわかりやすい。最後にNAT+BRIDGEというパターンがあればリファレンスとしては完璧
- VMware で Ubuntu イメージをコピーしたら NIC が見えなくなる件
- VMWare向けの情報だけれど、VirtualBoxでも参考になる。この /etc/udev/rules.d/70-persistent-net.rules も確認しないといけない、というポイントに気づくのに時間がかかった。
- VirtualBox Mania - ネットワーク設定
その他、たとえば「virtualbox Linux ネットワーク 設定」などで検索すると、苦労したのちに「うまくいったのでメモ」としたいろんな人の情報が見つかる。(うまくいったときに情報を残しておきたい気持ちが、今はよくわかる)ただ、VirtualBoxのバージョンが古かったり、そのために現在は変えなくてもいい設定を変えていたりと、100%参考になるものは少なかった。
けれどまあ、どんな情報でも、参考にできる状態で公開してくれているからこそ良否が自分で判断できるわけで、そこは素直に感謝してます。この情報もどこかの誰かの役に立てば。