MacのVirtualBoxに作ったゲストOSにホストオンリーアダプターを設定する

MacVirtualBox仮想マシンを作ってインターネットに接続できることを確認できたのでホストOSからアクセスできるようにします。
ponsuke-tarou.hatenablog.com

ホストOSからゲストOSへアクセスできるようにホストオンリーアダプタを設定します。

VirtualBox仮想マシンではデフォルトでNAT*1に設定されており、DHCPIPアドレスなども自動的に割り当てられるため何もしないでもインターネットに接続できました。
しかし、この状態ではホストOSからはアクセスできないので、さまざまな検証を行うための環境としては不十分です。
gihyo.jp

■ホストオンリーアダプター
  ・ゲストOSとホストOS間のみ通信ができるネットワーク
  ・外部との通信はできない
http://blog-imgs-79.fc2.com/3/k/a/3ka2w/nw007.png
Virtual Boxのネットワーク設定 - ぐ~だらびより。

VirtualBoxにホストオンリーネットワークを作ります。

  1. Oracle VM VirtualBox Managerのメニューにある[VirtualBox] > [Preference...]を選択します。f:id:ponsuke_tarou:20170607214243p:plain
  2. [Network] > [Host-only Network] > [+]アイコンを選択すると「vboxnet0」が追加されます。f:id:ponsuke_tarou:20170607214817p:plain
  3. ドライバアイコンを選択してダイアログを開きます。f:id:ponsuke_tarou:20170607214912p:plain
  4. [DHCP Server] > [Enable Server]チェックボックにチェックを入れます。
  5. 各パラメータに値を設定し、[OK]ボタンを押下して設定を完了します。f:id:ponsuke_tarou:20170607215404p:plain

サーバーアドレス:VirtualBoxに作成されるDHCPサーバーのIPアドレスを指定
サーバーマスク:ゲストOSにDHCPで割り当てるIPアドレスのネットマスクを指定
アドレス下限:ゲストOSにDHCPで割り当てるIPアドレスの範囲の最小値を指定
アドレス上限:ゲストOSにDHCPで割り当てるIPアドレスの範囲の最大値を指定
VirtualBox CentOS6.7 64bitでNAT、ホストオンリーアダプターを使用 | kakiro-web カキローウェブ

Oracle VM VirtualBox Managerで設定します。

この時点で仮想マシンが起動している場合は停止してから追加します。

$ shutdown -h now
  1. Oracle VM VirtualBox Managerから仮想マシンを選択して右側のウィンドウから[Network]リンクを押下してダイアログを開きます。f:id:ponsuke_tarou:20170607220159p:plain
  2. [Adapter 2] > [Enable Network Adapter]チェックボックにチェックを入れます。
  3. [Attached to]で「Host-only Adapter」を選択します。(Host-only Adapterが複数無ければ[Name]に先程作成した「vboxnet0」が表示されるはず)。
  4. [OK]ボタンを押下してダイアログを閉じます。f:id:ponsuke_tarou:20170607220847p:plain
  5. ホストオンリーアダプタが追加されました。f:id:ponsuke_tarou:20170607221039p:plain

ゲストOSの状態を確認します。

  1. ゲストOSを起動してログインします。
  2. 「ip addr show」「nmcli c(connection)」「nmcli d(device)」で現状を確認します。
    • enp0s8がホストオンリーアダプターです。f:id:ponsuke_tarou:20171023214214p:plain
  3. ホストOSから接続できることを確認します。
    • ホストオンリーアダプターのIPアドレスはまだ固定されていないので変わることがあります。

ホストOSからゲストOSへ接続してみます。

$ ping 192.168.56.201
PING 192.168.56.201 (192.168.56.201): 56 data bytes
64 bytes from 192.168.56.201: icmp_seq=0 ttl=64 time=0.541 ms
64 bytes from 192.168.56.201: icmp_seq=1 ttl=64 time=0.494 ms
64 bytes from 192.168.56.201: icmp_seq=2 ttl=64 time=0.337 ms
<省略>
$ ssh mana@192.168.56.201
mana@192.168.56.201s password: 
Last login: Mon Oct 23 21:39:48 2017
$ nmcli c
名前        UUID                                  タイプ          デバイス 
enp0s3      862d8f79-a10c-35d8-8b38-6d982fca83ce  802-3-ethernet  enp0s3   
有線接続 1  320cd23e-b9a4-324d-b0ff-3dd16b0544db  802-3-ethernet  enp0s8 

NetworkManagerを使って新しいConnectionを作成します。

前回は、「nmtuiコマンドを使ってGUIで設定」をやったので
今回は、「nmcliコマンドを使って設定」する方法にします。

# 「enp0s8」Connectionを追加します。
$ sudo nmcli c add type ethernet con-name enp0s8 ifname enp0s8
接続 'enp0s8' (0cf4cb12-cd52-463e-91eb-5990197860b6) が正常に追加されました。

