Suivant: Réseau routé pour libvirt, Monter: Machines virtuelles [Table des matières][Index]
Par défaut, QEMU utilise un moteur réseau hôte en « mode utilisateur », qui
est pratique comme il n’a pas besoin de configuration. Malheureusement, il
est aussi très limité. Dans ce mode, la VM (machine virtuelle) invitée
peut accéder au réseau de la même manière que l’hôte, mais elle ne peut pas
être atteinte depuis l’hôte. De plus, comme le mode de réseau utilisateur de
QEMU se base sur ICMP, les outils de réseau basés sur ICMP comme
ping
ne fonctionnent pas dans ce mode. Ainsi, il est
souvent préférable de configurer un pont réseau, qui permet à l’invité de
participer pleinement au réseau. Cela est nécessaire, par exemple, lorsque
l’invité est utilisé comme serveur.
Il y a plusieurs manières de créer un pont réseau. La commande suivante
indique comment utiliser NetworkManager et son outil en ligne de commande
nmcli
, qui devrait déjà être disponible si votre déclaration de
système d’exploitation se base sur l’un des modèles de systèmes de bureau :
# nmcli con add type bridge con-name br0 ifname br0
Pour que ce pont fasse partie de votre réseau, vous devez associer votre pont réseau à l’interface Ethernet utilisée pour vous connecter au réseau. En supposant que cette interface est nommée ‘enp2s0’, la commande suivante peut être utilisée pour cela :
# nmcli con add type bridge-slave ifname enp2s0 master br0
Important : Seules les interfaces Ethernet peut être ajoutées à un pont. Pour les interfaces sans fil, envisagez l’approche par réseau routé détaillée dans Voir Réseau routé pour libvirt.
By default, the network bridge will allow your guests to obtain their IP address via DHCP, if available on your local network. For simplicity, this is what we will use here. To easily find the guests, they can be configured to advertise their host names via mDNS.
QEMU comes with a helper program to conveniently make use of a network
bridge interface as an unprivileged user voir Network options dans QEMU Documentation. The binary must be made setuid root for proper
operation; this can be achieved by adding it to the
privileged-programs
field of your (host) operating-system
definition, as shown below:
(privileged-programs (cons (privileged-program (program (file-append qemu "/libexec/qemu-bridge-helper")) (setuid? #t)) %default-privileged-programs))
The file /etc/qemu/bridge.conf must also be made to allow the bridge interface, as the default is to deny all. Add the following to your list of services to do so:
(extra-special-file "/etc/qemu/host.conf" "allow br0\n")
When invoking QEMU, the following options should be provided so that the network bridge is used, after having selected a unique MAC address for the guest.
Important : By default, a single MAC address is used for all guests, unless provided. Failing to provide different MAC addresses to each virtual machine making use of the bridge would cause networking issues.
$ qemu-system-x86_64 [...] \ -device virtio-net-pci,netdev=user0,mac=XX:XX:XX:XX:XX:XX \ -netdev bridge,id=user0,br=br0 \ [...]
To generate MAC addresses that have the QEMU registered prefix, the following snippet can be employed:
mac_address="52:54:00:$(dd if=/dev/urandom bs=512 count=1 2>/dev/null \ | md5sum \ | sed -E 's/^(..)(..)(..).*$/\1:\2:\3/')" echo $mac_address
If you use Docker on your machine, you may experience connectivity issues
when attempting to use a network bridge, which are caused by Docker also
relying on network bridges and configuring its own routing rules. The
solution is add the following iptables
snippet to your
operating-system
declaration:
(service iptables-service-type (iptables-configuration (ipv4-rules (plain-file "iptables.rules" "\ *filter :INPUT ACCEPT [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A FORWARD -i br0 -o br0 -j ACCEPT COMMIT "))
Suivant: Réseau routé pour libvirt, Monter: Machines virtuelles [Table des matières][Index]