MacのVirtualBoxに作ったゲストOSにブリッジアダプターを設定する

MacVirtualBoxに作ったゲストOSへホストOSから接続できるようにしたので、他のPCからもアクセスできるようにします。
ponsuke-tarou.hatenablog.com

  • 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
  • 環境
    • ホストOS : macOS Sierra Version10.12.4
    • VirtualBox : Version 5.1.22 r115126 (Qt5.6.2)
    • ゲストOSへ接続したいOS : Windows10

これまで設定してきたNAT + ホストオンリーアダプターで、

  • ゲストOSでインターネットに接続できる
  • ホストOSからゲストOSに接続できる

という状態でした。

しかし、これではホストOSではない「ローカルネットワーク*1にあるPC」からの接続はできません。
そこで、ネットワークをブリッジアダプターにして「ローカルネットワーク」内にあたかもゲストOSが他のPCのように接続している状態を作り、「ローカルネットワークにあるPC」からの接続を試みます。

■ブリッジアダプター
  ・ゲストOSがホストOSのネットワーク設定をブリッジしてホストOSのネットワークを使用する
   (ゲストOSがホストOSと同一のネットワークに存在するかのように動作する)
  ・ホストOSからゲストOSへの接続可能
  ・インターネットの相互間通信可能(外部ネットワークと直接つながる)
  ・ゲストOSも物理的にIPアドレスを利用する(ホストOSのネットワークからゲストOSが見える)
  ・VirtualBoxのブリッジは少々動作が不安定なので注意が必要
  ・柔軟性が高いがセキュリティの脅威にさらされやすい
http://blog-imgs-79.fc2.com/3/k/a/3ka2w/nw003.png
http://blog-imgs-79.fc2.com/3/k/a/3ka2w/nw004.png
Virtual Boxのネットワーク設定 - ぐ~だらびより。

ブリッジアダプタを設定します。

設定に使うものを準備します。

qiita.com
www.atmarkit.co.jp

Oracle VM Managerで設定します。

  1. Oracle VM ManagerでゲストOSを選択して[Network]リンクを押下します。f:id:ponsuke_tarou:20170611125439p:plain
  2. [Attached to:]で「Bridged Adapter」を選択して[OK]ボタンを押下します。f:id:ponsuke_tarou:20170611125806p:plain

ゲストOSを起動して状態を確認します。

$ ssh mana@192.168.56.202

$ 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 192.168.0.9/24 brd 192.168.0.255 scope global dynamic enp0s3
       valid_lft 86398sec preferred_lft 86398sec
    inet6 2408:210:9080:4000:a00:27ff:fe67:e7fc/64 scope global mngtmpaddr dynamic 
       valid_lft 2591936sec preferred_lft 604736sec
    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  管理無し  --    

ブリッジアダプター用のConnectionを作成します。

# Connectionを追加します。
$ sudo nmcli c add type bridge ifname br0
接続 'bridge-br0' (b720a4bd-2dd8-462d-b17d-8967805d64c4) が正常に追加されました。

$ nmcli c
名前        UUID                                  タイプ          デバイス 
bridge-br0  b720a4bd-2dd8-462d-b17d-8967805d64c4  bridge          br0      
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     
br0       bridge    接続中(IP 設定を取得中)  bridge-br0 
lo        loopback  管理無し                   --    

ifnameでインターフェースを指定した場合

/etc/sysconfig/network-scripts/ifcfg-bridge-のファイルが作成される。
DEVICEのエントリ: ifnameの値
NAMEのエントリ: bridge-になる。
STP=yesになる
nmcliでブリッジインターフェースを作成する2 · GitHub

追加したブリッジアダプター用のConnectionを設定します。

# STPを止めます。
$ sudo nmcli c modify bridge-br0 stp no

# IPv6は使わない設定にします。
$ sudo nmcli c modify bridge-br0 ipv6.method ignore

# IPv4を固定のIPアドレスにします。
$ sudo nmcli c modify bridge-br0 ipv4.method manual ipv4.addresses '192.168.0.6/24' ipv4.gateway '192.168.0.1' ipv4.dns '8.8.8.8'

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

# 状態を確認します。
$ 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 192.168.0.9/24 brd 192.168.0.255 scope global dynamic enp0s3
       valid_lft 86393sec preferred_lft 86393sec
    inet6 2408:210:9080:4000:a00:27ff:fe67:e7fc/64 scope global mngtmpaddr dynamic 
       valid_lft 2591618sec preferred_lft 604418sec
    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
4: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 02:ca:2b:d2:32:7d brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.6/24 brd 192.168.0.255 scope global br0
       valid_lft forever preferred_lft forever

$ nmcli c
名前        UUID                                  タイプ          デバイス 
bridge-br0  b720a4bd-2dd8-462d-b17d-8967805d64c4  bridge          br0      
enp0s3      862d8f79-a10c-35d8-8b38-6d982fca83ce  802-3-ethernet  enp0s3   
enp0s8      0cf4cb12-cd52-463e-91eb-5990197860b6  802-3-ethernet  enp0s8   

$ nmcli d
デバイス  タイプ    状態      接続       
br0       bridge    接続済み  bridge-br0 
enp0s3    ethernet  接続済み  enp0s3     
enp0s8    ethernet  接続済み  enp0s8     
lo        loopback  管理無し  --         

