OVH Cloud OVH Cloud

Choisir les noms des interfaces reseau ?

5 réponses
Avatar
Annie D.
Bonjour,

Est-il possible de fixer l'attribution des noms des interfaces réseau
ethernet et PPP ?

J'ai une machine Debian avec noyau 2.4.18 à 2.4.26 qui sert de routeur
IP. Elle a plusieurs (au moins deux) cartes ethernet et peut établir
plusieurs connexions PPP, une pour internet (ADSL PPPoE) et les autres
pour des connexions privées de type VPN avec des stations aussi bien
locales que distantes.

Par défaut, l'attribution des noms des interfaces eth0, eth1... et ppp0,
ppp1... se fait dans l'ordre de leur création. Dans mon cas, cet ordre
est susceptible de changer, surtout en ce qui concerne les interfaces
PPP. Afin de simplifier la gestion des règles iptables, je voudrais
faire en sorte que, par exemple, le nom ppp0 soit réservé et toujours
affecté à la connexion internet même si une connexion VPN locale est
établie avant. De la même façon je voudrais que le nom eth0 soit
toujours affecté à l'interface du réseau local principal même si
j'ajoute une carte ethernet qui peut modifier l'ordre de création des
interfaces.

Merci pour vos infos.

5 réponses

Avatar
Kevin
Le Mon, 17 May 2004 13:29:28 +0200, Annie D. a ecrit:
|
| Est-il possible de fixer l'attribution des noms des interfaces réseau
| ethernet et PPP ?
|
Il y a un paragraphe a ce sujet dans l'ethernet-HOWTO. Peutetre une piste?

--
Kevin
Ca veut dire quoi 'rm: .o: No such file or directory'?!?
-+- Les 100 choses que vous n'aimez pas entendre de la part du sysadmin -+-
Avatar
TiChou
Dans le message <news:,
*Annie D.* tapota sur f.c.o.l.configuration :

Bonjour,


Bonjour,

Est-il possible de fixer l'attribution des noms des interfaces réseau
ethernet


Oui, avec l'outil nameif. Cela se fait en fonction de l'adresse MAC.

et PPP ?


Non. Mais pour les interfaces PPP il est possible d'utiliser l'option
linkname de pppd pour nommer le lien mais non pas l'interface et qui vous
allez voir par la suite peut contourner le problème du nommage « aléatoire »
des interfaces PPP.

J'ai une machine Debian avec noyau 2.4.18 à 2.4.26 qui sert de routeur
IP. Elle a plusieurs (au moins deux) cartes ethernet et peut établir
plusieurs connexions PPP, une pour internet (ADSL PPPoE) et les autres
pour des connexions privées de type VPN avec des stations aussi bien
locales que distantes.

Par défaut, l'attribution des noms des interfaces eth0, eth1... et ppp0,
ppp1... se fait dans l'ordre de leur création. Dans mon cas, cet ordre
est susceptible de changer, surtout en ce qui concerne les interfaces
PPP. Afin de simplifier la gestion des règles iptables, je voudrais
faire en sorte que, par exemple, le nom ppp0 soit réservé et toujours
affecté à la connexion internet même si une connexion VPN locale est
établie avant.


J'ai très bien compris ce que vous cherchiez à faire. Je recontre à peu de
chose près le même cas de figure avec sur une passerelle Linux 2 connexions
ADSL (PPP) et une connexion RTC de secours. Bien sûr j'ai un tas de scripts
maisons (firewall, tunnel, shaping, ...) qui permettent de gérer au mieux
ces 3 connexions en intervenant comme il faut sur les différentes interfaces
qui n'ont pas toujours le même nom.
Je ne vais trop rentrer dans le détail dans la façon dont je procède, je
pense que vous comprendrez vite le principe.

Pour la configuration des connexions PPP, j'ai le fichier d'options communes
/etc/ppp/options et un fichier d'options pour chacune des connexions, se
trouvant dans /etc/ppp/peers.
Ce qui donne par exemple :

$ cat /etc/ppp/peers/easynet
user "blah"
[...]
nodefaulroute
linkname easynet
pty "/usr/sbin/pppoe -I eth0 -T 16 -U -m 1412"
init "echo -n $PPID >/var/run/pppd-easynet.pid"

