Accueil

Utilisation de multiples configurations réseau

Si vous avez un ordinateur portable, et que vous l'utilisez un peu partout (chez vous, au travail, en déplacement), vous passez sans doute fréquement d'une configuration réseau à une autre. Par exemple, vous pouvez avoir une connexion par IP fixe à votre bureau, une connexion chez vous configurée automatiquement par le serveur DHCP de votre (Live|Free|Neuf|etc.)Box, une connexion par IP fixe sur le réseau local de l'oncle Marcel, etc.

Certes, passer d'une configuration à une autre peut se faire simplement en exécutant le script /sbin/netconfig fourni par Patrick Volderding. Mais s'il faut faire ça tous les jours (une fois le matin en arrivant au bureau, une fois le soir en rentrant chez soi), ça devient rapidement pénible.

Pourtant, la configuration du réseau ne nécessite que quelques commandes assez simples, et on peut donc très facilement l'automatiser.

Sommaire

Exemples de configurations typiques

Dans cette section, on considérera que eth0 est une interface réseau Ethernet, et eth1 une interface réseau Wi-Fi. Seule une utilisation élémentaire des commandes sera montrée, on se rapportera à la page de manuel de la commande en question pour plus de détails.

Connexion Ethernet par IP fixe

La première chose à faire est d'activer l'interface si elle n'est pas déjà active :

ifconfig eth0 up

On s'assurera bien sûr que le module nécessaire à la gestion de la carte réseau a été chargé, si besoin en rajoutant un modpobe nom_du_module dans /etc/rc.d/rc.modules.local.

On lui attribue ensuite l'adresse IP fixe voulue :

ifconfig eth0 123.123.123.123

et le masque de sous-réseau à utiliser :

ifconfig eth0 subnet 123.123.123.123

Ceci est suffisant pour vous permettre de vous connecter à votre réseau local. Si celui-ci est relié à l'Internet, vous voulez sans doute en profiter, auquel vous devez indiquez le nom ou l'adresse de la machine qui relaiera vos requêtes vers l'Internet (la passerelle) :

route add default gw NOM_OU_ADRESSE_IP_DE_LA_PASSERELLE

Il faudra aussi renseigner le fichier /etc/resolv.conf (5) avec les adresses des serveurs de noms de domaine.

nameserver 123.123.123.123
nameserver 123.123.123.123

Si vous listez plusieurs serveurs, ils seront interrogés dans l'ordre de leur apparition dans le fichier.

Connexion Ethernet autoconfigurée

Si votre réseau local a un serveur DHCP qui tourne quelque part, la configuration est largement simplifiée, puisqu'il suffit d'activer l'interface réseau comme précédemment, puis d'utiliser un client DHCP pour demander une adresse IP :

ifconfig eth0 up
dhcpcd eth0

La passerelle et les DNS seront automatiquement renseignés par le serveur DHCP. À noter qu'il peut judicieux, avant de demander une adresse IP, de vider le fichier /etc/resolv.conf : en effet, le client DHCP ajoutera les serveurs DNS à la fin de ce fichier, ce qui fait que les éventuels serveurs de noms qui y étaient déjà présents seront systématiquement interrogés avant ceux fournis par le serveur DHCP, ce qui n'est pas forcément souhaitable.

Connexion Wi-Fi

Les bornes Wi-Fi sont en général systématiquement équipées d'un serveur DHCP, et la configuration d'une telle connexion obéit donc aux mêmes principes que ci-dessus. Toutefois, quelques étapes préliminaires sont nécessaires.

Si la connexion est sécurisée, il faut indiquer la clé à utiliser :

iwconfig eth1 key restricted REPRÉSENTATION_HEXADÉCIMAE_DE_LA_CLÉ

Il faut ensuite indiquer à quel point d'accès on veut se connecter (les points d'accès environnants peuvent être listés avec iwlist) :

iwconfig eth1 essid NOM_DU_POINT_D_ACCÈS