$ sudo cat /etc/sysconfig/network-scripts/ifcfg-bridge-br0 
DEVICE=br0
STP=no
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=bridge-br0
UUID=b720a4bd-2dd8-462d-b17d-8967805d64c4
ONBOOT=yes
IPADDR=192.168.0.6
PREFIX=24
GATEWAY=192.168.0.1
DNS1=8.8.8.8

www.infraexpert.com

IPADDRには、ゲストPCに固定で割り当てたいIPアドレスを指定します。ホストPCやLAN上の他のPCとは異なる値を設定してください。<省略>
BOOTPROTOはnoneにすることで動的なIPアドレス割り当てがされないようになります。
ja.stackoverflow.com

バイスにはそれぞれ独自の設定ファイルがあるため、管理者は、各インターフェースがどう機能するか個別に制御できます。
9.2. インターフェース設定ファイル

奴隷を作ります。

# 奴隷用のConnectionを作成します。
$ sudo nmcli c add type bridge-slave ifname enp0s3 master bridge-br0
接続 'bridge-slave-enp0s3' (f3a0186b-e1ea-439d-84a8-5589863feb91) が正常に追加されました。

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

# 状態を確認します。
$ 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 192.168.0.9/24 brd 192.168.0.255 scope global dynamic enp0s3
       valid_lft 86396sec preferred_lft 86396sec
    inet6 2408:210:9080:4000:a00:27ff:fe67:e7fc/64 scope global mngtmpaddr dynamic 
       valid_lft 2591879sec preferred_lft 604679sec
    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
4: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 02:ca:2b:d2:32:7d brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.6/24 brd 192.168.0.255 scope global br0
       valid_lft forever preferred_lft forever

$ nmcli c
名前                 UUID                                  タイプ          デバイス 
bridge-br0           b720a4bd-2dd8-462d-b17d-8967805d64c4  bridge          br0      
enp0s3               862d8f79-a10c-35d8-8b38-6d982fca83ce  802-3-ethernet  enp0s3   
enp0s8               0cf4cb12-cd52-463e-91eb-5990197860b6  802-3-ethernet  enp0s8   
bridge-slave-enp0s3  f3a0186b-e1ea-439d-84a8-5589863feb91  802-3-ethernet  --       

$ nmcli d
デバイス  タイプ    状態      接続       
br0       bridge    接続済み  bridge-br0 
enp0s3    ethernet  接続済み  enp0s3     
enp0s8    ethernet  接続済み  enp0s8     
lo        loopback  管理無し  --   

# 不要となった既存のConnectionを削除します。
$ sudo nmcli c del enp0s3
接続 'enp0s3' (862d8f79-a10c-35d8-8b38-6d982fca83ce) が正常に削除されました。

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

# ここでうまく設定が反映されない場合はゲスト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 master br0 state UP qlen 1000
    link/ether 08:00:27:67:e7:fc brd ff:ff:ff:ff:ff:ff
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
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 08:00:27:67:e7:fc brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.6/24 brd 192.168.0.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 2408:210:9080:4000:a00:27ff:fe67:e7fc/64 scope global mngtmpaddr dynamic 
       valid_lft 2591972sec preferred_lft 604772sec
    inet6 fe80::a00:27ff:fe67:e7fc/64 scope link 
       valid_lft forever preferred_lft forever

$ nmcli c
名前                 UUID                                  タイプ          デバイス 
bridge-br0           b720a4bd-2dd8-462d-b17d-8967805d64c4  bridge          br0      
bridge-slave-enp0s3  f3a0186b-e1ea-439d-84a8-5589863feb91  802-3-ethernet  enp0s3   
enp0s8               0cf4cb12-cd52-463e-91eb-5990197860b6  802-3-ethernet  enp0s8   

$ nmcli d
デバイス  タイプ    状態      接続                
br0       bridge    接続済み  bridge-br0          
enp0s3    ethernet  接続済み  bridge-slave-enp0s3 
enp0s8    ethernet  接続済み  enp0s8              
lo        loopback  管理無し  -- 

こちらを参考にさせて頂きました。
qiita.com

e-words.jp

ホストOSからブリッジアダプターのIPアドレスで接続してみます。

$ ssh mana@192.168.0.6
mana@192.168.0.6s password: 
Last login: Tue Oct 24 01:46:41 2017 from 192.168.56.1

$ nmcli c
名前                 UUID                                  タイプ          デバイス 
bridge-br0           b720a4bd-2dd8-462d-b17d-8967805d64c4  bridge          br0      
bridge-slave-enp0s3  f3a0186b-e1ea-439d-84a8-5589863feb91  802-3-ethernet  enp0s3   
enp0s8               0cf4cb12-cd52-463e-91eb-5990197860b6  802-3-ethernet  enp0s8  

接続できました。

ローカルネットワークにあるWindows10からpingで確認してみます。

ping 192.168.0.6

192.168.0.6 に ping を送信しています 32 バイトのデータ:
192.168.0.6 からの応答: バイト数 =32 時間 =94ms TTL=64
192.168.0.6 からの応答: バイト数 =32 時間 =100ms TTL=64
192.168.0.6 からの応答: バイト数 =32 時間 =19ms TTL=64
192.168.0.6 からの応答: バイト数 =32 時間 =34ms TTL=64

192.168.0.6 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 19ms、最大 = 100ms、平均 = 61ms

つながりました。

*1:今回は、「お家で使っているLANにつながっている」ということです。