CentOS 7 : Comment supprimer l’interface de bridge virbr0 ?
Sommaire
I. Présentation
Sur certaines machines utilisant la distribution CentOS7, on peut parfois trouver une interface bizarre appelée virbr0. En réalité, il s’agit d’une interface de type bridge appelée Virtual Bridge 0 et servant essentiellement à réaliser de la translation d’adresse (ou NAT – Network Address Translation). Ceci est généralement couvert par la bibliothèque de virtualisation libvirt et les environnements virtuels (comme Gnome boxes ou VirtualBox), pour pouvoir rendre accessible depuis les réseaux extérieurs, les machines virtuelles. La question que l’on peut se poser, c’est si l’on n’a aucune utilité de ces fonctionnalités de virtualisation, comment se débarrasser de cette interface étrange ?
REMARQUE: cette bibliothèque libvirt est la plupart du temps installée sur les nouvelles machines en CentOS7 (à moins de ne pas sélectionner l'option de virtualisation). Mais, ce serait se priver d'une fonctionnalité très utile, surtout si l'on souhaite faire des containers à l'aide de docker. Donc, il est préférable de procéder uniquement à la désactivation de l'interface virbr0 plutôt que de ne pas installer libvirt.
Aussi, je vous propose dans ce tutoriel une petite procédure pour rapidement désactiver, voire supprimer l’interface virbr0 sur une distribution CentOS7, sans avoir à tout casser et tout reconstruire. D'autant que ce genre de bridge introduit des règles netfilter au niveau de l'utilitaire iptables qui ne sont pas toujours souhaitables.
II. Arrêt de l'interface virbr0
La première chose à faire c’est de constater la présence de l’interface virbr0 via la commande ifconfig :
# ifconfig … virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:db:0a:e9 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
On peut vérifier via la commande brctl que l’on retrouve bien un bridge dédié à la virtualisation appelé virbr0:
# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.000000000000 no
On peut également vérifier au niveau du routage que l’on dispose aussi d’une entrée concernant l’interface virbr0 :
# netstat –rn … 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 bond1 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 bond0 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
Une fois ce constat établit, on peut alors arrêter l’interface en question grâce à l’instruction suivante :
# ifconfig virbr0 down
III. Suppression de l'interface virbr0
Maintenant, on peut alors utiliser la commande brctl pour supprimer cette interface gênante en exécutant la commande ci-dessous :
# brctl delbr virbr0
La liste des interfaces actives devraient alors se résumer à celles du réseau d’entreprise et uniquement à celles-ci :
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 192.168.1.227 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::217:a4ff:fe77:6014 prefixlen 64 scopeid 0x20<link> ether 00:17:a4:77:60:14 txqueuelen 1000 (Ethernet) RX packets 115799095 bytes 165715687327 (154.3 GiB) RX errors 0 dropped 497 overruns 0 frame 0 ... bond1: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 10.57.8.26 netmask 255.255.255.0 broadcast 10.57.63.255 inet6 fe80::217:a4ff:fe77:6000 prefixlen 64 scopeid 0x20<link> ether 00:17:a4:77:60:00 txqueuelen 1000 (Ethernet) RX packets 18015809 bytes 8210185642 (7.6 GiB) RX errors 0 dropped 16849 overruns 0 frame 0 ... eno49: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 ether 00:17:a4:77:60:14 txqueuelen 1000 (Ethernet) RX packets 115508539 bytes 165697902415 (154.3 GiB) RX errors 0 dropped 1 overruns 0 frame 0 ... eno50: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 ether 00:17:a4:77:60:16 txqueuelen 1000 (Ethernet) RX packets 288614 bytes 17667298 (16.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 ... eno51: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 ether 00:17:a4:77:60:00 txqueuelen 1000 (Ethernet) RX packets 11576493 bytes 7727678479 (7.1 GiB) RX errors 0 dropped 0 overruns 0 frame 0 ... eno52: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 ether 00:17:a4:77:60:64 txqueuelen 1000 (Ethernet) RX packets 6439316 bytes 482507163 (460.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 ... lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Boucle locale) RX packets 56704 bytes 4630853 (4.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 ...
Dans l’exemple précèdent, nous présentons deux interfaces en bond (bond0 et bond1), regroupant chacune deux interfaces principales : eno49, eno50 pour bond0 et eno51, eno52 pour bond1.
IV. Conclusion
Pour ma part, j'ai cherché assez longtemps avant de trouver ce moyen simple et efficace de neutraliser cette interface virtuelle. Ainsi, on peut se préoccuper uniquement du réseau d’entreprise LAN sans avoir à vérifier ce qui est fait en termes de routages et de translation d’adresse.
La validation de cette désactivation s’effectue en trois étapes :
- Vérification de routage:
# netstat –rn (on ne devrait plus voir apparaître de ligne virbr0)
- Vérification des interfaces :
# ifconfig (on ne devrait plus voir apparaître l’interface virbr0)
- Vérification de bridge:
# brctl show bridge name bridge id STP enabled interfaces (plus de ligne)
Voilà, désormais, fini l’affichage d’interface de virtualisation dont on ne se sert pas. On peut alors facilement la supprimer. De plus, si l'on scrute l'ensemble des règles de l'utilitaire iptables, on devrait n'avoir que des chaînes vides:
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Bien évidemment, si par contre vous avez besoin d'utiliser VirtualBox ou un quelconque outil de virtualisation tel que Qemu ou KVM, alors il vous faudra recréer l'interface virbr0 et la réactiver au niveau du réseau.