always one step forward

VirtualBoxのゲストOSからネットワーク通信(ブリッジ+NAT)

特に予備知識もない中で、

という構成で、すでにある社内ネットワーク内で

  • [2]⇔[1]、[2]⇔[3]の間で通信(ssh接続)ができる
  • [2]から外部接続(インターネットなど)ができる

という状態にする必要が仕事上出てきて、いろいろ試行錯誤していた。いったんなぜかうまくいって使えていたのに、ネットワーク設定をいじったせいかうまくいかなくなって、全部見直して‥という泥道を歩いたために、だいぶ理解が深まった。

手順

結局振り返ると、[2]での設定だけ行えばうまくいった。

1. VirtualBoxの設定画面でゲストOSにネットワークカードを追加
  • [ブリッジ アダプタ]を追加
  • [Promiscuous Mode]を[Allow All]にする。[Allow VMs]や[Deny]でもいいのかも知れないが、切り分けしきれず

 vbox_network_setting1

  • [アダプタ2]として[NAT]を追加

 vbox_network_setting2

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

4. /etc/hostname を編集

上での 172.16.0.25 に紐づく[2]のホスト名を決めて記述。hamachi とすると

hamachi

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] そのものを再起動する。

8. 設定が反映されたか確認

[2] の再起動後、以下のようなコマンドで設定が反映されたか確認

  • ifconfig で固定したIPアドレスなどが設定されているか
  • uname -n で hamachi が返ってくるか
  • ping gari が通るか
  • ping ikura が通るか
  • Webブラウザで www.yahoo.co.jp を開けるか(これは、[1]や[2]のプロキシ設定も要確認)
  • また、[1]や[3]から ping hamachi が通るかどうかも念のため確認

参考になった情報

その他、たとえば「virtualbox Linux ネットワーク 設定」などで検索すると、苦労したのちに「うまくいったのでメモ」としたいろんな人の情報が見つかる。(うまくいったときに情報を残しておきたい気持ちが、今はよくわかる)ただ、VirtualBoxのバージョンが古かったり、そのために現在は変えなくてもいい設定を変えていたりと、100%参考になるものは少なかった。

けれどまあ、どんな情報でも、参考にできる状態で公開してくれているからこそ良否が自分で判断できるわけで、そこは素直に感謝してます。この情報もどこかの誰かの役に立てば。