Подтвердить что ты не робот

Могут ли множественные бродячие виртуальные машины взаимодействовать с именем хоста VM?

Я управляю несколькими виртуальными машинами с помощью Vagrant. Сети настроены как частные, установлены IP-адреса и назначены имена хостов. Как показано в нижеприведенном Vagrantfile.

VM могут взаимодействовать друг с другом через IP-адрес, но я хотел бы знать, как разрешить виртуальным машинам связываться с использованием назначенного имени хоста. То есть Как сделать ping comtest2 работать с comtest1?

Vagrantfile:

Vagrant.configure("2") do |config|

  config.vm.define "comtest1" do |comtest1|
    comtest1.vm.box = "precise32"
    comtest1.vm.hostname = "comtest1"
    comtest1.vm.network "private_network", ip: "192.168.10.21"
  end

  config.vm.define "comtest2" do |comtest2|
    comtest2.vm.box = "precise32"
    comtest2.vm.hostname = "comtest2"
    comtest2.vm.network "private_network", ip: "192.168.10.22"
  end

end
4b9b3361

Ответ 2

Вы можете использовать Zeroconf. Он передает имя хоста в сети и делает его доступным для других хостов в локальной сети. Таким образом, вы можете получить доступ к вашим хостам, используя test1.local, test2.local и т.д.

Просто установите avahi-daemon и libnss-mdns!

Пример

Vagrantfile:

Vagrant.configure("2") do |config|

  config.vm.box = "ubuntu/bionic64"

  config.vm.define "vm1" do |machine|
    machine.vm.hostname = "vm1"
    machine.vm.network "private_network", type: "dhcp"
  end

  config.vm.define "vm2" do |machine|
    machine.vm.hostname = "vm2"
    machine.vm.network "private_network", type: "dhcp"
  end

  # allow guests to reach each other by hostname
  config.vm.provision "allow_guest_host_resolution",
    type: "shell",
    inline: 'apt-get install -y avahi-daemon libnss-mdns'

end

Test

$ vagrant up
...
$ vagrant ssh vm1 -- ping -c 1 vm2.local
PING vm2.local (172.28.128.8) 56(84) bytes of data.
64 bytes from 172.28.128.8 (172.28.128.8): icmp_seq=1 ttl=64 time=0.333 ms

$ vagrant ssh vm2 -- ping -c 1 vm1.local
PING vm1.local (172.28.128.7) 56(84) bytes of data.
64 bytes from 172.28.128.7 (172.28.128.7): icmp_seq=1 ttl=64 time=0.254 ms

Ответ 3

Это не самое элегантное решение в мире, но это очень просто, как насчет чего-то вроде:

Vagrant.configure("2") do |config|

  config.vm.define "comtest1" do |comtest1|
    comtest1.vm.box = "precise32"
    comtest1.vm.hostname = "comtest1"
    comtest1.vm.network "private_network", ip: "192.168.10.21"
    comtest1.vm.provision "shell", inline: <<-SHELL
       sed -i '$ a 192.168.10.22 comtest2' /etc/hosts           
    SHELL
  end

  config.vm.define "comtest2" do |comtest2|
    comtest2.vm.box = "precise32"
    comtest2.vm.hostname = "comtest2"
    comtest2.vm.network "private_network", ip: "192.168.10.22"
  end

end

Ответ 4

Отъезд landrush на Github. Он настроит DNS для вашей бродяжной частной сети.

Ответ 5

Если хост разрешает DNS правильно, вы можете настроить Virtualbox на использование хоста в качестве распознавателя DNS.

config.vm.provider :virtualbox do |vb|
  vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end

см. https://serverfault.com/a/506206/250071


Мы используем локальную задачу Ansible для автоматического добавления предоставленного поля в файл host /etc/hosts. Это немного неловко, но очень крепко.

- setup:
  gather_subset: [network]
- name: Add host mapping to local /etc/hosts
  delegate_to: 127.0.0.1
  lineinfile: dest=/etc/hosts regexp=".+{{ vm.hostname }}$" line="{{ ansible_all_ipv4_addresses|sort|last }} {{ vm.hostname }}"