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につながっている」ということです。

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  管理無し  --   

設定できました。

MacのVirtualBoxに作ったゲストOSにNATを設定する

MacVirtualBox仮想マシンを作ってCentOSをインストールしたので仮想マシンのネットワークを確認します。
ponsuke-tarou.hatenablog.com

NATを設定することでゲストOSからホストOSを利用してインターネットに接続できるようにします。

http://blog-imgs-79.fc2.com/3/k/a/3ka2w/nw002.png
Virtual Boxのネットワーク設定 - ぐ~だらびより。

ネットワークを設定してみます。

Oracle VM VirtualBox Managerで設定します。

  1. [Setting]を押下します。https://camo.qiitausercontent.com/3232c87ebdb022cf2f99ad5e110a26ead94702fd/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3135393736312f39373331616536372d383435612d633537642d663361642d3533666632646438383362332e706e67
  2. [Network]を押下します。
  3. [Adapter 1] > [Attached to:] > 「NAT」を選択します(何も設定していないとデフォルトでNATになっています)。
  4. [OK]を押下します。

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

  1. VirtualBox仮想マシンを起動してログインします。
  2. 「ip addr show」「nmcli c(connection)」「nmcli d(device)」で現状を確認します。

enp0s3がNATです。
f:id:ponsuke_tarou:20171023205847p:plain

IPアドレスは、DHCPなのでグローバルのアドレスではありません。

インストール時にネットワーク接続の設定を行っていないため、DHCP*1を使って自動的にIPアドレスが取得されるようになっています。
gihyo.jp

NetworkManagerを使って設定します。

CentOS7においてネットワークの設定方法はいくつかあります。

今回は、「nmtuiコマンドを使ってGUIで設定する」やり方です。

  1. 「nmtui」コマンドを打って[NetworkManager TUI]画面を起動します。f:id:ponsuke_tarou:20171023210039p:plain
  2. ここからは矢印キーとEnterで操作します。
  3. [Edit a connection] > [enp0s3]を選択します([enp0s3]がない場合は[Add]で作ります)。https://server-setting.info/images/sakura/os/centos/network2/net2_s.png
  4. 以下を設定します。f:id:ponsuke_tarou:20171023210939p:plain
    • IPv4 CONFIGURATION : Automatic
    • IPv4 CONFIGURATION : Ignore
    • Automatically connect : X(スペースキーでチェックをON/OFFできます)
  5. [OK] > [Back] > [Quit]を押下して画面を閉じます。
  6. Network Managerを再起動します。
$ sudo systemctl restart NetworkManager

設定を確認します。

  1. /etc/sysconfig/network-scripts配下のifcfg-eth*ファイルを確認します。f:id:ponsuke_tarou:20171023211452p:plain
    • [ONBOOT]が「no」になっている場合
      • インターネットに接続できません。[NetworkManager TUI]画面で[Automatically connect] にチェックが入っているか確認します。
  2. curl」コマンドでインターネットに接続できることを確認します。
$ curl ifconfig.me
// ちょっと時間がかかりますがインターネットに繋がっていればグローバルIPアドレスが取得できます。

MacのVirtualBoxに作った仮想マシンへCentOSをインストールする

MacVirtualBox仮想マシンを作ったのでそこへCentOSをインストールします。
ponsuke-tarou.hatenablog.com

ISOイメージをダウンロードする

office-qa.com

  1. Download CentOSサイトで[DVD IOS]を押下する f:id:ponsuke_tarou:20170529211739p:plain
  2. 想像によると「[Actual Country -]=実際の国=日本=距離が近い」ので[Actual Country -]に列挙されているURLのいずれかを押下してISOイメージをダウンロードする
    • URLを眺めると地域名が含まれているものがあるので近所のものがあればそれを選択するといいのかもしれない
  3. お茶しながらダウンロードが終わるのを待つ

ISOイメージを仮想マシンへマウントする

  1. Oracle VM VirtualBox Managerを起動し、[Setting(設定)]を押下する f:id:ponsuke_tarou:20170529221217p:plain
  2. [Strage(ストレージ)] > [Controller IDE(コントローラ : IDE)] > [Empty(空)]
  3. [Attributes(属性)] > [IDE Secondary Master(IDE セカンダリマスター)] > CDマーク
  4. [Choose Virtual Optical Disk File...(仮想光学ディスクファイルを選択...)]f:id:ponsuke_tarou:20170529221813p:plain
  5. ダウンロードしたISOイメージを選択する f:id:ponsuke_tarou:20170529221923p:plain
  6. [OK]を押下する

