Configuration réseau wifi et ethernet sous linux debian HOWTO
par Rémy Malgouyres

This page exists in English

Voir aussi mon cours d'administration réseaux au format pdf.

Introduction
Cette page explique comment configurer son système linux debian pour pouvoir
utiliser commodément une carte réseau ethernet et une carte wifi,
en passant facilement d'un mode de connexion à l'autre
et d'un réseau à l'autre.
Typiquement, vous avez chez vous un modem-routeur wifi et ethernet
et vous vous connectez aussi sur votre lieu de travail.

Prérequis : les pilotes de votre carte wifi doivent être instalés et vous devez
obtenir un acces-point différent de zéro en tapant iwconfig.

Plan
1. Le fichier resolv.conf
2. Le fichier interfaces
    2.A. Pour le wifi
    2.B. Pour ethernet DHCP
    2.C. Pour ethernet static
3. Obtenir la configuration courante des interfaces
    3.A. Pour le wifi
    3.B. Pour ethernet
4. Réinitialisation du réseau
5. Scripts shell d'automatisation
    5.A. Pour le wifi
    5.B. Pour ethernet DHCP
    5.C. Pour ethernet static


1. Le fichier resolv.conf

Pour configurer le réseau sous debian, Le plus simple est de configurer
les fichiers /etc/network/interfaces et /etc/resolv.conf

Voici ci dessous mon fichier /etc/resolv.conf (pour mon fournisseur d'acces wanadoo.
Les adresses IP à mettre sont les adresses du server de nom (DNS)
primaire et secondaire.)

search
nameserver 193.252.19.3
nameserver 193.252.96.4


2. Le fichier interfaces

2.A. Pour le wifi

Voici mon fichier /etc/network/interfaces pour le wifi.
Il est configuré comme dhcp, c'est à dire que l'adresse IP
n'est pas fixée dans le système debian, mais est
obtenue du routeur via DHCPREQUEST

J'ai appelé ce fichier /etc/network/interfaces.wifi
Quand je veux utiliser le wifi, je fais un lien symbolique

ln -s /etc/network/interfaces.wifi /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo

iface lo inet loopback

#the wifi network interface
# mon interface wifi s'appelle rausb0,
# je l'ai su en tapant ifconfig et iwconfig (voir ci-dessous)
auto rausb0
iface rausb0 inet dhcp
      wireless-essid my_essid
      wireless-mode managed
      wireless-key AF32852BE7A39B522BG60C4353
# la clef qui apparait ici est juste un exemple, ca n'est pas
# vraiment ma clef wep, laquelle est secrete


Le ESSID et la clef WEP doivent être correctement configurés
sur le modem-routeur.

2.B. Pour ethernet DHCP

Voici mon fichier /etc/network/interfaces pour la carte ethernet.
Il est configuré comme dhcp, c'est à dire que l'adresse IP
n'est pas fixée dans le système debian, mais est
obtenue du routeur via DHCPREQUEST

