Ответ 1
Обманите разрешение dns с помощью https://github.com/adrienthebo/vagrant-hosts?
Я управляю несколькими виртуальными машинами с помощью 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
Обманите разрешение dns с помощью https://github.com/adrienthebo/vagrant-hosts?
Вы можете использовать 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
$ 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
Это не самое элегантное решение в мире, но это очень просто, как насчет чего-то вроде:
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
Отъезд landrush на Github. Он настроит DNS для вашей бродяжной частной сети.
Если хост разрешает 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 }}"