仮想マシンへOSをインストールする

  1. [Start(起動)]を押下し仮想マシンを起動する f:id:ponsuke_tarou:20170529222202p:plainf:id:ponsuke_tarou:20170529222215p:plain
  2. 使用する言語を選択し、[続行]を押下する f:id:ponsuke_tarou:20170529222303p:plain
  3. [インストール先]を押下する f:id:ponsuke_tarou:20170529222350p:plain
  4. 何も変更せずに[完了]を押下する f:id:ponsuke_tarou:20170529222446p:plain
  5. [インストールの開始]を押下する f:id:ponsuke_tarou:20170529222534p:plain
  6. インストールしている間の時間を使ってrootのパスワードとユーザを作成する f:id:ponsuke_tarou:20170529222717p:plainf:id:ponsuke_tarou:20170529222720p:plainf:id:ponsuke_tarou:20170529222723p:plain
  7. [設定完了]を押下する f:id:ponsuke_tarou:20170529222801p:plain
  8. [再起動]を押下する f:id:ponsuke_tarou:20170529222838p:plain

ログインしてみる

  1. 仮想マシンを起動して作成したユーザでログインするf:id:ponsuke_tarou:20170529223741p:plainf:id:ponsuke_tarou:20170529224746p:plain

CentOSのバージョンを確認してみる

qiita.com
f:id:ponsuke_tarou:20170608211716p:plain

ログアウトしてみる

$ logout

f:id:ponsuke_tarou:20170529224921p:plainf:id:ponsuke_tarou:20170529225006p:plain

OSをシャットダウンしてみる

$ shutdown -h now

f:id:ponsuke_tarou:20170529225135p:plain

MacのVirtualBoxに仮想マシンを作る

インストールしたVirtualBoxCentOSを入れたいので仮想マシンを作ります。
ponsuke-tarou.hatenablog.com

  • 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
  • 環境

VirtualBoxとの対話をはじめる

  1. VirtualBoxを起動する
  2. Newを押下するf:id:ponsuke_tarou:20170526124522p:plain
  3. Nameに「CentOS7」(自分が認識できる仮想マシン名)を入力したらTypeとVersionが自動で選択される(はず)f:id:ponsuke_tarou:20170526124605p:plain

初めてなのでとにかくContinueを押下する

f:id:ponsuke_tarou:20170526124805p:plainf:id:ponsuke_tarou:20170526124913p:plainf:id:ponsuke_tarou:20170526124931p:plain

仮想ハードドライブファイルのサイズ方式を選ぶ

PCに余裕があるかないかわからないので余裕があると信じてStrage on physical hard diskでFixed Sizeを選択してContinueを押下するf:id:ponsuke_tarou:20170526125426p:plain

容量に余裕があれば固定サイズの方が高速です。
www.task-notes.com

VirtualBox仮想マシンをCreateしてもらう

  1. 数日後には忘却の上わからなくなるので、仮想ハードドライブファイルの名前は最初に指定したNameと同じものを入力してCreateを押下するf:id:ponsuke_tarou:20170526130016p:plainf:id:ponsuke_tarou:20170526130134p:plain
  2. できるf:id:ponsuke_tarou:20170526130224p:plain

参考図書

gihyo.jp

MacにVirtualBoxをインストールする

  • 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
  • 環境

インストーラをダウンロードする。

Oracle VM VirtualBox からOSに合うインストーラをダウンロードする。
今回ダウンロードしたのは「VirtualBox-5.2.18-124319-OSX.dmg」である。

インストーラでインストールする。

  1. VirtualBox-5.2.18-124319-OSX.dmg」を押下する。
  2. VirtualBox.pkgをDouble click on this iconする。 f:id:ponsuke_tarou:20170525234552p:plain
  3. [続ける]を押下する。 f:id:ponsuke_tarou:20180921185008p:plain
  4. [インストール]を押下する。 f:id:ponsuke_tarou:20180921200045p:plain
  5. インストール完了を待って[閉じる]を押下する。f:id:ponsuke_tarou:20180921200057p:plain

VirtualBoxを起動してみる。

f:id:ponsuke_tarou:20170525235629p:plain

参考図書

gihyo.jp

ラベンダーのポプリを無駄なく作る方法

ポプリというのは、花などを乾燥させ「熟成」させたものです。
sinsin-kenkou.net

ポプリは花で作ると見た目が良い。が、ラベンダーは枝と葉が多い。
とても勿体無いのでポプリはいつも葉・茎を大量に混ぜています。
今年は花メインで作ってみます。

材料

  1. ラベンダー40cmぐらいのを5本ほど
    • フリンジラベンダー
    • エストカスラベンダー
  2. 紐(リース用)
  3. 流しのゴミネット(入浴剤用)
  4. ポプリの入れ物(ポプリ用)

f:id:ponsuke_tarou:20170502155325j:plain
今年またエストカスラベンダーを買ってしまった。いろいろ頭を使わないと小さな花壇がラベンダー園になってしまう。

① ラベンダーを刈る

穂先だけを取ると必要な部位だけを採取できるものの刈戻しを別途行わければ、その後芽が育たない。
別途刈戻しをすればその時に葉と茎が結局出てしまう。
なのでバッサリ刈る

② ポプリを作る

花を採取してザルにでも入れて風通しの良い何処かにおいておく。
1ヶ月以上後に思い出したらメッシュの袋かなんかに入れてポプリ完成。
f:id:ponsuke_tarou:20170502154027j:plain

