※当サイトの記事には、広告・プロモーションが含まれます。

VirtualBoxで作成したVM同士の疎通は内部ネットワークを作成しネットワーク設定を忘れずに

nazology.kusuguru.co.jp

これまで、一定数の処理を必要とする計算には、ある一定のメモリが必要と考えられてきました。

新理論によりコンピューター内部の「時間」と「空間」の常識が崩れ去る - ナゾロジー

そして処理量に対する必要メモリの量は、絶対に減らせないラインが存在するとされていました。その最たる例が「実際にXステップかかる計算は、X/logXのメモリで実行できる」というものです。

新理論によりコンピューター内部の「時間」と「空間」の常識が崩れ去る - ナゾロジー

ところが、アメリカのMIT(マサチューセッツ工科大学)で行われた研究によって、その常識を根底から覆しかねない衝撃的な成果が報告されています。

新理論によりコンピューター内部の「時間」と「空間」の常識が崩れ去る - ナゾロジー

⇧ amazing...

VirtualBoxで作成したVM同士の疎通は内部ネットワークを作成しネットワーク設定を忘れずに

ネットワーク何にも分からないマンなので、四苦八苦していたところ、職場の方に連携いただいたところ一瞬で解決できたので備忘録として。

とりあえず、

zenn.dev

⇧ 上記サイト様の環境構築の話になります。

で、自分の読解力が無かったため、「Vagrant」を「ホストOS」側にインストールしてしまっていたので、「VirtualBox」の「仮想マシンVM:Virtual Machine)」の「ネットワークアダプター」が3つ必要になりましたと。

自分の環境は、

No ネットワークアダプタ 内容
1 NAT インターネットと疎通できるようにする
2 ホストオンリーアダプター ホストOSとゲストOSの疎通できるようにする
3 内部ネットワーク ゲストOSとゲストOSの疎通できるようにする

⇧ と言う感じなのだが、おそらく、「Vagrant」についても「仮想マシンVM:Virtual Machine)」にインストールしておけば、「ホストオンリーアダプター」は不要になる認識。

VirtualBox」の公式のドキュメントによると、

www.virtualbox.org

⇧ 全部で、5つ用意されているっぽい。

で、「Vagrant」を「ホストOS」側(今回は、Windows環境)にインストールしてる場合の「Vagrantfile」は以下のような感じになった。

■Vagrantfile

#
# Common settings for all virtual machines
#
Vagrant.configure("2") do |config|
  config.vm.provider "virtualbox" do |vb|
#    vb.memory = "4096"
    vb.memory = "1024"
#    vb.cpus = 1
    vb.cpus = 2
    vb.gui = true
    vb.customize [
      "modifyvm", :id,
      "--ioapic", "on",
      "--graphicscontroller", "vmsvga",
      "--nicpromisc2", "allow-all"
    ]
  end

##
## CentOS 8 / marutamachi
##
#  config.vm.define :marutamachi do |marutamachi|
#    marutamachi.vm.box = "centos/8"
#    marutamachi.vm.network "private_network", mac: "00006c000101", ip: "192.168.111.101", virtualbox__intnet: true
#    marutamachi.vm.hostname = "marutamachi.example.jp"
#    marutamachi.vm.provider "virtualbox" do |vb|
#      vb.name = "marutamachi"
#    end
#    marutamachi.vm.provision "shell", inline: $remove_vmtools
#    marutamachi.vm.provision "shell", inline: $common_provisioning
#    marutamachi.vm.provision "shell", inline: $centos8_provisioning
#  end
#
##
## CentOS 7 / takeyamachi
##
#  config.vm.define :takeyamachi do |takeyamachi|
#    takeyamachi.vm.box = "centos/7"
#    takeyamachi.vm.network "private_network", mac: "00006c000102", ip: "192.168.111.102", virtualbox__intnet: true
#    takeyamachi.vm.hostname = "takeyamachi.example.jp"
#    takeyamachi.vm.provider "virtualbox" do |vb|
#      vb.name = "takeyamachi"
#    end
#    takeyamachi.vm.provision "shell", inline: $remove_vmtools_yum
#    takeyamachi.vm.provision "shell", inline: $common_provisioning
#    takeyamachi.vm.provision "shell", inline: $centos7_provisioning
#  end

