Vagrant supports three basic types of networking:
- Port Forwarding / NAT
- Private Network
- Public Network
By default, no networking is enabled (outside of Vagrant’s internal management mechanism), so one of these must be configured in the Vagrantfile to make the VM accessible by network.
Port Forwarding / NAT
The most basic network configuration forwards traffic from the host machine to the guest VM only on specific ports. By default only TCP is forwarded; config looks like this:
Vagrant.configure("2") do |config| config.vm.network "forwarded_port", guest: 80, host: 8080 end
Vagrant will also detect configuration conflicts where the same port is in use multiple times, and will prevent deployment of such a config.
Private networks provide host only access to the guest VM; that is the networking is not bridged, and will not be accessible outside of the host VM.
Config looks like this when assigning an address via DHCP:
Vagrant.configure("2") do |config| config.vm.network "private_network", type: "dhcp" end
Public networks provide access to the guest VM which is available externally to the host system. Depending on provider, this is achieved through bridging, making the guest VM as public as the host machine is.
By default, DHCP is used for assigning addresses; config looks like this:
Vagrant.configure("2") do |config| config.vm.network "public_network" end
The ‘ip’ config setting can be used to assign specific IPs for both private and public networks:
config.vm.network "private_network", ip: "10.0.0.100"
Note that there appears to be a bug in Vagrant 1.9.1 that prevents static IPs being applied properly in some RHEL based images. A workaround is to force the interface to come up by adding an additional provisioning line in the Vargrantfile:
config.vm.provision "shell", inline: "ifup eth1", run: "always
Vagrant provides many more options for networking, with some features varying by provider.
Networking docs can be found here for more detail.