はじめに
VirtualBoxを久しぶりに使ったら全然覚えてない...
特にネットワークまわり。
やりたいことは単純でおおざっぱに言うと以下2点だけ
そんな時の自分メモ
アジェンダ
- 今回の環境
- やりたいこと
- 何をすれば良いか
- どうやるか
- ネットワークを確認してみる
1. 今回の環境
ホストOS情報
$ sw_vers ProductName: Mac OS X ProductVersion: 10.13.5 BuildVersion: 17F77
$ VBoxManage -v 5.2.12r122591
ゲストOS情報
$ cat /etc/redhat-release CentOS release 6.5 (Final)
2. やりたいこと
はじめに
に記載したことがやりたい事ですが再掲です。
3. 何をすれば良いか
2. やりたいこと
を実現するために
VirtualBoxで何をすれば良いか
を文章的にまとめるとこんな感じです。
また、これを図にするとこんなイメージになります。
4. どうやるか
何をすれば良いか
を実現するために具体的にやることは以下の4stepです。
- ①. VirtualBoxマネージャでネットワークアダプタを作成&設定する
- ②. VirtualBoxマネージャで仮想マシンのネットワーク設定をする
- ③. ゲストOSでネットワークの設定をする
- eth0とeth1を有効にする
- ④. ホストOSからSSHしてみる
VirtualBoxマネージャ
はこのGUIツールです
①. VirtualBoxマネージャでネットワークアダプタを作成&設定する
- グローバルツール(G)を開きます。
- 作成(C)を押します。
vboxnet0
というアダプタが作成されます。
vboxnet0
を選択した状態でアダプター
タブを開き
アダプターを手動で設定
にチェックが入っている事を確認します。
DHCPサーバ
タブを開きサーバを有効化
にチェックします。
設定値はそのままで大丈夫です。
②. VirtualBoxマネージャで仮想マシンのネットワーク設定をする
ネットワーク
を開いてアダプター1
にNATが設定されている事を確認します。
アダプター2
を選択してネットワークアダプターを有効化
にチェックをします。
割り当て:
にホストオンンリーアダプター
を選択して
名前
にさきほど作成したvboxnet0
を選びます。
(デフォルトvboxnet0になってる)
また、高度
を押すと設定がさらに開くのでMACアドレス
をメモっておきます。
今回の例でいうとMACアドレスは以下です
080027588378
最後にOK
を押して設定を保存します。
③. ゲストOSでネットワークの設定をする
仮想マシンを起動するか、すでに起動していた場合は再起動します。
起動したら仮想マシンのターミナルで設定を行います。
rulesをcleanにする
MACアドレス
とeth*
の対応づけを行なっているrulesの設定を綺麗にしておきます。
reboot後にeth0、eth1を元に自動で作成されるので大丈夫です。
$ rm /etc/udev/rules.d/70-persistent-net.rules
この辺のファイルが何かは以下をご参考ください
ifcfg-eth*
を設定
vimで/etc/sysconfig/network-scripts/ifcfg-eth0
を設定します。
ファイルを開くともともと書かれてる場合がありますが、
他の行はコメントアウトしました。
DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=dhcp PEERDNS=no
vimで/etc/sysconfig/network-scripts/ifcfg-eth1
を設定します。
ファイルがない場合は作成します。
DEVICE=eth1 HWADDR=08:00:27:58:83:78 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none PEERDNS=no IPADDR=192.168.56.3 NETMASK=255.255.255.0
BOOTPROTO
については気になったので簡単に調べてみました。
再起動する
$ reboot
確認する
以下を確認します。
/etc/udev/rules.d/70-persistent-net.rules
が作成されている- ifconfigで
eth0
、eth1
が設定されている
このように表示されれば設定がされているはずです。
# 確認 # rulesが新しくできている $ cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x8086:0x100e (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:82:03:24", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # PCI device 0x8086:0x100e (e1000) (custom name provided by external tool) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:58:83:78", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" # ネットワークインターフェースの確認 $ ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:82:03:24 inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe82:324/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6 errors:0 dropped:0 overruns:0 frame:0 TX packets:24 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1470 (1.4 KiB) TX bytes:2262 (2.2 KiB) eth1 Link encap:Ethernet HWaddr 08:00:27:58:83:78 inet addr:192.168.56.3 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe58:8378/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:505 errors:0 dropped:0 overruns:0 frame:0 TX packets:318 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:48536 (47.3 KiB) TX bytes:73614 (71.8 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
疎通確認をする
次に、pingで外向けに通信してNAT(ゲストOS->ホストOSの通信)を確かめます。
packet lossがなければ成功です。
# Google Public DNS(8.8.8.8)に疎通確認 $ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=4.17 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=63 time=5.32 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=63 time=5.54 ms 64 bytes from 8.8.8.8: icmp_seq=4 ttl=63 time=4.29 ms ^C --- 8.8.8.8 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3155ms rtt min/avg/max/mdev = 4.179/4.837/5.548/0.611 ms # googleに疎通確認 $ ping google.com PING google.com (172.217.24.142) 56(84) bytes of data. 64 bytes from nrt20s01-in-f14.1e100.net (172.217.24.142): icmp_seq=1 ttl=63 time=2.25 ms 64 bytes from nrt20s01-in-f14.1e100.net (172.217.24.142): icmp_seq=2 ttl=63 time=2.35 ms 64 bytes from nrt20s01-in-f14.1e100.net (172.217.24.142): icmp_seq=3 ttl=63 time=3.61 ms 64 bytes from nrt20s01-in-f14.1e100.net (172.217.24.142): icmp_seq=4 ttl=63 time=2.55 ms ^C --- google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3895ms rtt min/avg/max/mdev = 2.259/2.695/3.612/0.540 ms
④. ホストOSからSSHしてみる
ここまでくればmacでsshしてみます。
sshできればホストオンリーアダプタ(ホストOS->ゲストOSの通信)が成功です。
$ ssh root@192.168.65.3 root@192.168.56.3's password: Last login: Thu Jun 21 22:30:49 2018 from 192.168.56.1
5. ネットワークを確認してみる
念のためもう少しネットワークを確認してみます。
ゲストOS
ゲストOS側でroute、netstat、tracerouteでネットワーク設定を確認します。
外に出れていれば以下のようになります。
route
routeコマンドでルーティングテーブルを確認します
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.2.0 * 255.255.255.0 U 0 0 0 eth0 192.168.56.0 * 255.255.255.0 U 0 0 0 eth1 link-local * 255.255.0.0 U 1002 0 0 eth0 link-local * 255.255.0.0 U 1003 0 0 eth1 default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 $ route
- Destination あて先
- Gateway ゲートウェイ
- Genmask あて先ネットマスク
- Flags 経路の状態
- U 有効
- H 対象はホスト
- G ゲートウェイを使用
- ! 無効
- Metric あて先までの距離
netstat
netstatでネットワークインターフェース(NIC)の状態を確認します
# netstat $ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1 0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
traceroute
tracerouteでネットワークの経路を確認してみます。
# traceroute $ traceroute -T -q 1 -w 1 google.com traceroute to google.com (172.217.24.142), 30 hops max, 60 byte packets 1 10.0.2.2 (10.0.2.2) 0.127 ms 2 syd09s06-in-f14.1e100.net (172.217.24.142) 24.941 ms
今回利用しているオプションは以下の通りです
ホストOSでifconfig
また、ホストOS側でifconfigを行うと、
仮想NICのvboxnet0
に付与されたIPアドレスを確認できます。
$ ifconfig | grep vboxnet0 -A 3 -B 3 nd6 options=201<PERFORMNUD,DAD> media: autoselect status: active vboxnet0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 ether 0a:00:27:00:00:00 inet 192.168.56.1 netmask 0xffffff00 broadcast 192.168.56.255
補足
10.0.2.2
はどこで設定されてるか気になり別途調べてみました。
参考
- 仮想化ソフトウェア VirtualBox の使い方
- VirtualBoxのネットワーク設定 NATとNATネットワーク設定について。
- [VirtualBox] ネットワーキング構成を理解して選択する
- traceroute(tracert) ~ネットワークの経路を調査する
おわり
\(^o^)/