Interfaz de red se cambia de 'posicion'

Alvaro Herrera alvherre en alvh.no-ip.org
Dom Oct 29 15:03:44 CLST 2006


Luis Vivero escribió:

> Me refiero a que en un comienzo una interfaz fisica era la eth0, y otra
> eth1. Despues de un rebooteo, la que antes era eth0 fue detectada como eth1,
> y la que eth1 fue eth0.
> 
> Es bastante malo esto, porque afecta a los servicios configurados.

Ciertamente.  Lo que viene a continuacion no aplica directamente a tu
caso, pero supongo que puedes sacar ideas: en Debian, esto se documenta
en interfaces(5) de la siguiente forma:

KNOWN BUGS/LIMITATIONS
       The ifup and ifdown programs work with so-called  "physical"  interface
       names.   These  names are assigned to hardware by the kernel.  Unfortu-
       nately it can happen that the kernel assigns different physical  inter-
       face  names  to the same hardware at different times; for example, what
       was called "eth0" last time you booted is now called  "eth1"  and  vice
       versa.   This creates a problem if you want to configure the interfaces
       appropriately.  A way to deal with  this  problem  is  to  use  mapping
       scripts that choose logical interface names according to the properties
       of the interface hardware.  See the get-mac-address.sh  script  in  the
       examples  directory  for an example of such a mapping script.  See also
       Debian bug #101728.

El programa get-mac-address.sh al que hace alusion es este:

#!/bin/sh

set -e

export LANG=C

iface="$1"
mac=$(/sbin/ifconfig "$iface" | sed -n -e '/^.*HWaddr \([:[:xdigit:]]*\).*/{s//\1/;y/ABCDEF/abcdef/;p;q;}')
which=""

while read testmac scheme; do
        if [ "$which" ]; then continue; fi
        if [ "$mac" = "$(echo "$testmac" | sed -e 'y/ABCDEF/abcdef/')" ]; then which="$scheme"; fi
done

if [ "$which" ]; then echo $which; exit 0; fi
exit 1


Esto funciona asi:
$ (echo "00:C0:9F:BA:4C:8D mi-eth0"  ; echo "00:14:A5:12:0F:9E mi-eth1" ) | sh /usr/share/doc/ifupdown/examples/get-mac-address.sh eth1

Es decir, creas un archivo que tenga la hwaddr de tus interfaces y el
alias que quieres para cada una, y le pasas al programa el nombre de la
interfaz del kernel y te entrega el nombre de la interfaz "virtual" que
quieres usar dependiendo de ese archivo.

-- 
Alvaro Herrera                 http://www.amazon.com/gp/registry/CTMLCN8V17R4
"XML!" Exclaimed C++.  "What are you doing here? You're not a programming
language."
"Tell that to the people who use me," said XML.


Más información sobre la lista de distribución Linux