J'ai rencontré le même problème sur une machine physique exécutant Centos 7.3 x86_64 et j'ai pu le résoudre en déplaçant d'abord l'adaptateur physique vers un emplacement PCI-X différent sur la carte mère, puis en effectuant toutes les opérations suivantes :
Supprimer le fichier de configuration de l'interface bridge :
rm -f /etc/sysconfig/network-scripts/ifcfg-br0
Supprimer le fichier de configuration de l'interface esclave :
rm -f /etc/sysconfig/network-scripts/ifcfg-enp6s0f0
Où enp6s0f0 était le nom d'interface esclave original, et était la seule interface esclave assignée au bridge br0
Assurez-vous de supprimer complètement le bridge original, en veillant à ce que toutes ses traces disparaissent (brctl show) ne doit pas lister l'interface bridge br0.
Arrêter le bridge :
ifconfig br0 down
Arrêter l'interface esclave :
ifdown enp6s0f0
ifconfig enp6s0f0 down
Arrêter le service réseau :
systemctl stop network.service
Supprimer manuellement le bridge si nécessaire : (Dans mon cas, c'était le cas.)
Avant de supprimer le bridge, toutes les interfaces esclaves doivent en être supprimées. Vous pouvez utiliser l'utilitaire de contrôle du bridge pour les supprimer
brctl delif br0 enp6s0f0
Une fois que toutes les interfaces esclaves ont été supprimées, le bridge lui-même peut être supprimé.
brctl delbr br0
Confirmer qu'aucun fichier de configuration restant ne fait référence à br0 :
grep -i br0 /etc/sysconfig/network-scripts/ifcfg-*
Devrait ne retourner aucun résultat
Dans mon cas, le nouveau nom d'interface basé sur le déplacement de la carte d'un emplacement est maintenant enp5s0f0.
Démarrer l'interface, puis confirmer avec ethtool, ou 'ip link' qui devrait signaler que la liaison est détectée pour l'interface.
[root@phaser ~]# ifconfig enp5s0f0 up
[root@phaser ~]# ethtool enp5s0f0
Paramètres pour enp5s0f0 :
Ports pris en charge : [ TP ]
Modes de liaison pris en charge : 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Utilisation des trames de pause prise en charge : Non
Prend en charge la négociation automatique : Oui
Modes de liaison annoncés : 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Utilisation des trames de pause annoncée : Non
Négociation automatique annoncée : Oui
Vitesse : 1000Mb/s
Duplex : Complet
Port : Paire torsadée
PHYAD : 1
Émetteur-récepteur : Interne
Négociation automatique : activée
MDI-X : activée (auto)
Prend en charge le Réveil-sur : pumbg
Réveil-sur : d
Niveau de message actuel : 0x00000007 (7)
drv probe lien
Liaison détectée : oui
Utilisez nmcli pour créer un nouveau bridge.
nmcli écrira les fichiers de configuration d'interface nécessaires dans /etc/sysconfig/network-scripts/
Créer l'interface bridge :
nmcli conn add type bridge ifname br0 ip4 10.0.0.16/24 gw4 10.0.0.1
Ajouter l'interface esclave au bridge :
nmcli conn add type bridge-slave ifname enp5s0f0 master bridge-br0
Désactiver le protocole spanning tree si le réseau a déjà un maître spanning tree :
nmcli con modify bridge-br0 bridge.stp no
Assurez-vous que le bridge est configuré pour démarrer au démarrage avec nmcli :
nmcli con mod br0 connection.autoconnect yes
À ce stade, je peux démarrer, arrêter le service réseau avec succès, et au redémarrage, l'interface bridge démarre correctement.
Notes de dépannage :
Je soupçonne que le fait d'omettre la ligne :
TYPE=Bridge
de mon fichier de configuration original pour br0 a pu causer ce problème. Je soupçonne également que le fait de ne pas utiliser nmcli et de créer manuellement les fichiers d'interface bridge a également posé des problèmes. Cela peut être dû au fait que NetworkManager tente toujours de gérer l'interface. Cela peut être confirmé avec :
nmcli dev status
Cette commande affichera un tableau qui répertorie toutes les interfaces réseau avec leur état. Si NetworkManager ne contrôle pas une interface, son état sera indiqué comme non géré. Toute autre valeur indique que l'interface est sous le contrôle de NetworkManager.
Si vous finissez par modifier manuellement un fichier ifcfg sous /etc/sysconfig/network-scripts, assurez-vous d'informer network manager des changements avec un rechargement.
nmcli con reload
Cela indiquera à NetworkManager de relire tous les fichiers ifcfg et de reconnaître les changements.
J'ai trouvé le post suivant: Comment empêcher Network Manager de contrôler une interface ?
Pour ceux qui ne veulent pas utiliser NetworkManager dans RHEL / CENTOS 7.x
Une autre chose mineure que j'ai remarquée lors des tests était que le contexte selinux des fichiers de configuration d'interface originaux que j'avais créés manuellement n'était pas identique aux fichiers de configuration générés automatiquement.
ls -lZ a montré que les fichiers ifcfg- générés automatiquement avaient le contexte suivant :
system_u:object_r:net_conf_t:s0
Tandis que les fichiers que j'avais créés avaient unconfined_u comme utilisateur.
J'ai utilisé chcon pour définir l'utilisateur sur system_u
chcon system_u:object_r:net_conf_t:s0 ifcfg-
Une autre observation est que lors de la mise en service du nouvel interface bridge, systemd signale désormais correctement que l'interface est connectée et déconnectée. Avant d'apporter ces modifications, lorsque j'utilisais mes propres fichiers de configuration, systemd semblait ne pas être conscient de l'interface. Il montrait que l'interface était configurée mais non connectée. Malgré ethtool signalant la détection de liaison.