#
# Ubuntu 20.04 LTS / ebisugawa
#
  config.vm.define :ebisugawa do |ebisugawa|
    ebisugawa.vm.box = "ubuntu/focal64"
#    ebisugawa.vm.network "private_network", mac: "00006c000103", ip: "192.168.111.103", virtualbox__intnet: true
    # ホストオンリーアダプター
    ebisugawa.vm.network "private_network", ip: "192.168.56.103"
    # 内部ネットワーク
    ebisugawa.vm.network "private_network", ip: "192.168.111.103", virtualbox__intnet: true
    ebisugawa.vm.hostname = "ebisugawa.example.jp"
    ebisugawa.vm.provider "virtualbox" do |vb|
      vb.name = "ebisugawa"
    end
    ebisugawa.vm.provision "shell", inline: $remove_vmtools_apt
    ebisugawa.vm.provision "shell", inline: $common_provisioning
    ebisugawa.vm.provision "shell", inline: $ubuntu_provisioning
  end

#
# Ubuntu 18.04 LTS / nijyo
#
  config.vm.define :nijyo do |nijyo|
    nijyo.vm.box = "ubuntu/bionic64"
#    nijyo.vm.network "private_network", mac: "00006c000104", ip: "192.168.111.104", virtualbox__intnet: true
    # ホストオンリーアダプター
    nijyo.vm.network "private_network", ip: "192.168.56.104"
    # 内部ネットワーク
    nijyo.vm.network "private_network", ip: "192.168.111.104", virtualbox__intnet: true
    nijyo.vm.hostname = "nijyo.example.jp"
    nijyo.vm.provider "virtualbox" do |vb|
      vb.name = "nijyo"
    end
    nijyo.vm.provision "shell", inline: $remove_vmtools_apt
    nijyo.vm.provision "shell", inline: $common_provisioning
    nijyo.vm.provision "shell", inline: $ubuntu_provisioning
  end

##
## Debian 10 / oshikoji
##
#  config.vm.define :oshikoji do |oshikoji|
#    oshikoji.vm.box = "debian/buster64"
#    oshikoji.vm.network "private_network", mac: "00006c000105", ip: "192.168.111.105", virtualbox__intnet: true
#    oshikoji.vm.hostname = "oshikoji.example.jp"
#    oshikoji.vm.provider "virtualbox" do |vb|
#      vb.name = "oshikoji"
#    end
#    oshikoji.vm.provision "shell", inline: $common_provisioning
#    oshikoji.vm.provision "shell", inline: $set_vagrant_password
#    oshikoji.vm.provision "shell", inline: $debian_provisioning
#  end
#
##
## AlmaLinux 8 / oike
##
#  config.vm.define :oike do |oike|
#    oike.vm.box = "almalinux/8"
#    oike.vm.network "private_network", mac: "00006c000106", ip: "192.168.111.106", virtualbox__intnet: true
#    oike.vm.hostname = "oike.example.jp"
#    oike.vm.provider "virtualbox" do |vb|
#      vb.name = "oike"
#    end
#    oike.vm.provision "shell", inline: $common_provisioning
#    oike.vm.provision "shell", inline: $centos8_provisioning
#  end

end

#
# Common provisioning for all virtual machines
#
$common_provisioning = <<-'SCRIPT'
timedatectl set-timezone Asia/Tokyo
sed -e s/^'PasswordAuthentication no'/'PasswordAuthentication yes'/ /etc/ssh/sshd_config > /tmp/sshd_config
mv -f /tmp/sshd_config /etc/ssh/
chmod 0600 /etc/ssh/sshd_config
systemctl restart sshd.service
SCRIPT

#
# Remove open-vm-tools
#
$remove_vmtools = <<-'SCRIPT'
dnf -y remove open-vm-tools
SCRIPT

#
# Remove open-vm-tools (yum command)
#
$remove_vmtools_yum = <<-'SCRIPT'
yum -y remove open-vm-tools
SCRIPT

#
# Remove open-vm-tools (apt command)
#
$remove_vmtools_apt = <<-'SCRIPT'
apt -y remove open-vm-tools
SCRIPT

#
# Set the password for the account vagrant
#
$set_vagrant_password = <<-'SCRIPT'
echo 'vagrant' > pass.txt
echo 'vagrant' >> pass.txt
passwd vagrant < pass.txt
SCRIPT