$ cat /etc/ppp/peers/free
user "pwet"
[...]
nodefaultroute
linkname free
pty "/usr/sbin/pppoa -I `/usr/sbin/adictrl -i`"
init "echo -n $PPID >/var/run/pppd-free.pid"
connect "/usr/sbin/adictrl -s 0 && /sbin/ifconfig `/usr/sbin/adictrl -i` up"
disconnect "/sbin/ifconfig `/usr/sbin/adictrl -i` down"

A noter donc l'option linkname qui va donner un nom à la connexion et aussi
l'option nodefaultroute qui permettra par la suite de définir les routes par
défaut à notre guise.

Le script /etc/ppp/ip-up (ou un script à placer dans /etc/ppp/ip-up.d selon
la distribution) lancé par pppd après établissement de la connexion :

$ cat /etc/ppp/ip-up
[...]

if [ -n "$LINKNAME" ]
then
umask 0022
env>/var/run/ppp-$LINKNAME.env
fi

if [ "$LINKNAME" = "easynet" ]
then
/sbin/route add default gw $IPREMOTE dev $IFNAME metric 0
fi

if [ "$LINKNAME" = "free" ]
then
/sbin/route add default gw $IPREMOTE dev $IFNAME metric 1
fi

/root/bin/firewall &>/dev/null

Le script /etc/ppp/ip-down lancé après la déconnexion :

$ cat /etc/ppp/ip-down
[...]

if [ "$LINKNAME" ]
then
rm -f /var/run/ppp-$LINKNAME.env
fi

Se référer au man de pppd sur la liste et la signification (évidente) des
variables d'environement quand pppd lance ses scripts.

Quand une connexion est établie, sont donc créés 2 fichiers contenant des
informations qui seront utiles et exploitables par les scripts de firewall,
shaping, etc :

$ cat /var/run/ppp-easynet.env
PPPD_PID0690
PPPLOGNAME=root
SPEED8400
IPREMOTE5.114.91.22
IFNAME=ppp0
LINKNAMEêsynet
IPLOCAL!2.11.35.166

$ cat /var/run/pppd-easynet.pid
30690

Et deux autres fichiers créés automatiquement par pppd :

$ cat /var/run/ppp-easynet.pid
30690
ppp0

$ cat /var/run/ppp0.pid
30690

Il vaut mieux ne pas utiliser ces deux derniers fichiers car ils ne sont pas
toujours présents, surtout au moment des reconnexions.

Ensuite, pour exploiter ces fichiers il suffit de les sourcer dans les
scripts.
Par exemple si on veut établir des règles iptables et agir sur les
interfaces PPP :

if [ -f /var/run/ppp-easynet.env ]
then
. /var/run/ppp-easynet.env
EXTIF1=$IFNAME
EXTIP1=$IPLOCAL
LNK1=$LINKNAME
echo "Connexion Easynet :"
echo " interface = $EXTIF1"
echo " ip = $EXTIP1"
fi

if [ -f /var/run/ppp-free.env ]
then
. /var/run/ppp-free.env
EXTIF2=$IFNAME
EXTIP2=$IPLOCAL
LNK2=$LINKNAME
echo "Connexion Free :"
echo " interface = $EXTIF2"
echo " ip = $EXTIP2"
fi

Ou une autre manière de faire :

for ppp in /var/run/ppp-*.pid
do

