Existe-t-il un moyen de permuter les interfaces réseau ( eth1 <-> eth0 ) après l'installation du système.
Ma toute nouvelle Debian 6.0 installe la carte réseau PCI assignée comme " eth0 " et le périphérique réseau intégré aux cartes mères comme " eth1 " par défaut. Le problème est que je veux utiliser le périphérique intégré comme interface réseau par défaut ( eth0 ).
J'ai déjà édité:
/etc/udev/rules.d/70-persistent-net.rules
pour échanger les noms et tout semble être ok et le réseau fonctionne mais les programmes essaient toujours d'utiliser la carte réseau PCI (qui est maintenant " eth1 ") comme interface par défaut. Par exemple, iftop essaie maintenant d'utiliser " eth1 " comme périphérique par défaut car il utilisait " eth0 " avant l'échange.
S'agit-il uniquement d'un problème logiciel, car les applications essaient d'utiliser le premier périphérique trouvé comme périphérique par défaut malgré leur nom d'interface ou existe-t-il un moyen de résoudre ce problème en configurant le système d'exploitation?
edit: J'ai écrit une petite application pour imprimer iflist et le périphérique PCI ( eth1 ) est apparu avant " eth0 ". Toutes les idées pour échanger l'ordre des appareils.
edit: J'ai trouvé un fil sur le même problème et j'ai essayé tout ce qu'ils ont suggéré et aucune des solutions ne fonctionne sauf pour échanger les noms "virtuellement".
la source
Réponses:
Je réponds à ma propre question maintenant parce que j'ai finalement trouvé une solution de contournement pour ce problème.
J'ai découvert qu'il était possible de réorganiser les appareils en déchargeant les pilotes puis en les chargeant dans le bon ordre.
Première méthode (bruteforce):
Donc, la première méthode que j'ai trouvée a été simple de forcer le rechargement du pilote avec le script init.d.
Le script d'initialisation suivant est adapté à Debian 6.0, mais le même principe devrait fonctionner sur presque toutes les distributions en utilisant les scripts init.d appropriés.
Ensuite, le script doit être ajouté au répertoire de niveau d'exécution approprié. Cela peut être fait facilement sur Debian avec la commande " update-rc.d ". Par exemple:
update-rc.d reorder-nics start S
Deuxième méthode (mieux je pense):
J'ai également trouvé un moyen un peu plus élégant (au moins pour les systèmes Debian et Ubuntu).
Assurez-vous d'abord que le noyau ne charge pas automatiquement les pilotes NIC. Cela peut être fait en créant un fichier de liste noire dans
/etc/modprobe.d/
. J'ai créé un fichier nommé "disable-nics.conf
". Notez que les fichiers dans/etc/modprobe.d/
doivent avoir le.conf
suffixe. Le fait de nommer les modules dans/etc/modprobe.d/blacklist.conf
n'affecte pas le chargement automatique des modules par le noyau, vous devez donc créer votre propre fichier.Exécutez ensuite ' depmod -ae ' en tant que root
Recréez votre initrd avec ' update-initramfs -u '
Et enfin, ajoutez les noms des pilotes dans l'ordre corrigé dans le fichier / etc / modules .
Les modifications devraient entrer en vigueur après le prochain démarrage.
Le redémarrage n'est cependant pas nécessaire; il est facile de changer les appareils avec la commande suivante (en tant que root, bien sûr):
Quelques liens utiles que j'ai trouvés en recherchant la solution:
la source
Vous pouvez utiliser le
netdev=
paramètre de ligne de commande du noyau (vous devez le transmettre au noyau dans grub) pour demander au noyau de lier un irq donné à une interface donnée, par exemple:netdev=irq=2,name=eth0
la source
forcedeth 0000:00:04.0: ifname eth1, PHY OUI 0x57d @ 1, addr 40:40:00:40:40:40
. Ce n'est pas un problème trop grave mais ça me fait vraiment mal car la carte intégrée est de 1 Go et ce devrait être l'appareil par défaut.Vous devrez probablement aller dans chaque fichier de configuration des programmes affectés et changer «eth1» en «eth0». Ces programmes par défaut sont configurés lorsqu'ils sont installés ou exécutés pour la première fois avec les cartes réseau actuellement détectées.
J'utilise Linux comme routeur et j'ai eu ce problème lors de l'utilisation de scripts. J'ai maintenant un joli fragment de script appelé
netconf
que je source pour tout autre script chaque fois que j'ai besoin d'utiliser des noms de NIC, ce fichier me donne un emplacement central pour les spécifier (c'estLAN_IFACE=eth0
-à- direWAN_IFACE=eth1
, etc.)la source
Vous ne pouvez pas changer quelle interface est utilisée par défaut dans des applications comme
iftop
. Ils appellent la fonction de bibliothèque Cif_nameindex
et utilisent le premier élément du tableau retourné par défaut. GNU libc'sif_nameindex
sur Linux est un mince wrapper autour de l'SIOCGIFCONF
ioctl . Cela renvoie les interfaces dans un ordre fixe, en fonction de l'ordre dans lequel les pilotes réseau ont été initialisés et de l'ordre dans lequel chaque pilote a détecté chaque périphérique.Si vous ne voulez vraiment pas avoir à passer
-i
àiftop
des programmes similaires, vous pouvez créer un petit wrapperif_nameindex
qui réorganise les éléments de la liste retournée, avecLD_PRELOAD
. J'appellerais cela beaucoup plus de problèmes qu'il n'en vaut la peine.la source
if_nameindex
fonction aussi. Peut-être que je le laisse pour l'instant. Heureusement, certaines applications vérifient vraiment le nom de l'interface. D'un autre côté, certaines applications n'ont même pas d'options de configuration par défaut, je n'ai donc qu'à utiliser l'option -i. Je me demandais simplement pourquoi l'option de chargement du noyaunetdev=irq=22,name=eth0
ne fonctionne pas? J'ai pensé qu'il devrait être possible de changer l'ordre des cartes réseau au démarrage du noyau.for_each_netdev
macro), les interfaces sont énumérées dans l'ordre dans lequel les pilotes sont chargés (grosso modo). Vos interfaces utilisent probablement des pilotes différents, vous devrez donc organiser le chargement des pilotes dans l'ordre que vous souhaitez. Je m'attends à ce que ce soit difficile, surtout si vous voulez que votre réglage fonctionne sur une mise à niveau du noyau.S'ils ont des pilotes différents, au moins dans la journée, vous pourriez mettre dans l'un des fichiers de configuration du module:
C'est une connaissance assez ancienne mais cela peut aider.
la source
Jetez un œil au package 'ifrename'. Cela vous permet de renommer les noms d'interface en fonction d'une variété d'informations telles que l'adresse MAC de l'interface, le pilote, l'interruption ..., configurées dans un fichier / etc / iftab.
Quelques exemples de la page de manuel:
la source