# Connectionが作成されたことを確認します。
$ sudo ls -la /etc/sysconfig/network-scripts/ifcfg-enp0s*
-rw-r--r--. 1 root root 226 1023 21:20 /etc/sysconfig/network-scripts/ifcfg-enp0s3
-rw-r--r--. 1 root root 282 1023 22:36 /etc/sysconfig/network-scripts/ifcfg-enp0s8
$ nmcli c
名前        UUID                                  タイプ          デバイス 
enp0s3      862d8f79-a10c-35d8-8b38-6d982fca83ce  802-3-ethernet  enp0s3   
有線接続 1  320cd23e-b9a4-324d-b0ff-3dd16b0544db  802-3-ethernet  enp0s8   
enp0s8      0cf4cb12-cd52-463e-91eb-5990197860b6  802-3-ethernet  --       
$ nmcli d
デバイス  タイプ    状態      接続       
enp0s3    ethernet  接続済み  enp0s3     
enp0s8    ethernet  接続済み  有線接続 1 
lo        loopback  管理無し  --    

# IPv4を手動に設定します。
$ sudo nmcli c modify enp0s8 ipv4.method manual

# IPアドレスを固定します。
$ sudo nmcli c modify enp0s8 ipv4.addresses '192.168.56.202/24' ipv4.dns '8.8.8.8'

# IPv6は使わない設定をします。
$ sudo nmcli c modify enp0s8 ipv6.method ignore

# NetworkManagerを再起動します。
$ sudo systemctl restart NetworkManager


# なぜか既存の「有線接続 1 」のNIC名が「enp0s8」になりました・・・。
$ nmcli c
名前    UUID                                  タイプ          デバイス 
enp0s3  862d8f79-a10c-35d8-8b38-6d982fca83ce  802-3-ethernet  enp0s3   
enp0s8  cb2d1cde-9064-4dfb-89c2-3a6246ce916e  802-3-ethernet  enp0s8   
enp0s8  0cf4cb12-cd52-463e-91eb-5990197860b6  802-3-ethernet  --       
$ nmcli d
デバイス  タイプ    状態      接続   
enp0s3    ethernet  接続済み  enp0s3 
enp0s8    ethernet  接続済み  enp0s8 
lo        loopback  管理無し  --     

# 既存の「enp0s8(有線接続 1 )」をNIC名では区別がつかないのでUUIDで削除します。
$ sudo nmcli c del cb2d1cde-9064-4dfb-89c2-3a6246ce916e
接続 'enp0s8' (cb2d1cde-9064-4dfb-89c2-3a6246ce916e) が正常に削除されました。

# 当然ですが、IPアドレスが変わったのでここでホストOSとの接続が一旦切れます。
# 再び新しく設定したIPアドレスで接続します。
$ ssh mana@192.168.56.202
The authenticity of host '192.168.56.202 (192.168.56.202)' can't be established.<------------- ☆'
ECDSA key fingerprint is SHA256:j+mhEbwrkV5GaVU8gat34VZs2A4+q4q8HaKjOg9m33I.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.56.202' (ECDSA) to the list of known hosts.
mana@192.168.56.201s password: 
Last login: Mon Oct 23 23:29:33 2017

# NetworkManagerを再起動します。
$ sudo systemctl restart NetworkManager

☆で表示されたメッセージは初回接続(今回はIPアドレスが変わって初回)でしか出ません。
SSHで接続するとホストOS側の公開鍵の有無を確認し、公開鍵がないことからホストOSの~/.ssh/known_hostsファイルに設定するかを尋ねられています。
ここで「yes」を入力することでknown_hostsに公開鍵を保存し、次回接続からはメッセージは表示されなくなるのです。
http://www.turbolinux.co.jp/products/server/11s/user_guide/sshconnect.html

今回使われたのはECDSA*2というデジタル署名です。

やり方はこちらを参考にさせて頂きました。

ゲストOSの状態を確認します。

$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:67:e7:fc brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
       valid_lft 86387sec preferred_lft 86387sec
    inet6 fe80::a00:27ff:fe67:e7fc/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:ce:e2:cd brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.202/24 brd 192.168.56.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fece:e2cd/64 scope link 
       valid_lft forever preferred_lft forever
$ nmcli c
名前    UUID                                  タイプ          デバイス 
enp0s3  862d8f79-a10c-35d8-8b38-6d982fca83ce  802-3-ethernet  enp0s3   
enp0s8  0cf4cb12-cd52-463e-91eb-5990197860b6  802-3-ethernet  enp0s8   
$ nmcli d
デバイス  タイプ    状態      接続   
enp0s3    ethernet  接続済み  enp0s3 
enp0s8    ethernet  接続済み  enp0s8 
lo        loopback  管理無し  --   

設定できました。