[仮想OS] VirtualBox のNAT + ホストオンリーアダプターでのネットワーク設定/ホストOS からSSHできないときの解決方法

Tadashi Shigeoka ·  Sat, September 3, 2011

VirtualBox にて CentOS5.6 を仮想サーバーとしてインストールしたのですが、ホストOSからSSHできない症状に陥りました。

@yak0u さんにアドバイスを頂いて、なんとか解決したのでその方法とネットワーク設定をご紹介します。

VirtualBoxのネットワーク設定

まず、VirtualBoxのネットワーク設定はここを参考にすればOKです。

仮想環境VirtualBoxでのネットワークの設定 : アシアルブログ

仮想OSのファイヤーウォール設定

まず、ファイヤーウォールの設定を変更します。下記サイトの「iptablesの確認」を参考にして設定します。

VMware PlayerにCentOS導入。練習用Webサーバーを構築4

# vi /etc/sysconfig/iptables
# SSH, HTTP, FTP1, FTP2, MySQL
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

22番ポートが閉じているとSSH通信ができなくて、80番ポートが閉じているとブラウザからWebページに接続できません。

編集後、iptablesを再起動します。

# /etc/rc.d/init.d/iptables restart

仮想OS上のネットワーク設定

まず、ネットワーク設定の解説をしてくれている良記事があるのでこれを読みます。

VirtualBox を利用する際のネットワーク設定の話 - ゆどうふろぐ

次に、ホストオンリーアダプターに割り当てるために、空いているローカルIPアドレスをpingコマンドで調べます。

MacでPingを使用してネットワークが正常に利用可能か調べる方法 / Inforati

$ ping -c 5 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3

--- 192.168.1.1 ping statistics ---
5 packets transmitted, 0 packets received, 100.0% packet loss

VirtualBoxで仮想マシンを起動後、ホストOSであるMacにて ifconfig コマンドを実行します。

.
.
.
vboxnet0: flags=8843 mtu 1500
  ether 0a:00:27:00:00:00 
  inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255

VirtualBoxの vboxnet0 にて 192.168.1.1 が使われていることが分かりました。

また、ホストOS(Mac)にて、再び pingコマンドを実行すると、今度はレスポンスがありました。

$ ping -c 5 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.145 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.125 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.055 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.118 ms

--- 192.168.1.1 ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.052/0.099/0.145/0.038 ms

同様に、ゲストOS(仮想マシン)でもpingコマンドを実行するとレスポンスがありました。

これで「192.168.1.1」のIPアドレスは仮想マシンでちゃんと使われていることが確認できました。

ホストオンリーアダプターに対応するeth1にローカルIPアドレスを固定する

仮想マシンを起動する度にホストオンリーアダプターに対応する IP が変わらないように、IPアドレスを固定します。

ifconfig コマンドで、eth1 に現在割り当てられている IPアドレスを調べて、それを固定 IP として設定すれば問題ないと思います。

・参考:VirtualBox 2.2 と CentOS 5.3 でローカル開発環境 - もやし日記

僕の場合、ifconfig コマンドを実行しても eth1 が表示されませんでした。

なので、eth1 を編集します。

まず、ローカルIPアドレス 192.168.1.2 が使われていないか確認します。

(使われていたら、192.168.1.3, 192.168.1.4, … と順番に空いているローカルIPアドレスを調べます。)

空いているローカルIPアドレスが分かったら、ifcfg-eth1 にIPアドレスを書きます。

[root@localhost ~]# emacs /etc/sysconfig/network-scripts/ifcfg-eth1

# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth1
BOOTPROTO=static                    # dhcp から static に変更
HWADDR=08:00:27:F7:6C:DE
ONBOOT=yes
IPADDR=192.168.1.2                   # 追加
NETMASK=255.255.255.0            # 追加

eth1 を編集後、設定を反映させます。

[root@localhost ~]# ifdown eth1
[root@localhost ~]# ifup eth1

ホストOS(Mac)から ssh コマンドでホストOS(仮想マシン)に接続できました。

ローカルIPでssh接続する方法 - Makotontonのひだまりずむ

$ ssh [email protected]
ssh: connect to host 192.168.1.1 port 22: Connection refused

$ ssh [email protected]
The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established.
RSA key fingerprint is 48:8e:56:2f:95:59:d9:d9:c0:af:cb:6f:ef:ea:ee:bc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.2' (RSA) to the list of known hosts.
[email protected]'s password: 
Last login: Wed May 11 13:30:46 2011
[root@localhost ~]#

以上です。