③ リースを作る

残った枝に葉をつけたまま紐を巻くように巻きつけて円状にしてリースにする。
f:id:ponsuke_tarou:20170502154044j:plain

④ 葉を入浴剤にする

作業中に落ちた葉を流しのゴミネットに入れて入浴剤完成。
ponsuke-tarou.hatenablog.com

f:id:ponsuke_tarou:20170502154105j:plain

繁茂するラベンダーの使い道

入浴剤

用意するもの

  • 台所の流しで使うゴミネット
  • 繁茂するラベンダー

やること

  1. ラベンダーをゴミネットに入る大きさにちぎる
  2. ゴミネットに入れる
  3. 浴槽に投げ込む
  4. お風呂を入れる

f:id:ponsuke_tarou:20170425210031j:plain

下駄箱の消臭剤

用意するもの

  • 台所の流しで使うゴミネット
  • 繁茂するラベンダー

やること

  1. ラベンダーをゴミネットに入る大きさにちぎる
  2. ゴミネットに入れる
  3. 下駄箱に投げ込む

f:id:ponsuke_tarou:20170425210319j:plain

ドライフラワー

用意するもの

  • キッチンペーパー
  • お菓子とかいただき物についているリボンかゴム
  • 繁茂するラベンダー

やること

  1. ラベンダーを手頃な長さで収穫する
  2. 下葉を取る
  3. からげる
  4. キッチンペーパーで邪魔にならないぐらいの太さに巻く
  5. リボンかゴムでしばる
  6. どっかに吊り下げて放置する
  7. 思い出したらリボンかゴムを締める

「Log4J」と「SLF4J」ってなんだ?ログの出力先探索記

ことのきっかけ

お仕事でコンソールにバーって出てるけどログファイルはどこにあるんだろうと探していた時のことでした。
こんなのを見た、「Logger」だからログはいてくれるのでしょう。

import org.slf4j.Logger;


ログは見るけど出力とかよくわからない・・・いつもはBossや先輩に設定場所と内容の指示をもらってやっているだけ・・・ソフトウェアデザインの2017-03月号でも特集していた「ログ」・・・自分関わっているのだけでも知らなきゃ!となったのがきっかけでした。
「slf4j Logger」でググってみました。「SLF4J」は他のものと一緒に使われるようで、よく目にしたのが・・・

① 「Log4J

Log4JJakarta プロジェクトで開発が進められている Java プログラム用のログ API です。Log4J を利用することで、様々なロギングが可能になります。
1. Log4J の基本 | TECHSCORE(テックスコア)

Log4J はロギングのためのクラス・ライブラリである。開発元は言わずと知れた Apache のサブプロジェクトの一つである。
www.nurs.or.jp

log4jjavaで最もポピュラーなロギングフレームワークだと思います。
log4jだけでも良いのですが、SLF4Jを使うことでprintfライクな文法でログを出力できるところが気に入り利用することにしました。
yokuno.hatenablog.com

② 「Logback

Log4j の開発者が作った別のロギングライブラリ。

歴史的な背景とか、 SLF4J との関係については、 Javaのログ出力: 道具と考え方 というスライドがとても参考になります。
qiita.com

いろいろ読んでみてを理解しはじめました。

www.slideshare.net
www.bunkei-programmer.net

Log4J」「Logback」は実装的なログ出力ライブラリ。

「SLF4J」はインターフェース的なログファサードライブラリ。

Facadeパターンは、既存のクラスを複数組み合わせて使う手順を、「窓口」となるクラスを作ってシンプルに利用できるようにするパターンです。
15.Facadeパターン | TECHSCORE(テックスコア)

kiririmode.hatenablog.jp

「SLF4J(Simple Logging Facade For Java)」はいろんなログ出力ライブラリを切り替えて使うためのインターフェース的なもの。
だから実装的なライブラリと一緒に使うということになるのですね。


で、結局出力するログの出力先はどこなんでしょう?

① ログ出力ライブラリを調べる

ライブラリなのでまずはMavenさんのpom.xmlをみてみました。

f:id:ponsuke_tarou:20170423192410p:plain
2. Maven 入門 (2) | TECHSCORE(テックスコア)

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.x.x</version>
    </dependency>

ぐぐったら実装的なログ出力ライブラリは「Log4j」のようでした。

f:id:ponsuke_tarou:20170423193159j:plain
SLF4J - Javaロギング実装・ライブラリの柔軟な切り替え・効率化を実現するロギング Facade

② 設定ファイルを探す

Log4j」の代表的な設定ファイル名は「log4j.properties」「log4j.xml」で、
このファイルがなかったらソースから追えば設定ファイルが見つかるようです。

設定ファイルを使用するには、org.apache.log4j.PropertyConfigurator クラスを使用します。クラスメソッドconfigure( ) メソッドで設定ファイルを読み込みます。
2. 設定ファイルの利用 | TECHSCORE(テックスコア)

③ 設定方法を知る

大きな構成は3つで「Loggerさん」「Appenderさん」「Layoutさん」