J'ai appelé ce fichier /etc/network/interfaces.maison
(j'ai aussi un fichier comme ça pour me connecter au boulot)
Quand je veux utiliser le réseau ethernet, je fais un lien symbolique

ln -s /etc/network/interfaces.maison /etc/network/interfaces

Note : le réseau 192.168.0 correspond à mon routeur NETGEAR.
Il faut changer ces valeurs en fonction de la configuration
de votre routeur.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo eth0

iface lo inet loopback


# The primary network interface
# mon interface ethernet s'appelle eth0,
# je l'ai su en tapant ifconfig (voir ci-dessous)
iface eth0 inet dhcp




2.C. Pour ethernet static

Au bureau, nous avons un réseau ethernet local qui utilise de adresses IP statiques.
Mon administrateur réseau m'a donné une adresse IP fixée à utiliser (pour moi c'est
l'adresse 192.168.151.102).
(je peux aussi configurer mon routeur de la maison pour utiliser
des IP statiques mais ça ne marche pas très bien avec le wifi).


Voici le fichier /etc/network/interfaces que j'utilise pour l'adressage statique.
Je l'ai nommé /etc/network/interfaces.work

Quand je veux utiliser le réseau ethernet static, je fais un lien symbolique

ln -s /etc/network/interfaces.work /etc/network/interfaces



# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback
auto eth0
# The primary network interface
# mon interface ethernet s'appelle eth0,
# je l'ai su en tapant ifconfig (voir ci-dessous)
iface eth0 inet static
        address 192.168.151.102
        netmask 255.255.255.0
        broadcast 191.168.151.255
        gateway 192.168.151.1



 
3. Obtenir la configuration courante des interfaces

3.A. pour le wifi

En tapant ifconfig on peut voir ses interfaces réseau
(eth0, eth1 ou wlan0 ou rausb0, wifi0 ou autre)
Si votre carte wifi est reconnue, elle doit apparaître avec
un access-point (ou adresse MAC) en tapant iwconfig.

Exemple
Sur mon portable, voici ce que je vois en tapant ifconfig
(ici c'est le wifi qui est configuré et j'ai obtenu
l'adresse 192.168.0.3 par dhcp en tapant /etc/init.d/networking restart
Ceci correspond au réseau 192.168.0 de mon modem-routeur NETGEAR)

(En l'occurence, mon interface wifi est rausb0
parce que j'utilise comme carte wifi
un adaptateur wifi USB avec chipset RALINK
(le
Asus Spacelink WL-167g USB2 adapter) qui marche avec le driver
rt2570 dont on peut télécharger le source sur le site de RALINK.)


ifconfig

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:92 errors:0 dropped:0 overruns:0 frame:0
          TX packets:92 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:6040 (5.8 KiB)  TX bytes:6040 (5.8 KiB)

rausb0    Link encap:Ethernet  HWaddr 00:24:F2:C1:AB:23
          inet addr:192.168.0.3  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::213:d4ff:fef4:cd49/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:421 errors:0 dropped:0 overruns:0 frame:0
          TX packets:460 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4823848 (4.6 MiB)  TX bytes:79806 (77.9 KiB)

iwconfig

lo        no wireless extensions.

eth0      no wireless extensions.

sit0      no wireless extensions.

rausb0    RT2500USB WLAN  ESSID:"my_essid" 
          Mode:Managed  Frequency=24.37 MHz  Access Point: 00:F0:C3:A4:C1:41 
          Bit Rate=54 Mb/s  
          RTS thr:off   Fragment thr:off
          Encryption key:AF32-852B-E7A3-9B52-2BG6-0C43-53
          Link Quality=84/70  Signal level:-62 dBm  Noise level:-87 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0


3.B. Pour ethernet

Voici le résultat de ifconfig lorsque je suis configuré
pour éthernet.
(Dans cet exemple, j'ai obtenu l'adresse IP 192.168.0.2 par dhcp
sur mon interface ethernet eth0
en tapant /etc/init.d/networking restart)



eth0      Link encap:Ethernet  HWaddr 00:B2:3A:24:F3:C4
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::2c0:9fff:fef9:95b0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:5
          collisions:0 txqueuelen:1000
          RX bytes:1520 (1.4 KiB)  TX bytes:2024 (1.9 KiB)
          Interrupt:10

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:92 errors:0 dropped:0 overruns:0 frame:0
          TX packets:92 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:6040 (5.8 KiB)  TX bytes:6040 (5.8 KiB)



4. Réinitialisation du réseau

Lorsqu'on a les fichiers /etc/network/interfaces et /etc/resolv.conf
bien configurés (soit pour le wifi, soit pour l'ethernet),
et lorsque l'interface réseau correspondante apparaît en tapant ifconfig,
pour initialiser le réseau et obtenir une adresse IP, il faut faire

/etc/init.d/networking restart

Remarque.
Avec ma carte wifi, la réinitialisation répétée du réseau lors
d'une perte de contact entre l'ordinateur et le routeur
(ça arrive avec le wifi) rendait le système instable
(blocage du système qui obligeait à rebooter).
Pour éviter cela, avant de réinitialiser le réseau,
je tue le processus dhclient

killall -9 dhclient

Pour passer d'un réseau à l'autre (wifi à ethernet et inversement), après avoir
tué le dhclient, j'utilise ifconfig. Par exemple, avec mes interfaces rausb0 du wifi
et eth0 pour ethernet (à vous d'adapter pour vos interfaces obtenues en tapant
ifconfig)

i) Pour passer du wifi à ethernet :

ifconfig rausb0 down
ifconfig eth0 up

Je modifie ensuite les liens sur les fichiers interfaces
et je réinitialise le réseau

ii) pour passer d'ethernet au wifi

