VirtualBoxのゲストOS(CentOS)にsshでアクセス & ゲストOSからネットに接続する設定

2020年10月1日

備忘録です。
単純に素でインストールしてNAT設定のみにしたら、内部向けのアドレスが安定しなかったので、ネットワークを2つに分けました。
VirtualBox 6.1
ゲストOSは CentOS 7.8
ホストOSは、Windows10 Home です。
おそらくは他のOSでもゲストOS側の投入コマンドを読み替えれば、同じような手順で動くでしょう。

VirtualBox側の設定

VirtualBoxマネージャーから
ファイル>ホストネットワークマネージャ を起動
VirtualBox Host-Only Ethernet Adapter があることを確認し、プロパティに表示されているIPv4アドレスをメモしておきます。
また、IPv4ネットマスクが 255.255.255.0 になっていることを確認します。

続いて、インストール済の仮想マシンの設定画面を開きます。

ネットワーク>アダプター1 を選び、割り当てを「NAT」にします。(こちらはホストOSのNATを通じて、インターネットアクセスを行います。)

続いて、アダプター2 を選択し、「ネットワークアダプターを有効化」のスイッチをON, 割り当てを「ホストオンリーアダプター」を選択します。(こちらのアドレスを用いて、ホストOSからのSSH接続を処理します。)

ここまででVirtualBox側の設定は終わりです。続いてゲストOS側の設定に移りますので、起動します。

ゲストOS(CentOS)側の設定

ゲストOS側では2つのネットワークに接続されています。

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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 group default qlen 1000
    link/ether 08:00:27:43:7a:6d brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic enp0s3
       valid_lft 82685sec preferred_lft 82685sec
    inet6 fe80::a00:27ff:fe43:7a6d/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:8f:7a:9b brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.100/24 brd 192.168.56.255 scope global noprefixroute enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::dcb2:d32e:1c20:df04/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:a9:95:d2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:a9:95:d2 brd ff:ff:ff:ff:ff:ff
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:9b:7f:73:05 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever

上記の例では、"enp0s3″と"enp0s8″ですが、後者の方がホストオンリーアダプターに接続されています。

IPv4タブを開き、

・IPv4メソッド:手動
・アドレス>アドレス: VirtualBox Host-Only Ethernet Adapter を表示した際にメモしたアドレスより、同じネットワークのアドレスを採番して記載(上記の例では100を利用)
・アドレス>ネットマスク: 同様に 255.255.255.0 を記載
・アドレス>ゲートウェイ: 外向けGWとして “enp0s3″側の方を利用するため、ここは未記載のまま
・DNS: メモしたアドレスを記載

上記を記入したうえで、適用ボタンをクリック

設定の読み込み

$ sudo systemctl restart network.service
これで反映されたなかった場合は、システムを再起動
$ reboot

手動で行う場合は、nmcli コマンドを使うなどで行ってください。以下、設定確認の例

$ nmcli d show enp0s8
GENERAL.DEVICE:                         enp0s8
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:8F:7A:9B
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (接続済み)
GENERAL.CONNECTION:                     enp0s8
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER:               オン
IP4.ADDRESS[1]:                         192.168.56.100/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 192.168.56.0/24, nh = 0.0.0.0, mt = 101
IP4.DNS[1]:                             192.168.56.1
IP6.ADDRESS[1]:                         fe80::dcb2:d32e:1c20:df04/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 101
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255

設定の確認

まずはゲートウェイがNAT側のネットワーク enp0s3のみに設定されていることを、routeコマンドで確認します。

ssh接続は、ゲストOS側で接続が受け入れられること(サービスが起動している。ファイアウォールのポートが開いているなど)を前提に、TeraTermなりPuttyなどの端末ソフトで、先に指定したアドレス(上記の例では、192.168.56.100)に向けて接続してみてください。

インターネット側には、適当なサーバーに向けて ping を飛ばしてみると良いでしょう。

特に問題がなければ、ここまでの手順でインターネット接続が出来て、ホストOS側からゲストOSに向けたSSH接続が出来るはずです。不調な場合、要因はいろいろと考えられますが、そもそもホスト側の問題はないか。設定登録ミスはないか。ファイヤーウォールなどの阻害要因はないかなど、追ってみてください。