Logger は Log4J パッケージの中心クラスで、ロギングを行う部分をグループ化し、必要なグループのログだけを出力したり、カテゴリーに優先順位をつけることにより様々な出力方法を指定することができます。

Appender はログの出力先を指定するものです。Appender で設定できる出力先は、冒頭でも述べたように、ファイル、OutputStream、Java.io.Writer、リモート Log4J サーバ、リモート Unix Syslog デーモン、Windows NT イベントログなどです。

Layout はその名の通り、ログの出力フォーマットを指定するものです。単純なテキスト出力、ユーザが指定したレイアウト、HTML のテーブルレイアウトなどを指定することができます。
1. Log4J の基本 | TECHSCORE(テックスコア)

Logger
ここに「Loggerさんの名前」「ログレベル」「Appenderさんの名前」を設定します。

# RootLogger
log4j.rootLogger={ログレベル},{Appenderさんの名前}

# Logger
log4j.logger.{Loggerさんの名前}={ログ出力レベル|INHERITED},{Appenderさんの名前}

RootLoggerのログレベルを継承したいときは、「INHERITED」と書きます。

↓Loggerさん

This is the central class in the log4j package. Most logging operations, except configuration, are done through this class.
Logger (Apache Log4j 1.2.17 API)

Appender
カンマ区切りで複数指定できます。複数指定できるのでログを、コンソールとファイルに同時に出力することが可能です。
gungnir-odin.hatenablog.com


Appener
Appenderさんの「クラス」「オプション」「使うLayoutのクラス」の設定をします。

# 使用するAPPENDERの設定
log4j.appender.{Appenderさんの名前}={Appenderさんのクラス}
# オプションの設定
log4j.appender.{Appenderさんの名前}.{オプション}={オプションの設定値}
log4j.appender.{Appenderさんの名前}.layout={使うLayoutさんのクラス}

↓{Appenderさんのクラス}は「All Known Implementing Classes:」から選びます。

Interface Appender

All Known Implementing Classes:
AppenderSkeleton, AsyncAppender, ConsoleAppender, DailyRollingFileAppender, ExternallyRolledFileAppender, FileAppender, JDBCAppender, JMSAppender, LF5Appender, NTEventLogAppender, NullAppender, RewriteAppender, RollingFileAppender, SMTPAppender, SocketAppender, SocketHubAppender, SyslogAppender, TelnetAppender, WriterAppender

Implement this interface for your own strategies for outputting log statements.
Appender (Apache Log4j 1.2.17 API)

org.apache.log4j.net.SyslogAppender であることからも判るように、実際にはネットワーク系の Appender である。つまり、root でこれを使ったアプリを動かしても、ローカルマシンの syslog で取り扱って貰えるわけではない、ということを最初に言っておこう。
www.nurs.or.jp

log4j.category.com.fc2web.himtodo.test=DEBUG, TEST
log4j.appender.TEST=org.apache.log4j.DailyRollingFileAppender
log4j.appender.TEST.File=C:/logs/test.log
log4j.appender.TEST.DatePattern='.'yyyy-MM-dd
log4j.appender.TEST.layout=org.apache.log4j.PatternLayout
log4j.appender.TEST.layout.conversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS} [%p] - %m%n

↓{使うLayoutさんのクラス}は「Direct Known Subclasses:」から選ぶか実装します。

Class Layout
Direct Known Subclasses:
DateLayout, EnhancedPatternLayout, HTMLLayout, PatternLayout, SimpleLayout, XMLLayout

Extend this abstract class to create your own log layout format.
Layout (Apache Log4j 1.2.17 API)


他は見たら調べよう・・・覚えられないし・・・。

論理演算の応用系を勉強します。

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった過去問

f:id:ponsuke_tarou:20170406103907p:plainと等価な集合はどれか。ここで,∪は和集合,∩は積集合,f:id:ponsuke_tarou:20170406103916p:plainはXの補集合を表す。

f:id:ponsuke_tarou:20170406104008p:plain
分野別過去問題テクノロジ系 離散数学 No.14

応用編

否定論理和論理和否定して「NOR」です。

http://1.bp.blogspot.com/-Xo860eSgo0w/TsOGx1IJxQI/AAAAAAAAAQA/X5PZJSOczf0/s1600/nor.png

論理和否定して「NOR」。
A B OR NOR
1 1 1 0
1 0 1 0
0 1 1 0
0 0 0 1

f:id:ponsuke_tarou:20170406101202p:plain f:id:ponsuke_tarou:20170405225101p:plain

否定否定論理積で「NOR」。
A B AのNOT BのNOT NOR
1 1 0 0 0
1 0 0 1 0
0 1 1 0 0
0 0 1 1 1

f:id:ponsuke_tarou:20170406105623p:plainf:id:ponsuke_tarou:20170406105635p:plain = f:id:ponsuke_tarou:20170406101202p:plain
f:id:ponsuke_tarou:20170405235600p:plainf:id:ponsuke_tarou:20170406095437p:plain = f:id:ponsuke_tarou:20170406100834p:plain

