Chapter 14. Understanding virtual networking
The connection of virtual machines to other devices and locations on a network has to be facilitated by the host hardware.
Virtual networking uses the concept of a virtual network switch. A virtual network switch is a software construct that operates on a host machine. Virtual machines (VMs) connect to the network through the virtual network switch.
The following figure shows a virtual network switch connecting two virtual machines to the network:
From the perspective of a guest operating system, a virtual network connection is the same as a physical network connection. Host machine servers view virtual network switches as network interfaces. When the libvirtd daemon (libvirtd) is first installed and started, the default network interface that represents the virtual network switch is virbr0.
This interface can be viewed with the
ip command like any other network interface.
$ ip addr show virbr0 3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 1b:c4:94:cf:fd:17 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
By default, all VMs on a single host are connected to the same
libvirt virtual network, named default. VMs on this network can make the following connections:
With each other and with the virtualization host
Both inbound and outbound traffic is possible, but is affected by the firewalls in the guest operating system’s network stack and by the
libvirtnetwork filtering rules attached to the guest interface.
With other hosts on the network beyond the virtualization host
Only outbound traffic is possible and is affected by the Network Address Translation (NAT) rules, as well as the host system’s firewall.
For basic outbound-only network access from virtual machines, no additional network setup is usually needed, because the default network is installed along with the
libvirt package, and is automatically started when the
libvirtd service is started.
If more advanced functionality is needed, additional networks can be created and configured using
virsh, and the VM’s XML configuration file can be edited to use one of these new networks.
For more information on the default configuration, see Section 14.7, “Virtual networking default configuration”.
If needed, guest interfaces can instead be set to one of the following modes:
The virtual network uses network address translation (NAT) to assign IP address ranges to virtual networks and
dnsmasq to automatically assign IP addresses to virtual machine network interface cards (NICs) and to connect to a domain name service (DNS).
The following features are available for virtual networking:
14.1. Virtual networking in routed mode
When using Routed mode, the virtual switch connects to the physical LAN connected to the host machine, passing traffic back and forth without the use of NAT. The virtual switch can examine all traffic and use the information contained within the network packets to make routing decisions. When using this mode, all of the virtual machines (VMs) are in their own subnet, routed through a virtual switch. This enables incoming connections, but requires extra routing-table entries for systems on the external network. Routed mode operates at Layer 3 of the OSI networking model.
The common topologies in which routed mode is used include DMZ and virtual server hosting.
You can create a network where one or more nodes are placed in a controlled sub-network for security reasons. Such a sub-network is known as a demilitarized zone (DMZ).
Host machines in a DMZ typically provide services to WAN (external) host machines as well as LAN (internal) host machines. Since this requires them to be accessible from multiple locations, and considering that these locations are controlled and operated in different ways based on their security and trust level, routed mode is the best configuration for this environment.
- Virtual server hosting
A virtual server hosting provider may have several host machines, each with two physical network connections. One interface is used for management and accounting, the other for the VMs to connect through. Each VM has its own public IP address, but the host machines use private IP addresses so that only internal administrators can manage the VMs.
14.2. Virtual networking in bridged mode
When using Bridged mode, virtual machines (VMs) are connected to a bridge device that is also connected directly to a physical ethernet device connected to the local ethernet. As a result, the VM is directly visible on the physical network. This enables incoming connections, but does not require any extra routing-table entries.
A VM in bridged mode has to connect to an existing Linux bridge on the host, and therefore requires a network bridge to be created on the host interface. In contrast, other VM networking modes automatically create and connect to the
virbr0 virtual bridge.
All of the VMs appear within the same subnet as the host machine. All other physical machines on the same physical network are aware of the VMs, and can access them. Bridging operates on Layer 2 of the OSI networking model.
It is possible to use multiple physical interfaces on the hypervisor by joining them together with a bond. The bond is then added to a bridge and then VMs are added onto the bridge as well. However, the bonding driver has several modes of operation, and only a few of these modes work with a bridge where VMs are in use.
When using bridged mode, the only bonding modes that should be used with a VM are Mode 1, Mode 2, and Mode 4. Using modes 0, 3, 5, or 6 is likely to cause the connection to fail. Also note that Media-Independent Interface (MII) monitoring should be used to monitor bonding modes, as Address Resolution Protocol (ARP) monitoring does not work.
For more information on bonding modes, refer to the Red Hat Knowledgebase.
The most common use cases for bridged mode include:
- Deploying VMs in an existing network alongside host machines, making the difference between virtual and physical machines transparent to the end user.
- Deploying VMs without making any changes to existing physical network configuration settings.
- Deploying VMs that must be easily accessible to an existing physical network. Placing VMs on a physical network where they must access services within an existing broadcast domain, such as DHCP.
- Connecting VMs to an existing network where VLANs are used.
- For a detailed explanation of bridge_opts parameters, used to configure bridged networking mode, see the Red Hat Virtualization Administration Guide.
14.3. Virtual networking in isolated mode
When using Isolated mode, virtual machines connected to the virtual switch can communicate with each other and with the host machine, but their traffic will not pass outside of the host machine, and they cannot receive traffic from outside the host machine. Using dnsmasq in this mode is required for basic functionality such as DHCP.
14.4. Virtual networking Network Address Translation
By default, virtual network switches operate in NAT mode. They use IP masquerading rather than Source-NAT (SNAT) or Destination-NAT (DNAT). IP masquerading enables connected VMs to use the host machine’s IP address for communication with any external network. When the virtual network switch is operating in NAT mode, computers external to the host cannot communicate with the VMs inside the host.
Virtual network switches use NAT configured by iptables rules. Editing these rules while the switch is running is not recommended, because incorrect rules may result in the switch being unable to communicate.
If the switch is not running, you can set the public IP range for forward mode NAT in order to create a port masquerading range by running:
# iptables -j SNAT --to-source [start]-[end]
14.5. Virtual networking in open mode
When using Open mode for networking,
libvirt does not generate any
iptables rules for the network. As a result,
iptables rules added outside the scope of libvirt are not overwritten, and the user can therefore manually manage
14.6. Virtual networking DNS and DHCP
libvirt package includes
dnsmasq to provide a Dynamic Host Configuration Protocol (DHCP) server and a Domain Name System (DNS) forwarder for virtual networks.
dnsmasq DHCP service can assign a pool of addresses to a virtual network switch. IP information can be assigned to virtual machines via DHCP.
dnsmasq accepts DNS queries from virtual machines on the virtual network and forwards them to a real DNS server.
An instance of
dnsmasq is automatically configured and started by
libvirt for each virtual network switch that needs it.
14.7. Virtual networking default configuration
When the libvirtd daemon (
libvirtd) is first installed, it contains an initial virtual network switch configuration in NAT mode. This configuration is used so that installed VMs can communicate to the external network through the host machine. The following figure shows the default configuration for
A virtual network can be restricted to a specific physical interface. This may be useful on a physical system that has several interfaces (for example, eth0, eth1, and eth2). This is only useful in routed and NAT modes, and can be defined in the
dev=<interface> option, or in the RHEL 8 web console when creating a new virtual network.