# Détermination du nom du lien
#
LINKNAME=${ppp#/var/run/ppp-}
LINKNAME=${LINKNAME%.pid}

# Détermination du nom de l'interface du lien $LINKNAME
# et du PID du process pppd de ce lien
#
{ read PPPD_PID; read EXTIF; } <$ppp

# Vérification que le lien $LINKNAME est réellement opérationnel
#
if { [ `cat /var/run/$EXTIF.pid` == $PPPD_PID ] &&
kill -CHLD $PPPD_PID &&
$IP link show "$EXTIF"|$GREP -qE "^[[:digit:]]+: $EXTIF:
<(|[^>]+,)UP(,[^>]+|)>"; } &>/dev/null
then

# Détermination de l'IP Internet et de l'IP gateway du lien $LINKNAME
#
EXTIP=`getif ip $EXTIF`
EXTGW=`getif gw $EXTIF`

echo "Lien $LINKNAME UP"
echo " interface = $EXTIF"
echo " ip = $EXTIP"
echo " gateway = $EXTGW"

[...]

De la même façon je voudrais que le nom eth0 soit
toujours affecté à l'interface du réseau local principal même si
j'ajoute une carte ethernet qui peut modifier l'ordre de création des
interfaces.


A vous d'adapter les scripts d'initialisation des interfaces réseau avec la
commande nameif sachant que le nommage de la carte doit se faire avant
qu'elle soit UP.

Merci pour vos infos.


De rien en espérant avoir été clair.

--
TiChou

Avatar
Annie D.
Kevin DENIS wrote:

| Est-il possible de fixer l'attribution des noms des interfaces réseau
| ethernet et PPP ?
|
Il y a un paragraphe a ce sujet dans l'ethernet-HOWTO. Peutetre une piste?


Ah oui, l'ethernet-howto. Il y a une éthernité (!) que je ne l'ai pas
relu (pas loin de 2 ans). Si vous faites allusion au paragraphe 3.2 de
la FAQ intitulé "Utiliser plus d'une carte Ethernet par machine"
(http://www.freenix.fr/unix/linux/HOWTO/Ethernet-HOWTO-3.html#ss3.2), il
me semble que les alias dans conf.modules (ou modules.conf) ne
concernent que les noms des modules et n'ont aucune influence sur les
noms des interfaces malgré ce qui a l'air d'être dit. Ainsi, si je
reprends un des exemples du howto :

alias eth0 wd
alias eth1 3c503

La première interface créée sera toujours eth0, même si on commence par
"charger" eth1 :

# modprobe eth1
=> chargement du module 3c503 et création de l'interface eth0

Avatar
Annie D.
TiChou wrote:

Est-il possible de fixer l'attribution des noms des interfaces réseau
ethernet


Oui, avec l'outil nameif. Cela se fait en fonction de l'adresse MAC.


Je ne connaissais pas, merci. C'est pratique, on peut même personnaliser
le nom des interfaces comme eth-lan, eth-modem.

et PPP ?


Non. Mais pour les interfaces PPP il est possible d'utiliser l'option
linkname de pppd pour nommer le lien mais non pas l'interface et qui vous
allez voir par la suite peut contourner le problème du nommage « aléatoire »
des interfaces PPP.


Bon. Je suis énervée. J'ai passé des heures à lire et relire
l'interminable page de manuel de pppd en long, en large et en travers.
J'avais bien repéré l'option linkname, mais cette foutue page disait :

For the ip-down and auth-down scripts, pppd also sets the
following variables giving statistics for the connection:
[...]
LINKNAME
The logical name of the link, set with the linkname
option.

Donc, que le paramètre n'était pas passé à ip-up. Et vérification faite,
si. Grr. Ça m'apprendra à faire confiance au man et à vérifier par
moi-même.

Ceci dit, avant de publier ma question j'avais quand même fini par
découvrir l'option ipparam qui est aussi passée à ip-up. Je l'ai
utilisée pour la configuration IPv6 relativement simple (une heure pour
débugger une structure if quand même), mais ça ne m'arrangeait pas pour
iptables.

Dès que j'aurai franchi la barrière de la langue (je n'y connais pas
grand chose en bash), je m'attaquerai au déchiffrage de votre usine à
gaz. Merci encore.


Avatar
ericb
Bonjour,

Bonjour,

Est-il possible de fixer l'attribution des noms des interfaces réseau
ethernet et PPP ?

J'ai une machine Debian avec noyau 2.4.18 à 2.4.26 qui sert de routeur
IP. Elle a plusieurs (au moins deux) cartes ethernet et peut établir
plusieurs connexions PPP, une pour internet (ADSL PPPoE) et les autres
pour des connexions privées de type VPN avec des stations aussi bien
locales que distantes.


Après plusieurs réponses proposées, il n'y a pas la méthode que
j'utilise et qui fonctionne assez bien chez moi, alors je la propose...

J'ai fixé ce problème sur une carte mère relativement ancienne, avec
ports ISA en ajoutant une ligne append dans /etc/lilo.conf :

append="acpi=off ether=5,0xb400,0,1,eth0 ether,0x0210,0,1,eth1
apm=power-off"

(tout sur une seule ligne, le caractère "espace" est le séparateur
d'arguments)

Pour les bonnes valeurs d'irq et d'adresses, j'ai chargé chaque module
correspondant à la main et fait un /cat /proc/interrupts et un cat
/proc/ioports


Avec en plus :

alias eth0 natsemi # Bus PCI
alias eth1 3c509 # Bus ISA

Dans /etc/modules.conf


Avant ça, je n'arrivais pas à fixer correctement quelle carte réseau
faisait quoi.

N.B. : j'ai aussi du batailler un peu avec le bios pour trouver des irq
qui fonctionnaient.



Merci pour vos infos.



En espérant que cela puisse aider