否定論理積論理積否定して「NOR」です。

http://4.bp.blogspot.com/-XUfxpXzXkkc/TsC50mRNeDI/AAAAAAAAAOg/39nHLG0EXCY/s320/nand.png

論理積否定して「NAND」。
A B AND NAND
1 1 1 0
1 0 0 1
0 1 0 1
0 0 0 1 

f:id:ponsuke_tarou:20170406094158p:plain f:id:ponsuke_tarou:20170405230130p:plain

否定否定論理和で「NAND」。
A B AのNOT BのNOT NAND
1 1 0 0 0
1 0 0 1 1
0 1 1 0 1
0 0 1 1 1

f:id:ponsuke_tarou:20170406105623p:plainf:id:ponsuke_tarou:20170406105635p:plain = f:id:ponsuke_tarou:20170406094158p:plain
f:id:ponsuke_tarou:20170405235600p:plainf:id:ponsuke_tarou:20170406095437p:plain = f:id:ponsuke_tarou:20170406095611p:plain

排他的論理和論理和否定論理積論理積で「XOR」です。

https://upload.wikimedia.org/wikipedia/commons/thumb/0/01/XOR_ANSI.svg/100px-XOR_ANSI.svg.png

A B OR NAND XOR
1 1 1 0 0
1 0 1 1 1
0 1 1 1 1
0 0 0 1 0

f:id:ponsuke_tarou:20170406101555p:plainf:id:ponsuke_tarou:20170406094158p:plain = f:id:ponsuke_tarou:20170406101825p:plain
f:id:ponsuke_tarou:20170406102436p:plainf:id:ponsuke_tarou:20170405230130p:plain

否定論理積否定否定論理和です。

f:id:ponsuke_tarou:20170406101825p:plain = f:id:ponsuke_tarou:20170406101555p:plain ・ (f:id:ponsuke_tarou:20170406105623p:plainf:id:ponsuke_tarou:20170406105635p:plain)
f:id:ponsuke_tarou:20170406102436p:plainf:id:ponsuke_tarou:20170405230130p:plain = f:id:ponsuke_tarou:20170406102436p:plain ∩ (f:id:ponsuke_tarou:20170405235600p:plainf:id:ponsuke_tarou:20170406095437p:plain)

論理演算の基本系を勉強します。

勉強のきっかけになった過去問

論理式P,Qがいずれも真であるとき,論理式Rの真偽にかかわらず真になる式はどれか。ここで," ̄"は否定,"∨"は論理和,"∧"は論理積,"→"は含意("真→偽"となるときに限り偽となる演算)を表す。

f:id:ponsuke_tarou:20170405221436p:plain
分野別過去問題テクノロジ系 離散数学 No.39

基本編

論理和は「OR」です。

論理和どちらかが「1」なら「1」になります。
A B OR
1 1 1
1 0 1
0 1 1
0 0 0

論理積は「AND」です。

論理積どちらも「1」なら「1」になります。
A B AND
1 1 1
1 0 0
0 1 0
0 0 0

否定は「NOT」です。

否定は「1」なら「0」になります。
A NOT
1 0
0 1
  • 否定論理回路はこれです。
    • https://upload.wikimedia.org/wikipedia/commons/thumb/6/60/NOT_ANSI_Labelled.svg/120px-NOT_ANSI_Labelled.svg.png
  • ベン図はこうなります。
    • https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRofK8PymTDh-UPnDoiUYA0ZpxF3zQxQzpP-WKRMV2w1GEZmBZV
  • 否定f:id:ponsuke_tarou:20170405235600p:plainで表されます。
    • キーボードで何を打てば出るかわかりませんでした。「¬」も否定の記号です。「ひてい」とうって変換したら出ました。

含意は「AならばB」ということらしいです。

「ふくい」ではなく「がんい」とよみます。
kotobank.jp
言葉遊びのようで日本語が弱いためよくわかりません。
含意の命題「ならば」をあらわす論理記号 A⇒B [数学についてのwebノート]
他の方法で考えます。

英語でわかるわけがありません。

connotation、entailment、implication、implicature、intent、connote、imply、imply、stand for、signify、intend、meanなどなど

記号はわかりません。

「A→B」「A⇒B」「A⊃B」
※. 正しくは「A→B」と「A⇒B」は異なるらしいけれどそんなレベルにはいません。
論理包含 - Wikipedia

真理値表はよくわかりません。
A B 含意
1 1 1
1 0 0
0 1 1
0 0 1
  • 10進数にしても全くわかりません。
    • A = 12 = 1100
    • B = 5 = 0101
    • A ⊃ B = 1011 = 11
ベン図は不思議に感じます。

http://softwaredevelop.web.fc2.com/img/1/gani.png
解りにくければ、A≦B と覚えればOK!
softwaredevelop.web.fc2.com

NASって何?SANって何?

勉強のきっかけになった過去問

