How to specify network when provisioning in vagrant - vagrant

I have multiple networks specified in my vagrantfile and only one of them are accessible from outside. When the vagrant starts provisioning, sometimes it chooses the wrong network (IP) to connect to the VM and it fails. Is it possible to specify which network should vagrant choose when provisioning? If not, I would like to know how vagrant chooses which IP to use when provisioning.

Related

How to see the interfaces set up with virtualbox when using vagrant

I've set up a default vagrant setup, and I'd like to be able to find out what i can from the host about the guest.
For virtualbox setups, what happens is there are some pseudo interfaces that you can use to route and firewall the guest outgoing connections. But, when using vagrant, i noticed the availability of a private space eth0 which is NATted through the host interface. Searching using iproute2 and looking through the procfs does not show any interface at all.
A while back I found the vbox driver bypasses all the usual methods to inspect interfaces from the host machine. Is there a way to find out more about the interfaces on the guest from the host, and which chain should i target to firewall traffic from this?
Strangely just to answer: to find the existence of the ip address in procfs, you'll have to check the /proc/net/fib_trie. Unfortunately, anecdotally, this doesn't work on some procfs.

Vagrant issue - able to communicate between private networks

I've run into an issue while using Vagrant.
I have to boxes and I've configured them to be part of different virtualbox internal networks (relevant config below):
Dataplane port
vsrx1.vm.network 'private_network', auto_config: false, nic_type: '82540EM', virtualbox__intnet: **"seg1"**
end
Dataplane port
vsrx3.vm.network 'private_network', auto_config: false, nic_type: '82540EM', virtualbox__intnet: **"seg2"**
end
However, the hosts are able to communicate with one another (they have IPs from the same subnet), although they belong to different private networks.
Does anyone know why?
Thanks,
Cristian
From the vagrant book
NAT Requirement As the First Network Interface
With VirtualBox,
Vagrant requires the first network device attached to the virtual
machine to be a NAT device. The NAT device is used for port
forwarding, which is how Vagrant gets SSH access to the virtual
machine.
Therefore, any host-only or bridged networks will be added as
additional network devices and exposed to the virtual machine as
“eth1,” “eth2,” and so on. “eth0” or “en0” is generally always the NAT
device.
It isn’t currently possible to override this requirement, but it is
important to understand that it is in place.
this first network interface is not set from Vagrantfile, if you ssh into the VM and check the network of the VM, you will see this first network interface used by the host to communicate with the VM (so you can ssh)

How to setup Vagrant DNS servers in MacOS without change the DNS in the network setup

I have a vagrant machine and this vm runs a DNS server to resolve the internal domains of each micro-service instance running in a docker container inside the vagrant. Actually, after run vagrant up, I need to put the vagrant vm IP address in my network configuration to my computer resolve the development domain, so I can access the application, but the problem is that I work remotelly and frequently I need to connect in public hotspots that uses network authentication and if I have the vagrant DNS in my interface's configuration I could not connect to the hotspot without removing the vagrant IP, but I need to put it back after some minutes later to start working.
So, the question is, there is a way to configure an virtual interface or a VPN interface that points to the vagrant but does not block my network as I describe above ?
When I was using linux, I just put the vagrant IP in the resolv.conf and I had no headaches, but as MacOS does not have the resolv.conf like linux, I could not find a easy way to deal with theses problems.

Unable to start vagrant due to host networking issues

I was given a large Vagrantfile as part of an inherited project and on doing vagrant up, I get the following error:
The specified host network collides with a non-hostonly network!
This will cause your specified IP to be inaccessible. Please change
the IP or name of your host only network so that it no longer matches that of
a bridged or non-hostonly network.
I have made sure no other VMs are running by checking output of vagrant global-status.
I am not on VPN and
I have restarted my machine (Mac laptop).
Yet the error persists.
What to do?
I cannot share the large Vagrantfile but still need to get past this error.
My machine is connected to the Internet using Wi-Fi only, no cable connection.
I am also not very familiar with network-debugging commands.
You need to change the IP you assigned to the VM. If the IP collapses with a network range you should change it.
For example, you might be safe using an IP from range 192.0.2.0/24
If the 192.168.0.0/16 range does not work, you can completely switch to one of the following range
10.0.0.0 – 10.255.255.255
172.16.0.0 – 172.31.255.255
Choosing one or the other will depend of the network configuration of your office.

vagrant customize VM after provisioning

is it possible to customize the VM after it has been provisioned? I know you can execute things like:
config.vm.provider "virtualbox" do |v|
v.customize "post-boot", ["controlvm", :id, "nic1", "hostonly", "vboxnet0"]
end
But that is executed before provisioning the machine. What I want to do is:
Create the VM. The VM is actually a virtual appliance.
Provision the VM.
Reconfigure eth0 to be of type host-net instead of NAT.
Is this possible?
Thanks
From the vagrant book
With VirtualBox, Vagrant requires the first network device attached to
the virtual machine to be a NAT device. The NAT device is used for
port forwarding, which is how Vagrant gets SSH access to the virtual
machine.
Therefore, any host-only or bridged networks will be added as
additional network devices and exposed to the virtual machine as
“eth1,” “eth2,” and so on. “eth0” or “en0” is generally always the NAT
device.
It isn’t currently possible to override this requirement, but it is
important to understand that it is in place.
If you need to change, you'll need to change in virtual box directly

Resources