ifconfig eth0 down
ifconfig rausb0 up

Je modifie ensuite les liens sur les fichiers interfaces
et je réinitialise le réseau


5. Scripts shell d'automatisation

Attention : les scripts suivants suppriment brutalement
les fichiers /etc/network/interfaces et /etc/resolv.conf

Vous pouvez faire une copie de ce fichier avant de lancer le script :

cd /etc/
cp resolv.conf resolv.conf.old
cd network
cp interfaces interfaces.old

Pour que ces scripts fonctionnent, il faut les modifier
pour mettre les noms de vos interfaces wifi et ethernet
obtenus par ifconfig et iwconfig (voir commentaires ci-dessous).
Il faut aussi modifier les adresses IP pour mettre les
adresses correspondant à la configuration de votre routeur.

Pour simplifier les scripts, j'ai configuré my routeur (configuré en serveur DHCP)
pour qu'il réserve des adresses IP fixes correspondant
à mes adresses MAC (acces point de iwconfig pour le wifi et HWaddr de ifconfig pour ethernet).
Cela permet d'obtenir toujours les mêmes adresses IP par dhcp,
ce qui facilite les tests.


5.A. Pour le wifi

# Script de lancement du wifi. mettre dans un fichier avec droits en execution
# a executer en tant que root
# ou bien en tant qu'utilisateur avec sudo
# En utilisant visudo root peut permettre a un utilisateur
# de lancer ce script sans taper le mot de passe de root
# et de démarer le réseau wifi

rm /etc/network/interfaces
ln -s /etc/network/interfaces.wifi /etc/network/interfaces
rm /etc/resolv.conf
ln -s /etc/resolv.conf.maison /etc/resolv.conf

# changer ici pour mettre votre addresse IP réservée pour dhcp
WIFI_ADDR=192.168.0.3
# changer ici pour mettre l'adresse IP de votre routeur
ROUTER_ADDR=192.168.0.1
# changer ici si votre  interface wi-fi n'est pas rausb0
WIFI_IFACE=rausb0
#changer ici si votre interface ethernet n'est pas eth0
ETHERNET_IFACE=eth0

e=$(ifconfig|grep "$ETHERNET_IFACE")
if [ -n "$e" ]
then
    echo "ifconfig $ETHERNET_IFACE down"
    ifconfig $ETHERNET_IFACE down
fi

if [ "$1" == "--force" -o -z "$(ifconfig|grep "$WIFI_IFACE")" ]
then
    echo "je supprime le lien d\'adresse IP (kill dhclient)"
    killall -9 dhclient
    u=
else
    u=$(iwconfig 2>/dev/null|grep "$WIFI_IFACE")
fi
if [ -z "$u" ]
then
    echo "ifconfig $WIFI_IFACE up"
    ifconfig $WIFI_IFACE up
    a=$(ifconfig|grep "$WIFI_ADDR")
else
    a=$(ifconfig|grep "$WIFI_ADDR")
    if [ "$1" == "--force" ]
        then
            a=
        fi
fi

if [ -z "$(iwconfig 2>/dev/null | grep "$WIFI_IFACE")" ]
then
    echo "Impossible de configurer $WIFI_IFACE. Probleme materiel ?"
    exit 0
fi

i=0
if [ -z "$a" ]
then
    echo "Veuillez patienter, recherche d\'adresse IP"
else
    echo Adresse IP OK