NAS(Network Attached Storage)の特徴と,特徴を生かした適用業務について述べたものはどれか。

  1. 各種OSからファイルを共有することができるので,データを交換する業務に適している。
  2. データの読み書きを高速に行うことができるようになるので,負荷が高い業務に適している。
  3. データベースのデータを扱うことが容易なので,簡易言語で情報検索を行う業務に適している。
  4. ファイルの改ざんを監視することが容易なので,個人情報を管理する業務に適している。

分野別過去問題テクノロジ系 システムの構成 No.28

NASはファイルサーバです。

簡易なコンピュータ本体にハードディスクやSSDなどの記憶装置と、ネットワークインターフェース、OS、管理用ソフトウェアなどを内蔵したファイルサーバ専用機で、記憶装置をネットワークに直に接続したように扱うことができる
e-words.jp

http://image.itmedia.co.jp/pcuser/articles/1402/13/tm_1402_nas1_01.jpg

NASが繋がるネットワークはTCP/IPネットワークです。

ネットワークに繋ぐのでみんなで使えます。

NASはパソコンに1対1で繋ぐのではありません。
ネットワークに対して繋ぐので、そのネットワークにつながっているパソコンで使えます。
アクセス権限を設定して決まった人々だけで使うことだってできます。

個別にファイル管理するよりもNASのほうが記憶領域の有効活用できます。

個々のパソコンに付いているハードディスクの空きスペースは、それぞれの人がどんな使い方をしているかによってまちまちです。

大量のデータを保存している人のハードディスクスペースが足りなくなる一方で、あまりデータを保存していない人のハードディスクスペースが余るというのは効率が良くありませんが、NAS であればそれぞれの人が必要に応じてスペースを利用できるので有効活用ができます。
navi.dropbox.jp

ネットワークに接続された各種OSでのデータ共有ができます。

SANはネットワークです。

複数のコンピュータとストレージ(外部記憶装置)の間を結ぶ高速なネットワーク。
e-words.jp

SANは2種類あります。

FC-SANはファイバチャネルを使用したネットワークです。

接続にFibre Channel(ファイバーチャネル)を使います。
ファイバーチャネルっていうのは・・・

コンピュータ本体と外部記憶装置を接続するのに利用されているデータ転送方式
e-words.jp

通信プロトコルは、FCP(Fibre Channel Protocol:ファイバーチャネルプロトコル)です。

IP-SANはIPを使用したネットワークです。

接続にEthernet(イーサネット)やTCP/IPネットワークなどの汎用的なネットワーク技術を使います。
イーサネットっていうのは・・・

有線のLAN (Local Area Network) で最も使用されている技術規格
イーサネット - Wikipedia

通信プロトコルは、iSCSIやiFCP・FCIP(Fibre Channel over IP)です。
LANなど汎用のコンピュータネットワークとは切り離されて使われます。
なので、LAN側の機器や回線に負荷をかけずに大規模なストレージを構築することができます。

おまけ

NAS電池は電力貯蔵システムです。

多分、ファイルサーバのNASとは関係ないと思います。

負極(マイナス極)にナトリウム(Na)、正極(プラス極)に硫黄(S)、両電極を隔てる電解質ファインセラミックスを用いて、硫黄とナトリウムイオンの化学反応で充放電を繰り返す蓄電池(二次電池)です。
www.ngk.co.jp

暗号方式の種類

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった過去問

暗号方式のうち,共通鍵暗号方式はどれか。

ア. AES    イ. ElGamal暗号    ウ. RSA    エ. 楕円曲線暗号
平成28年春期問37 共通鍵暗号方式はどれか|応用情報技術者試験.com

共通鍵暗号方式では、「送信側で暗号化する鍵」と「受信側で復号化する鍵」は同じ鍵を使います。

メリット : 公開鍵暗号方式にくらべて処理が高速である
デメリット : 複数人と通信する場合は鍵の受け渡しが煩雑になってしまう
https://jp.globalsign.com/knowledge/pki_keycryptosystem.html

アメリカで標準規格として採用されていたDES

共通鍵暗号方式を採用した暗号方式です。
鍵長は56ビットです。
e-words.jp

アメリカで標準規格として採用されているAES

  • 正式名称 : Advanced(高度な) Encryption(暗号化) Standard(標準)

暗号化と復号化に同じ鍵を使用する共通鍵暗号方式を採用した暗号方式です。
鍵長は 128 と 192 と 256ビットの3種類あります。

無線LANでの暗号化「WPA2」に採用されています。

ponsuke-tarou.hatenablog.com

公開鍵暗号方式では、「送信側で暗号化する鍵」は公開鍵・「受信側で復号化する鍵」は秘密鍵異なる鍵を使います。

メリット : 複数人とやり取りする際に鍵の管理が容易である
デメリット : 処理速度は遅くなってしまう
https://jp.globalsign.com/knowledge/pki_keycryptosystem.html

離散対数問題の困難さを利用したElGamal暗号

公開鍵暗号方式を採用した暗号方式です。
公開鍵や暗号文から秘密鍵が割り出されることを防ぐため、逆算が困難な演算を用いて鍵を造ります。
e-words.jp

