Avec libvirt (KVM) vous avez plusieurs possibilitées de connecter vos VM à internet, la plus facile, la NAT mais vos machines n’auront pas une IP provenant de votre réseau local. On parle en anglais de Bridge to local network
. En effet dans certains cas il est intéressant d’avoir une ip permettant à votre VM d’être une machine comme les autres de votre LAN
On commence par les choses qui fâchent, ce n’est pas possible de bridger une machine sur une carte wifi, ceci n’est valable que pour les interfaces réseaux filaires
An premier on regarde comment fonctionne notre réseau
$ nmcli con show --active
NAME UUID TYPE DEVICE
docker0 770d6801-47dc-44a3-9d11-17249f11ef26 bridge docker0
wired-direct 73157bec-12fb-42d0-98c4-f4576742e095 802-3-ethernet enp0s25
On cree notre bridge
$ nmcli con add ifname br0 type bridge con-name br0
Connection 'br0' (892869fe-f8ac-4f17-ace9-b8aeeeee61a0) successfully added.
$ nmcli con add type bridge-slave ifname enp0s25 master br0
Connection 'bridge-slave-enp0s25' (33ee8c62-48d8-4789-97df-604c479b6860)
successfully added.
On ne veut pas du stp (si vous avez besoin du spanning tree gardez le à yes)
$ nmcli con modify br0 bridge.stp no
on verifie que notre bridge existe
$ nmcli con show
NAME UUID TYPE DEVICE
docker0 770d6801-47dc-44a3-9d11-17249f11ef26 bridge docker0
wired-direct 73157bec-12fb-42d0-98c4-f4576742e095 802-3-ethernet enp0s25
br0 892869fe-f8ac-4f17-ace9-b8aeeeee61a0 bridge --
bridge-slave-enp0s25 33ee8c62-48d8-4789-97df-604c479b6860 802-3-ethernet -
on vérifie l’état du réseau, on voit que BR0 n’a toujours pas d’ip, nous utilisons encore enp0s25
$ ip a s
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s25: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 54:ee:75:76:50:8e brd ff:ff:ff:ff:ff:ff
inet 192.168.3.160/24 brd 192.168.3.255 scope global dynamic enp0s25
valid_lft 86394sec preferred_lft 86394sec
inet6 fe80::56ee:75ff:fe76:508e/64 scope link
valid_lft forever preferred_lft forever
4: docker0: mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:e7:79:09:d0 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
7: br0: mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
il temps de stopper notre connection sur enp0s25 interface:
$ nmcli con down wired-direct
Connection 'wired-direct' successfully deactivated (D-Bus active path:
/org/freedesktop/NetworkManager/ActiveConnection/11)
et on demarre notre br0
$ nmcli con up br0
Connection successfully activated (master waiting for slaves) (D-Bus active
path: /org/freedesktop/NetworkManager/ActiveConnection/12)
$ sudo systemctl restart NetworkManager.service
on check si br0 a trouvé une IP en DHCP (si vous avez un service DHCP)
$ ip a s
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s25: mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether 54:ee:75:76:50:8e brd ff:ff:ff:ff:ff:ff
4: docker0: mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:e7:79:09:d0 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
7: br0: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 54:ee:75:76:50:8e brd ff:ff:ff:ff:ff:ff
inet 192.168.3.160/24 brd 192.168.3.255 scope global dynamic br0
valid_lft 86211sec preferred_lft 86211sec
inet6 fe80::d813:5274:e201:f3/64 scope link
valid_lft forever preferred_lft forever
Maintenant on s’occupe de Libvirt, (suivant les configurations vous pouvez avoir besoin de sudo
), on regarde les réseaux de libvirt
$ virsh net-list --all
Name State Autostart Persistent
default active yes yes
on cree le réseau dans libvirt
$ cat > bridge.xml <<EOF
<network>
<name>host-bridge</name>
<forward mode="bridge"/>
<bridge name="br0"/>
</network> EOF
$ virsh net-define bridge.xml
Network host-bridge defined from bridge.xml
on démarre le réseau et on le rend persistent au démarrage
$ virsh net-start host-bridge Network host-bridge started $ virsh net-autostart host-bridge Network host-bridge marked as autostarted
$ virsh net-autostart host-bridge Network host-bridge marked as autostarted
$ virsh net-list --all
Name State Autostart Persistent
----------------------------------------------------------
default active yes yes
host-bridge active yes yes
Conclusion
A partir de ce point vous pouvez utilisez le réseau bridge br0 pour vos machines virtuelles. N’utilisez pas NetworkManager pour modifier BR0, vous allez casser la configuration, si cela arrive alors vous devez lancer
$ nmcli con down wired-direct
$ nmcli con up br0
Commentaires récents