5 votes

Comment faire en sorte que le pont réseau démarre au démarrage

Chaque fois que je démarre mon ordinateur, je dois redémarrer mon service réseau (en utilisant service network restart) pour activer mon pont (br0). Comment puis-je faire en sorte que Linux fasse cela au démarrage de mon ordinateur pour que je n'aie pas à le faire manuellement ?

Le réseau démarre, les 2 autres adaptateurs Ethernet sont actifs lorsque je démarre.

4voto

Batur Points 11

Cela semble être un problème avec l'ordre dans lequel les interfaces sont activées. En regardant le script d'initialisation /etc/init.d/network, on trouve cette partie qui construit toutes les interfaces :

# trouver toutes les interfaces à part loopback.
# ignorer les alias, les configurations alternatives et les fichiers de sauvegarde de l'éditeur
interfaces=$(ls ifcfg* | \
    LANG=C sed -e "$__sed_discard_ignored_files" \
           -e '/\(ifcfg-lo\|:\|ifcfg-.*-range\)/d' \
           -e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \
    LANG=C sort -k 1,1 -k 2n | \
    LANG=C sed 's/ //')

La sortie de cette commande produit cette liste :

br0
eth0

Je n'ai pas trouvé de solution à part inclure un ifup br0 dans le script /etc/rc.local pour forcer manuellement le démarrage de br0 APRÈS que l'appareil eth0 ait été activé.

ÉDITER

Je viens de créer un /etc/sysconfig/network-scripts/ifcfg-br0 comme ceci et après le redémarrage, br0 démarre APRÈS eth0 !

# ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no
STP=off
IPADDR=192.168.1.200
GATEWAY=192.168.1.1
NETMASK=255.255.255.0

Exemple /etc/sysconfig/network-scripts/ifcfg-eth0

# ifcfg-eth0
DEVICE=eth0
#BOOTPROTO=dhcp
HWADDR=BC:AE:C5:34:C9:E8
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no

Avec les fichiers ainsi, je vois maintenant les appareils réseau démarrer comme ceci :

Mise en route de l'interface eth0          [  OK  ]
Mise en route de l'interface br0           [  OK  ]

2voto

Chris Smith Points 21

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.

1voto

Vérifiez que le service "network" est activé. Vous pouvez utiliser les Services GUI (system-config-services) ou chkconfig si vous êtes familier avec cela. Cela a résolu le même problème pour moi.

0voto

Alex Bagnolini Points 7403

J'ai le même problème mais je me suis rendu compte que j'ai écrit le nom de l'interface de pont br0 dans /etc/sysconfig/network-scripts/ au lieu de ifcfg-br0

J'ai réalisé cela lorsque j'ai ouvert le "/etc/init.d/network" et ai trouvé que le script ne charge que les fichiers commençant par "ifcfg-"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X