大きい数の素因数分解の困難さを利用したRAS

公開鍵暗号方式を採用した暗号方式です。
公開鍵で暗号化、秘密鍵で復号を行うだけでなく、秘密鍵で暗号化、公開鍵で復号できます。
オイラーの定理を使っているそうですが、難しくてよくわかりません。
mathtrain.jp

楕円曲線上の離散対数問題の困難さを利用した楕円曲線暗号

楕円曲線を利用した暗号方式の総称です。
公開鍵暗号方式を採用していることが多いそうです。
暗号通貨の「ビットコイン」で採用されました。

RSA暗号と比べて、短い鍵長で同レベルの安全性が実現できます。

公開鍵暗号方式は暗号化・復号に要する計算量が多いため、RSAの鍵長は処理負荷の面でネックとなっています。代わりに、鍵長が少なくて済む楕円曲線暗号の人気が高まってきています。
平成31年春期問39 楕円曲線暗号の特徴はどれか|基本情報技術者試験.com

公開鍵暗号方式でありTLSにも利用されています。

楕円曲線によって定義された有限可群上の離散対数問題を解く際の計算量の多さを安全性の根拠とし、同じ強度を想定した場合、RSAより鍵長を短くできる利点があります。
平成30年秋期問37 楕円曲線暗号に関する記述|応用情報技術者試験.com

公開鍵暗号方式に関する記述として,適切なものはどれか。

答. RSAや楕(だ)円曲線暗号などの暗号方式がある。
平成20年秋期問71 公開鍵暗号方式|応用情報技術者試験.com

共通鍵暗号方式と公開鍵暗号方式を組み合わせたハイブリッド暗号方式

送信側 : 平文を暗号化した共通鍵暗号方式の共通鍵公開鍵暗号方式公開鍵で暗号化します。
受信側 : 公開暗号方式の秘密鍵で復号化して取得した共通鍵暗号方式の共通鍵で平文を復号化します。
インターネットで広く使われている通信方式(プロトコル)であるSSL(Secure Sockets Layer)で採用されています。

公開鍵暗号方式の「鍵の管理・配布が容易」という長所と,共通鍵暗号方式の「処理が高速」という長所の両方を生かすように,両方式を組み合わせたハイブリッド暗号方式が考えられました。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060620/241303/zu1.gif

itpro.nikkeibp.co.jp

クラスタリング方式によるシステムの構成

勉強のきっかけになった過去問

仮想サーバの冗長化設計における可用性評価に関する記述のうち,クラスタソフトウェアを用いた評価として,適切なものはどれか。

  1. OS,アプリケーション及びハードウェアの障害に対応し,障害時に障害が発生していないサーバに自動的に処理を引き継ぐので,切替え時間の短い安定した運用が求められる場合に有効である。
  2. 仮想サーバを停止させずに物理サーバ間で仮想サーバを移動することが可能となるので,メンテナンスなど業務移行の際も含めて業務の停止が全く許容できない場合に有効である。
  3. 物理サーバに備わっている機能を利用するので,ハードウェアの障害にだけ対応し,障害時に業務停止が許容される場合に有効である。
  4. 物理サーバのリソース(CPU,メモリなど)をブロック単位に物理的に分割し,あるブロックの障害が他のブロックに影響しないようにするので,障害時に業務の停止が許容できない場合に有効である。

分野別過去問題テクノロジ系 システムの構成 No.2

クラスタリング方式の概要

複数のサーバでサービスを稼働させます。利用者にはあたかも1つサーバを利用しているかのごとく。
この方式では更に2種類の方式があります。

アクティブ・スタンバイクラスタ

スポーツの大会で選手と補欠がいて、選手が怪我しても補欠がいるからなんとかなるイメージです。

稼働(アクティブ)しているサーバと停止(スタンバイ)しているサーバを使います。

停止しているサーバはサボっているのではなく稼働しているサーバを監視しています。
稼働しているサーバで故障などので停止したら、停止しているサーバが稼働してサービスを引継ぎます。

稼働するサーバを切り替えることをフェールオーバーといいます。

故障は直してまた使えるようにします。
使えるようになったらまた稼働して、稼働していたサーバがまた停止します。
これで、故障前の状態に戻ります。

停止したサーバがまた稼働して元の状態に戻ることをフェールバックといいます。

注意ポイント : サーバを切換える時に蓄積データを移行する方法が必要であること。

データを蓄積しているメールサーバやファイルサーバ、データベースサーバでこの方式を使う時は注意する必要があります。

負荷分散クラスタ

会社で1つの作業を複数人で作業して、1人だけ残業し内容にしたり誰かがインフルエンザで休んでも作業が止まらないようにするイメージです。

複数のサーバを一緒に稼働させて処理を分散させます。

ロードバランサなどで処理を振分けていきます。

問題が発生したサーバには処理を振分けないようにします。

停止したサーバに処理を振分けてもできないものはできません。
特定のサーバのスペックが残念な場合は、処理が滞らないようにそのサーバに振分ける処理を少なくしたりもします。