Ensuite seulement, on peut activer l'interface et demander une adresse IP :

ifconfig eth1 up
dhcpcd eth1

Automatisation

Une fois toutes les commandes et leurs paramètres identifiés, on peut se confectionner un petit script qui configurera automatiquement le réseau en fonction de l'endroit où vous vous trouvez.

Voici un exemple d'un tel script, il ne devrait poser aucun problème de compréhension si vous avez compris les commandes ci-dessus et que vous avez quelques notions de shell-scripting.

#!/bin/sh

# S'assurer que les interfaces sont désactivées
ifconfig eth0 down
ifconfig eth1 down

# Chacune des fonctions suivantes configure le système
# pour une connexion à un réseau particulier

# Connexion Ethernet fixe
connect_fixe() {
    ifconfig eth0 up
    ifconfig eth0 ADRESSE_IP_FIXE
    ifconfig eth0 netmask MASQUE_DE_SOUS_RÉSEAU
    route add default gw NOM_OU_ADRESSE_DE_LA_PASSERELLE

    cat > /etc/resolv.conf <<EOF
nameserver IP_DNS_1
nameserver IP_DNS_2
EOF
}

# Connexion Ethernet automatique
connect_auto() {
    ifconfig eth0 up
    cat /dev/null > /etc/resolv.conf
    dhcpcd eth0
}

# Connexion à un routeur Wi-Fi
connect_wifi() {
    iwconfig eth1 key restricted CLÉ_WEP
    iwconfig eth1 essid "NOM_DU_POINT_D_ACCÈS"
    ifconfig eth1 up
    dhcpcd eth1
}

# En fonction du paramètre du script,
# on appelle la bonne fonction
case "$1" in
    fixe)
        connect_fixe
        ;;
    auto)
        connect_auto
        ;;
    wifi)
        connect_wifi
        ;;
    *)
        echo "Usage: $0 {fixe|auto|wifi}"
        exit 1
        ;;
esac

Si on enregistre ce script dans /etc/rc.d/rc.network, il suffit alors de l'appeler en lui passant en paramètre le nom de la configuration à activer.

C'est déjà mieux que de devoir rentrer à chaque fois tous les paramètres de la connexion avec /sbin/netconfig. Mais il faut encore exécuter le script après chaque démarrage du système !

Sélection de la configuration lors du démarrage

Il est possible de faire en sorte de choisir dès le démarrage la configuration réseau à utiliser.

L'astuce consiste à spécifier une "fausse" option au noyau Linux lors du démarrage. En effet, si on passe au noyau un paramètre de la forme NOM=VALEUR, et que NOM n'est pas une option reconnue par le noyau ou un de ses modules, alors la variable NOM est ajouté à l'environnement dans lequel s'exécutent les scripts de démarrages lancés par init.

La première chose à faire est de désactiver les scripts /etc/rc.d/rc.inet1.conf et /etc/rc.d/rc.wireless (i.e. les rendre non-exécutables), qui ne nous serviront plus à rien.

Ensuite, on ajoute les lignes suivantes dans /etc/rc.d/rc.local :

if [ "x$NETWORK" != 'x' -a -x /etc/rc.d/rc.network ]; then
    /etc/rc.d/rc.network $NETWORK
fi

Si la variable NETWORK est définie et que le fichier /etc/rc.d/rc.local est exécutable, alors ce script est appelé avec la valeur de NETWORK.

Il ne reste alors plus, à chaque démarrage, qu'à spécifier la configuration réseau à utiliser en la passant en paramètre au noyau :

linux NETWORK=config

config représente quelle configuration acceptée par votre script /etc/rc.d/rc.network.

Vous pourrez alors laisser votre système démarrer et configurer tout seul comme un grand la connexion que vous aurez choisi. :)

Thèmes : #articles #reseau #sbn

Sauf indication contraire, ce document est placé sous licence CC-BY-SA 3.0.