fi
while [ -z "$a" -a $i -lt 4 ]
do
    echo "restarting reseau"
    /etc/init.d/networking restart
    i=`expr $i + 1`
    a=$(ifconfig|grep "$WIFI_ADDR")
done

if [ -z "$a" ]
then
    echo "pas d adresse IP."
    echo "Esayez de rebooter le routeur ou relancez le script"
    exit 0
fi

echo "veuillez patienter, test du ping..."
b=$(ping -w 2 -c 1 $ROUTER_ADDR | grep "64 bytes from")
# ping example.com
c=$(ping -w 2 -c 1 google.com | grep "64 bytes from")
if [ -z "$b" ]
     then
        echo "Echec du ping, mais on a une adresse IP."
        if [ "$1" == "--force" ]
            then
                echo "Soyez patient et relancez le script (des fois attendre 1mn)"
            else
                echo "je supprime le processus"
                $0 --force
            fi
    else
        echo "succes du ping sur le routeur."
        if [ -z "$c" ]
        then
            echo "pas d\'acces internet"
            echo "essayez de rebooter le routeur"
        else
            echo "Access internet O.K. Have fun !"
        fi
     fi


5.B. Pour ethernet DHCP

# Script de lancement du reseau via ethernet
# a lancer en tant que root
# ou bien en tant qu'utilisateur avec sudo
# En utilisant visudo root peut permettre a un utilisateur
# de lancer ce script sans taper le mot de passe de root

rm /etc/network/interfaces
ln -s /etc/network/interfaces.maison /etc/network/interfaces
rm /etc/resolv.conf
ln -s /etc/resolv.conf.maison /etc/resolv.conf

# changer ici pour mettre votre addresse IP réservée pour dhcp
ETHERNET_ADDR=192.168.0.2
# changer ici pour mettre l'adresse IP de votre routeur
ROUTER_ADDR=192.168.0.1
# changer ici si votre interface wi-fi n'est pas rausb0
WIFI_IFACE=rausb0
#changer ici si votre interface ethernet n'est pas eth0
ETHERNET_IFACE=eth0

e=$(iwconfig 2>/dev/null|grep "$WIFI_IFACE")
if [ -n "$e" ]
then
    echo "je supprime le lien d adresse IP (kill dhclient)"
    killall -9 dhclient
        echo "ifconfig $WIFI_IFACE down"
    ifconfig $WIFI_IFACE down
fi



u=$(ifconfig|grep "$ETHERNET_IFACE")
if [ -z "$u" ]
then
    killall -9 dhclient
    echo "ifconfig $ETHERNET_IFACE up"
    ifconfig $ETHERNET_IFACE up
fi

a=$(ifconfig|grep "$ETHERNET_ADDR")
if [ -z "$a" -o "$1" == "--force" ]
then
    echo "Recherche d\'adresse IP."
    /etc/init.d/networking restart
fi

echo "veuillez patienter, test du ping..."
b=$(ping -w 2 -c 1 $ROUTER_ADDR | grep "64 bytes from")

c=$(ping -w 2 -c 1 google.com | grep "64 bytes from")
if [ -z "$b" ]
     then
        echo "Echec du ping, mais on a une adresse IP."
        if [ "$1" == "--force" ]
            then
                echo "Soyez patient et retapez maison"
            else
                echo "je recommence"
                $0 --force
            fi
    else
        echo "succes du ping sur le routeur."
        if [ -z "$c" ]
        then
            echo "pas d\'acces internet"
            echo "essayez de rebooter le routeur"
        else
            echo "Acess internet O.K. Have fun !"
        fi
     fi


5.C. Pour ethernet static

# Script de lancement du reseau via ethernet
# a lancer en tant que root
# ou bien en tant qu'utilisateur avec sudo
# En utilisant visudo root peut permettre a un utilisateur
# de lancer ce script sans taper le mot de passe de root

killall -9 dhclient
rm /etc/network/interfaces
ln -s /etc/network/interfaces.work /etc/network/interfaces
rm /etc/resolv.conf
ln -s /etc/resolv.conf.work /etc/resolv.conf
/etc/init.d/networking restart