注意ポイント : データをサーバ間で共有する方法が必要であること。

使っているサーバみんなで違うデータを見ていたら悲しい状態になります。

注意ポイント : 処理を振り分ける装置にはサーバを監視する機能も必要であること。

どのサーバは問題なくて、どのサーバには問題が発生しているかを監視して振分けを決められないといけません。

クラスタリング方式は、停止時間を最小限にしたいサービスに向いています。

IPアドレスとサブネットマスク

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった過去問

次のIPアドレスサブネットマスクをもつPCがある。このPCのネットワークアドレスとして,適切なものはどれか。

 IPアドレス: 10.170.70.19
 サブネットマスク:255.255.255.240

ア. 10.170.70.0  イ. 10.170.70.16  ウ. 10.170.70.31  エ. 10.170.70.255
平成31年春期問34 ネットワークアドレス|応用情報技術者試験.com

サブネットマスク(subnet mask)というものがあります

サブネットマスクとは、ネットワーク部がどこからどこまでかを定義する数値です。

IPアドレスは、「ネットワーク部」と「ホスト部」からできています。
その「ネットワーク部」がどこからどこまでかを定義する32ビットの数値です。

そもそもサブネットというのは、小さく分割したネットワークです。

大きなネットワークを複数の小さなネットワークに分割して管理する際の管理単位となる小さなネットワーク。
サブネットとは - IT用語辞典 e-Words

例えば、「Cクラスを使うにはホストが多すぎる」が「Bクラスを使うにはホストが少なすぎる」
こんな場合「Bクラスを小さなネットワークに分割」してその1つを使えばちょうどいい。
この小さなネットワークがサブネットです。

サブネットにするから「ネットワーク部」がクラスとは変わります。

上記の例で考えると「Bクラスを小さなネットワークに分割」したので「Bクラスのネットワーク部」とは違う「ネットワーク部」になります。
そうなると、どこからどこまでが「ネットワーク部」かわからなくなります。

そこで、

どこからどこまでが「ネットワーク部」かわかるようにするのにサブネットマスクがある

のです。

Aクラスのサブネットマスクは2進数で、
11111111 00000000 00000000 00000000

Bクラスのサブネットマスクは2進数で、
11111111 11111111 00000000 00000000

Cクラスのサブネットマスクは2進数で、
11111111 11111111 11111111 00000000

サブネットマスクの「ネットワーク部」には見方があります。

サブネットマスクを2進数でみると先頭から途中まで「1」が連続しています。

「1」が連続している範囲が、「ネットワーク部」です。
「0」が連続している範囲が、「ホスト部」です。

「勉強のきっかけになった過去問」で考えます。
サブネットマスクは、「255.255.255.240」です。
これを2進数にすると
11111111 11111111 11111111 11110000
です。
ピンクの部分がCクラスより小さくネットワークを分割しています。
そのネットワークに繋がるIPアドレス「10.170.70.19」のホストがあります。
この「ネットワーク部」を見てみます。

① ホストのIPアドレスを2進数にします。

00001010 10101010 01000110 00010011

サブネットマスクと見比べます。

00001010 10101010 01000110 00010011
11111111 11111111 11111111 11110000

③ 2つをAND演算(論理積)すると「ネットワーク部」になります。

結果は、00001010 10101010 01000110 00010000 です。
「ネットワーク部」は、00001010 10101010 01000110 00010000 です。

④ 2つをOR演算(論理和)すると「ホスト部」になります。

結果は、11111111 11111111 11111111 11110011 です。
ホスト部」は、11111111 11111111 11111111 11110011 です。

⑤ 10進数に戻します。

「ネットワーク部」は、10.170.70.16です。
ホスト部」は、255.255.255.243です。

という感じでサブネットマスクにおける「ネットワーク部」「ホスト部」を見分けます。

対象 10進数 2進数
サブネットマスク 255.255.255.240 11111111 11111111 11111111 11110000
IPアドレス 10.170.70.19 00001010 10101010 01000110 00010011
ネットワーク部(AND演算) 10.170.70.16 00001010 10101010 01000110 00010000
ホスト部(OR演算) 255.255.255.243 11111111 11111111 11111111 11110011

サブネットマスクの10進数表記

サブネットマスクは2種類の10進数表記があります。

CIDR表記

例えば、255.255.252.0/14

フォーマット:xxx.xxx.xxx.xxx/xx
「/」の前にある「xxx.xxx.xxx.xxx」にはサブネットマスクの10進数を記載します。
「/」の後ろにある「xx」にはネットワーク部のビット数を記載します。

IPアドレスサブネットマスクを併記する表記

例えば、255.255.255.1/255.255.252.0

フォーマット : xxx.xxx.xxx.xxx/xxx.xxx.xxx.xxx
「/」の前にある「xxx.xxx.xxx.xxx」にはホストに割当てられたIPアドレスの10進数を記載します。
「/」の後ろにある「xxx.xxx.xxx.xxx」にはサブネットマスクの10進数を記載します。