##
## Provisioning for CentOS8
##
#$centos8_provisioning = <<-'SCRIPT'
#dnf -y update
#reboot
#SCRIPT
#
##
## Provisioning for CentOS7
##
#$centos7_provisioning = <<-'SCRIPT'
#yum -y update
#reboot
#SCRIPT

#
# Provisioning for Ubuntu
#
$ubuntu_provisioning = <<-'SCRIPT'
apt -y update
apt -y dist-upgrade
reboot
SCRIPT

##
## Provisioning for Debian
##
#$debian_provisioning = <<-'SCRIPT'
#apt -y update
#apt -y upgrade
#reboot
#SCRIPT    

⇧ と言った感じで、ホスト側のマシンのスペックの問題もあり、参考サイト様のように潤沢なメモリを利用できないので、「仮想マシンVM:Virtual Machine)」は2台に制限してます。

で、これとは別に「Ansible」をインストールする用の「仮想マシンVM:Virtual Machine)」を1台用意するので、計3台の「仮想マシンVM:Virtual Machine)」を扱うことになりますと。

つまりは、

⇧ こういう形になりますと。

「Ctrl」の方は、「Ubuntu 20.04 LTS Desktop」なので、GUIでネットワークの設定ができるわけですと。

ちなみに、「ホストオンリーアダプター」の「IPアドレス」の範囲について、

www.virtualbox.org

On Linux, macOS and Solaris Oracle VM VirtualBox will only allow IP addresses in 192.168.56.0/21 range to be assigned to host-only adapters. For IPv6 only link-local addresses are allowed. If other ranges are desired, they can be enabled by creating /etc/vbox/networks.conf and specifying allowed ranges there. For example, to allow 10.0.0.0/8 and 192.168.0.0/16 IPv4 ranges as well as 2001::/64 range put the following lines into /etc/vbox/networks.conf:

      * 10.0.0.0/8 192.168.0.0/16
      * 2001::/64
      

Lines starting with the hash # are ignored. The following example allows any addresses, effectively disabling range control:

      * 0.0.0.0/0 ::/0
      

If the file exists, but no ranges are specified in it, no addresses will be assigned to host-only adapters. The following example effectively disables all ranges:

      # No addresses are allowed for host-only adapters

https://www.virtualbox.org/manual/ch06.html

⇧「Windows」以外だと、「192.168.56.0/21」という決まりが設けられたみたいなのだが、「Windows」利用している場合は、「10.0.0.0/8」の範囲が適用されるっぽいので、「Vagrantfile」で「10.0.0.0/8」の範囲で指定すれば良かったのかもしれない...

何やら、

qiita.com

⇧ 6.1から適用されたらしい。

ちなみに、「ホスト」として「macOS」を利用している場合、

⇧「Host-Only Adapter」は「非推奨」になっているらしい。

「ホスト」として「Windows」を利用している場合は、

⇧ 非推奨となってはいない。

そして、公式の「VirtualBox」のドキュメントを改めて確認するも、

⇧ 数が噛み合わない...

ネットワークアダプター」と「Networking Mode」の関係が分からない...

話が脱線しましたが、「Vagrant」で作成した「仮想マシンVM:Virtual Machine)」が「Ansible」の「Playbook」を実行する対象になるので、パスワードでSSH接続できるようにしておく必要があるのですが、「Vagrant」特有の問題なのか「Ubuntu 20.04」以降は、「/etc/ssh/sshd_conf」の設定を変更する箇所が多くなっているので要注意。

■パスワード認証の有効化に関連する部分抜粋 /etc/ssh/sshd_config

PermitRootLogin yes
PasswordAuthentication yes
ChallengeResponseAuthentication yes
    

⇧ このあたりを設定してないと、『Permission denied(publickey)』とかのエラーが出てくるっぽい。

つまり、「公開鍵認証」で認証しようとしてしまうわけだ。

ネットの情報だと、「PasswordAuthentication yes」で「パスワード認証」が有効になるって情報が多いのだが、「Vagrant」の「Ubuntu 20.04 LTS」だからなのか、「PasswordAuthentication yes」のみだと「パスワード認証」が有効にならなかったのよね...

「sshpass」を利用したいので、「パスワード認証」を許可したかったという話。

とりあえず、ネットワークなんも分からん...

毎度モヤモヤ感が半端ない…

今回はこのへんで。