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.

La LED du Wifi est bien allumé mais au demarrage de Linux je ne peux pas me connecter de suite en wifi.
Je dois passer en root et faire ceci :
iwconfig eth1 txpower on
/etc/init.d/networking restart
dhclient eth1
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 ) 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)
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