La configuration de la communication wifi est une étape supplémentaire dans la configuration de la communication Ethernet. Pour ce faire, deux outils d'administration de réseau wifi sont disponibles sous Debian :
iw (qui fournit les commandes iw, ...) et est amené à devenir l'outil en ligne de commande canonique pour la configuration sans fil
et wireless-tools (qui fournit les commandes iwconfig, iwlist, ...) et est utilisé par les gestionnaires de configuration tels que wicd.
Télécharger et installer les paquets manquants par rapport à la liste suivante :
rfkill : commandes des interrupteurs wifi
iw : commandes iw pour la connexion wifi
$ sudo aptitude install iproute2 rfkill iw wpasupplicant isc-dhcp-client dnsutils bind9-host host
Vérifier la présence de la boucle locale lo et de l'interface réseau wifi wlan0 :
$ ls /sys/class/net
eth0 lo wlan0
Noter le type d'interface (dans le cas présent pci) et l'adresse sur le bus (ici 00:03.0) de l'interfaceeth0 :
$ ls -la /sys/class/net/wlan0
lrwxrwxrwx 1 root root 0 mars 17 21:24 /sys/class/net/wlan0 -> ../../devices/pci0000:00/0000:00:1c.1/0000:03:00.0/net/wlan0
$ lspci -k |grep -A2 -i wireless
03:00.0 Network controller: Intel Corporation Centrino Wireless-N 1030 [Rainbow Peak] (rev 34)
Subsystem: Intel Corporation Centrino Wireless-N 1030 BGN
Kernel driver in use: iwlwifi
....
Comme indiqué (Kernel driver in use), le module (ici iwlwifi) est chargé, ce que l'on peut vérifier avec la commande lsmod :
$ lsmod |grep iwlwifi
iwlwifi 131072 1 iwldvm
cfg80211 544768 3 iwlwifi,mac80211,iwldvm
$ sudo dmesg |grep firmware
[ 96.992075] iwl3945 0000:0c:00.0: firmware: failed to load iwlwifi-3945-2.ucode (-2)
[ 96.992081] iwl3945 0000:0c:00.0: Direct firmware load failed with error -2
$ ip link show lo |grep lo:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
Si la boucle lo est DOWN, l'activer
# ip link set dev lo up
Tester la boucle, ce qui permet de vérifier que la pile TCP/IP fonctionne :
$ ping -c2 127.0.0.1 |grep loss
2 packets transmitted, 2 received, 0% packet loss, time 999ms
Si l'objectif est d'établir une connexion "manuelle", il est préférable d'éliminer les interférences possibles avec d'éventuels autres services ou gestionnaires de réseau actifs, tels que wicd ou network-manager. Pour cela, vérifier le statut des services correspondants :
$ systemctl -a |grep -E 'wicd|networking|NetworkManager'
networking.service loaded active running LSB: Raise network interfaces.
wicd.service loaded active running LSB: Starts and stops Wicd
Dans l'exemple ci-dessus,
Le service réseau "networking" est chargé automatiquement au démarrage de la machine pour configurer le réseau à partir du fichier /network/interfaces et des commandes ifup/ifdown. Il n'est pas nécessaire de le désactiver, car il n'intervient pas spontanément en dehors du démarrage.
Le service réseau wicd est chargé et actif. Il est relancé régulièrement par le démon wicd-daemon. Il est préférable de le désactiver pour éviter les interactions. Une solution radicale pour le désactiver consiste à le désinstaller, ce qui entraîne la désinstallation des paquets "wicd".
$ sudo aptitude purge wicd-daemon
Le service NetworkManager est absent, le paquetnetwork-manager n'étant pas installé.
De même, si l'objectif est d'établir une connexion "à partir de zéro", sans interférence avec une configuration préalable, désactiver l'interface eth0 et purger les adresses et routes réseaux :
$ sudo ip link set dev wlan0 down
$ sudo ip -s -s address flush dev wlan0
$ sudo ip -s -s route flush dev wlan0
$ sudo ip -s -s neigh flush dev wlan0
Vérifier que l'interrupteur wifi, s'il existe, est en position "marche"
Installer rfkill pour visualiser l'état des switchs et les débloquer
$ sudo aptitude install rfkill
$ sudo rfkill list wifi 0: asus-wlan: Wireless LAN Soft blocked: yes Hard blocked: no 2: phy0: Wireless LAN Soft blocked: yes Hard blocked: yes
$ sudo rfkill unblock wifi
Vérifier le déblocage : tous les interrupteurs doivent être "no"
$ sudo rfkill list wifi
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
1: asus-wlan: Wireless LAN
Soft blocked: no
Hard blocked: no
$ sudo ip link set wlan0 up
Vérifier que l'interface est active :
$ sudo ip link show wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT qlen 1000
link/ether 4c:80:93:7b:29:a1 brd ff:ff:ff:ff:ff:ff
$ sudo iw reg get
country 00: DFS-UNSET
....
La liste des régions est disponible dans le fichier zone.tab (extrait)
$ cat /usr/share/zoneinfo/zone.tab
....
FR +4852+00220 Europe/Paris
....
GB +513030-0000731 Europe/London
....
SE +5920+01803 Europe/Stockholm
Sélectionner par exemple la région France
$ sudo iw reg set FR
$ sudo iw reg get
country FR: DFS-ETSI
(2402 - 2482 @ 40), (N/A, 20), (N/A)
(5170 - 5250 @ 80), (N/A, 20), (N/A)
(5250 - 5330 @ 80), (N/A, 20), (0 ms), DFS
(5490 - 5710 @ 160), (N/A, 27), (0 ms), DFS
(57000 - 66000 @ 2160), (N/A, 40), (N/A)
$ sudo iwlist wlan0 freq
wlan0 13 channels in total; available frequencies :
Channel 01 : 2.412 GHz
Channel 02 : 2.417 GHz
Channel 03 : 2.422 GHz
Channel 04 : 2.427 GHz
Channel 05 : 2.432 GHz
Channel 06 : 2.437 GHz
Channel 07 : 2.442 GHz
Channel 08 : 2.447 GHz
Channel 09 : 2.452 GHz
Channel 10 : 2.457 GHz
Channel 11 : 2.462 GHz
Channel 12 : 2.467 GHz
Channel 13 : 2.472 GHz
Current Frequency:2.472 GHz (Channel 13)
Pour rendre la modification de région permanente, éditer le fichier crda en charge de la régulation
$ sudo nano /etc/default/crda
Changer la dernière ligne pour désigner la région retenue, par exemple FR
REGDOMAIN=FR
La commande iw dev wlan0 scan fournit, pour chaque réseau détecté, un grand nombre d'informations.
Pour par exemple, obtenir la liste des réseaux avec leurs BSS, SSID et signal
$ sudo iw dev wlan0 scan |grep -wE "BSS|SSID|signal"
SS 30:7e:cb:7a:8d:ac(on wlan0)
signal: -76.00 dBm
SSID: VANCAP
BSS 9a:7e:cb:7a:8d:ad(on wlan0)
signal: -73.00 dBm
SSID: SFR WiFi FON
BSS 9a:7e:cb:7a:8d:af(on wlan0)
signal: -71.00 dBm
SSID: SFR WiFi Mobile
BSS 52:1f:9f:fc:1a:b0(on wlan0)
signal: -58.00 dBm
SSID: Bouygues Telecom Wi-Fi
................
Les commandes pour établir la connexion wifi sont fonction du chiffrage ou non chiffrage de la liaison.
si le terme Privacy apparaît sur la ligne "capability", le réseau est chiffré
si les termes WPA ou RSN apparaissent, le chiffrage est WPA ou WPA2
sinon le chiffrage est WEP (ascii ou héxadécimal
sinon, le réseau est ouvert (non chiffré)
$ sudo iw dev wlan0 scan |grep -iwE "BSS|SSID|capability|WPA|RSN"
BSS 30:7e:cb:7a:8d:ac(on wlan0)
capability: ESS Privacy ShortSlotTime (0x0411)
SSID: VANCAP
RSN: * Version: 1
WPA: * Version: 1
BSS 9a:7e:cb:7a:8d:ad(on wlan0)
capability: ESS ShortSlotTime (0x0401)
SSID: SFR WiFi FON
.........
Le premier réseau de la liste (VANCAP) est chiffré, le chiffrage est de type WPA/WPA2.
Pour se connecter au réseau ouvert NEUF SFR :
$ sudo iw --debug dev wlan0 connect "SFR WiFi FON"
L'option --debug, facultative, permet de confirmer que la connexion s'est correctement déroulée. Dans le cas contraire, un message d'erreur apparaît en dernière ligne.
Ce type de chiffrage offre un niveau de sécurité très faible et ne devrait pas être utilisé. Pour se connecter, que la clé soit ascii ou héxadécimale, dans la commande suivante, remplacer mon_essid et ma_clé_WEP par leurs valeurs :
$ sudo iw dev wlan0 connect "mon_essid" key 0:ma_clé_WEP
Installer si ce n'est pas encore fait wpasupplicant
$ sudo aptitude install wpasupplicant
Créer un fichier de configuration wpa_supplicant.conf, de la forme :
$ cat /etc/wpa_supplicant/wpa_supplicant.conf
update_config=1
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
network={
ssid="mon_essid"
#psk="ceci est un exemple de passphrase WPA"
psk=c0ea3cf625816dad27ed32b4d2fd4145119596af47c586af1a7ad61c3620927a
}
$ wpa_passphrase "mon_essid" "ceci est un exemple de passphrase WPA" >> /etc/wpa_supplicant/wpa_supplicant.conf
Se connecter (en utilisant wpa_supplicant) :
$ sudo wpa_supplicant -D wext,nl80211 -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
La commande wpa_cli status permet de confirmer la connexion entre les modems wifi :
$ sudo wpa_cli status
Selected interface 'wlan0'
bssid=b0:47:xx:xx:xx:xx
freq=0
ssid=FoxFi82
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
address=00:1b:xx:xx:xx:xx
uuid=ebf66b6c-44c0-58ae-xxxx-xxxxxxxxxx
Pour faire prendre en compte une nouvelle configuration du fichier wpa_supplicant.conf
$ sudo wpa_cli reconfigure
Selected interface 'wlan0'
OK
$ sudo wpa_cli terminate
Pour vérifier la connexion entre modems
$ iw wlan0 info
Interface wlan0
ifindex 3
wdev 0x1
addr xxxxxxxxxxxxxxxxx
ssid SFR WiFi FON
type managed
wiphy 0
channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz
ou bien
$ sudo iw dev wlan0 link
Connected to xxxxxxxxxxxx (on wlan0)
SSID: SFR WiFi FON
freq: 2412
RX: 680158 bytes (8009 packets)
TX: 4160 bytes (32 packets)
signal: -72 dBm
tx bitrate: 1.0 MBit/s
bss flags: short-slot-time
dtim period: 3
beacon int: 100
ou bien
$ sudo iw dev wlan0 scan |grep -A8 associated
BSS xxxxxxxxxxxxxx (on wlan0) -- associated
TSF: 4736344346471 usec (54d, 19:39:04)
freq: 2412
beacon interval: 100 TUs
capability: ESS ShortSlotTime (0x0401)
signal: -71.00 dBm
last seen: 0 ms ago
Information elements from Probe Response frame:
SSID: SFR WiFi FON
La suite de la configuration s'effectue comme pour une liaison Ethernet filaire : attributions d'adresse, de routes et d'adresses de serveurs. Dans ce qui suit, on prend l'exemple d'une configuration par DHCP.
$ sudo dhclient wlan0
$ ip route show dev wlan0 default via 10.0.2.2 dev eth0 10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
L'adresse locale (src) de la machine est :
$ ip route show dev wlan0 |grep src | awk '{print $(NF-1) " " NF$NF;exit}'
src 10.0.2.15
L'adresse de la passerelle (via), sur le réseau local est :
$ ip route show dev wlan0 |grep via| awk '{print $2 " " $3;exit}'
via 10.0.2.2
$ ping 8.8.8.8
Dans certains cas, hot spots en particulier, la connexion internet n'est possible qu'après authentification auprès du fournisseur d'accès,cette authentification s'effectuant sur une page web (portail) située sur le routeur. Lors d'une tentative de connexion internet, si l'on n'est pas redirigé automatiquement sur cette page,effectuer la connexion manuellement :
$ ip route
default via 192.168.2.1 dev wlan0
192.168.2.0/24 dev wlan0 proto kernel scope link src 192.168.2.75
Identifier l'adresse de la passerelle, ici 192.168.2.1, et lancer le navigateur sur cette adresse
$ iceweasel 192.168.2.1