====== Extension d'un réseaux sans-fil ====== ===== -- Contexte et objectifs ===== La maquette mise en place dans ce document consiste à étendre un réseau local à l'aide d'un point d'accès sans-fil. Le schéma de la figure 1 illustre le contexte de la réalisation. [{{ :schema-extension-wifi.png?direct&450 | Figure 1. Schéma du réseau}}] On dispose d'un modem routeur connecté à Internet. Ce modem annonce un SSID ''host-network''. Le réseau IP correspondant est 192.168.1.0/24. Dans la suite, on présente les configurations nécessaires pour permettre à un point d'accès sans-fil d'étendre la connectivité du réseau local. En particulier, le point d'accès se connecte en mode station au modem routeur. De plus, il annonce un SSID ''guest-network'' et une plage d'adresses IP 192.168.66.0/24. Ainsi, les machines peuvent s'associer au SSID annoncé par le point d'accès et accéder à Internet. Cette maquette permet d'atteindre trois objectifs principaux: - étendre la couverture radio du modem routeur. - mettre en place une séparation entre les réseaux ''guest-network'' et ''host-network''. - mettre en place des règles pour garantir la qualité de service. ===== -- Matériel ===== Les configurations suivantes sont proposées pour un point d'accès sans-fil [[http://www.tp-link.com/en/products/details/?model=TL-MR3020#spec|TP-LINK MR3020]]. Une distribution OpenWrt ATTITUDE ADJUSTMENT (12.09, r36088) a été installée sur ce routeur. Le mode d'installation à partir du firmware d'origine est expliqué [[makerfaire|ici]]. ===== -- Configuration du point d'accès sans-fil ===== Commençons par modifier le contenu du fichier ''/etc/config/wireless'' sur le point d'accès sans-fil. En particulier, il s'agit de créer deux interfaces radio. * Une première interface ''wwan'' est configurée en mode ''sta'' ou station. Le SSID (dans cet exemple ''guest-network'') et la clé sont donc ceux fournis par le modem routeur connecté à Internet. De ce point de vue, le point d'accès se comporte comme une machine terminale avec une liaison sans-fil. * Une deuxième interface ''lan'' est configurée en mode ''ap'' ou access point. Le SSID ''host-network'' et la clé correspondante peuvent être librement choisis. En particulier, ce sont les éléments à communiquer aux utilisateurs qui bénéficient de l'extension du réseau. config wifi-device 'radio0' option type 'mac80211' option macaddr 'f8:ff:ff:ff:f:ff' option hwmode '11ng' option htmode 'HT20' list ht_capab 'SHORT-GI-20' list ht_capab 'SHORT-GI-40' list ht_capab 'RX-STBC1' list ht_capab 'DSSS_CCK-40' option channel '4' option txpower '27' config wifi-iface option network 'wwan' option ssid 'host-network' option encryption 'psk' option device 'radio0' option mode 'sta' option bssid '00:17:33:F2:FF:FF' option key 'mysecretkey' config wifi-iface option device 'radio0' option mode 'ap' option ssid 'guest-network' option network 'lan' option encryption 'psk2' option key 'FAFBFCFDFF' Ensuite, modifions le contenu du fichier ''/etc/config/network''. L'interface ''wwan'' est configurée comme un client DHCP et récupère les paramètres IP proposés par le modem routeur. L'interface ''lan'' (qui forme un pont avec l'interface Ethernet du MR3020) dispose de paramètres de configuration statiques. L'adresse IP de cette dernière détermine la plage d'adresses distribuées aux clients du réseau ''guest-network''. config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config interface 'lan' option ifname 'eth0' option type 'bridge' option proto 'static' option netmask '255.255.255.0' option dns '8.8.8.8' option ipaddr '192.168.66.1' config interface 'wwan' option proto 'dhcp' Terminons avec la configuration du fichier ''/etc/config/dhcp''. Le protocole DHCP est activé sur l'interface ''lan''. Ainsi, le point d'accès joue le rôle d'un serveur DHCP sur le réseau ''guest-network''. Il attribue des adresses IP entre 192.168.66.100/24 et 192.168.66.150/24 aux machines clientes. Par contre, ce protocole est désactivé sur l'interface ''wwan'' qui récupère ses paramètres IP (adresse IP, passerelle, serveur DNS) à partir modem routeur. config dhcp lan option interface lan option start 100 option limit 150 option leasetime 12h config dhcp wan option interface wan option ignore 1 ===== -- Limitation du débit ===== Afin de préserver la bande passante du réseau, il est possible de limiter le débit du trafic vers ou depuis les machines associées au point d'accès sans-fil. Commençons par mesurer le débit du réseau avec l'outil [[http://software.es.net/iperf/index.html|iperf3]] installé sur un ordinateur ''PC-test-guest-network'' associé au point d'accès sans-fil. Le site [[https://iperf.fr|iperf.fr]] propose un ensemble de serveurs publics de test. Les deux extraits suivants montrent le résultat du test de débit avec le serveur ''iperf.testdebit.info''. Le débit moyen montant est de 719 Kbits/sec, alors que le débit moyen descendant est de 6.33 Mbits/sec. PC-test-guest-network$ iperf3 -c iperf.testdebit.info Connecting to host iperf.testdebit.info, port 5201 [ 6] local 192.168.66.156 port 58318 connected to 89.84.127.54 port 5201 [ ID] Interval Transfer Bandwidth [ 6] 0.00-1.00 sec 234 KBytes 1.91 Mbits/sec [ 6] 1.00-2.00 sec 117 KBytes 959 Kbits/sec [ 6] 2.00-3.00 sec 121 KBytes 995 Kbits/sec [ 6] 3.00-4.00 sec 677 KBytes 5.52 Mbits/sec [ 6] 4.00-5.00 sec 76.6 KBytes 627 Kbits/sec [ 6] 5.00-6.00 sec 0.00 Bytes 0.00 bits/sec [ 6] 6.00-7.00 sec 0.00 Bytes 0.00 bits/sec [ 6] 7.00-8.00 sec 0.00 Bytes 0.00 bits/sec [ 6] 8.00-9.00 sec 0.00 Bytes 0.00 bits/sec [ 6] 9.00-10.00 sec 0.00 Bytes 0.00 bits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth [ 6] 0.00-10.00 sec 1.20 MBytes 1.00 Mbits/sec sender [ 6] 0.00-10.00 sec 878 KBytes 719 Kbits/sec receiver iperf Done. PC-test-guest-network$ iperf3 -Rc iperf.testdebit.info Connecting to host iperf.testdebit.info, port 5201 Reverse mode, remote host iperf.testdebit.info is sending [ 6] local 192.168.66.156 port 58324 connected to 89.84.127.54 port 5201 [ ID] Interval Transfer Bandwidth [ 6] 0.00-1.00 sec 557 KBytes 4.56 Mbits/sec [ 6] 1.00-2.00 sec 710 KBytes 5.80 Mbits/sec [ 6] 2.00-3.00 sec 765 KBytes 6.28 Mbits/sec [ 6] 3.00-4.00 sec 802 KBytes 6.57 Mbits/sec [ 6] 4.00-5.00 sec 783 KBytes 6.41 Mbits/sec [ 6] 5.00-6.00 sec 851 KBytes 6.98 Mbits/sec [ 6] 6.00-7.00 sec 864 KBytes 7.07 Mbits/sec [ 6] 7.00-8.00 sec 711 KBytes 5.82 Mbits/sec [ 6] 8.00-9.00 sec 799 KBytes 6.54 Mbits/sec [ 6] 9.00-10.00 sec 761 KBytes 6.25 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 6] 0.00-10.00 sec 7.68 MBytes 6.45 Mbits/sec 21 sender [ 6] 0.00-10.00 sec 7.55 MBytes 6.33 Mbits/sec receiver iperf Done. ==== -- Mise en place ==== Nous choisissons de limiter le débit montant à 200 Kbits/sec et descendant à 2 Mbits/sec. Pour cela, nous avons recours à l'outil ''tc'' de contrôle de trafic. Commençons par installer les modules nécessaires pour OpenWrt sur le point d'accès sans-fil. root@ap-openwrt:~# opkg update root@ap-openwrt:~# opkg install tc iptables-mod-ipopt root@ap-openwrt:~# opkg install kmod-sched Activons le module de gestion de files d'attentes en saut à jetons: root@ap-openwrt:~# insmod sch_tbf Ensuite, appliquons une règle de limitation du trafic montant sur l'interface logique ''wlan0-1'' (interface sortante du point d'accès). Le débit maximal choisi est 200 Kbits/sec avec des pics jusuqu'à 350 Kbits/s. Les paquets qui séjournent plus que 50 msec dans la file d'attente sont supprimés. root@ap-openwrt:~# tc qdisc add dev wlan0-1 root tbf rate 200kbit burst 10kb latency 50ms peakrate 350kbit minburst 1540 Les noms des interfaces logiques du point d'accès peuvent être identifiés dans le résultat de la commande ifconfig. De même, appliquons une règle de limitation du trafic descendant à 2 Mbit/sec sur l'interface br-lan (interface entrante du point d'accès): root@ap-openwrt:~# tc qdisc add dev br-lan root tbf rate 2mbit burst 10kb latency 50ms peakrate 4mbit minburst 1540 Vérifions la mise en place des règles de limitation de trafic: root@ap-openwrt:~# tc -s qdisc ls dev br-lan qdisc tbf 8004: root refcnt 2 rate 2000Kbit burst 10Kb peakrate 4000Kbit minburst 1540b lat 50.0ms Sent 10180 bytes 35 pkt (dropped 0, overlimits 9 requeues 0) backlog 0b 0p requeues 0 root@ap-openwrt:~# tc -s qdisc ls dev wlan0-1 qdisc tbf 8003: root refcnt 5 rate 200000bit burst 10Kb peakrate 350000bit minburst 1540b lat 50.0ms Sent 3682 bytes 28 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Afin de valider la limitation du débit, nous utilisons à nouveau le logiciel iperf3. Les résultats suivants montrent clairement que le débit montant est maintenant limité à 184 Kbits/sec et le débit descendant à 2.02 Mbits/sec. PC-test-guest-network$ iperf3 -c iperf.testdebit.info Connecting to host iperf.testdebit.info, port 5201 [ 6] local 192.168.66.156 port 58340 connected to 89.84.127.54 port 5201 [ ID] Interval Transfer Bandwidth [ 6] 0.00-1.00 sec 151 KBytes 1.23 Mbits/sec [ 6] 1.00-2.00 sec 9.90 KBytes 81.1 Kbits/sec [ 6] 2.00-3.00 sec 26.9 KBytes 220 Kbits/sec [ 6] 3.00-4.00 sec 25.5 KBytes 208 Kbits/sec [ 6] 4.00-5.01 sec 24.0 KBytes 197 Kbits/sec [ 6] 5.01-6.00 sec 25.5 KBytes 209 Kbits/sec [ 6] 6.00-7.01 sec 22.6 KBytes 185 Kbits/sec [ 6] 7.01-8.01 sec 15.6 KBytes 127 Kbits/sec [ 6] 8.01-9.00 sec 25.5 KBytes 209 Kbits/sec [ 6] 9.00-10.00 sec 25.5 KBytes 208 Kbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth [ 6] 0.00-10.00 sec 351 KBytes 288 Kbits/sec sender [ 6] 0.00-10.00 sec 225 KBytes 184 Kbits/sec receiver iperf Done. PC-test-guest-network$ iperf3 -Rc iperf.testdebit.info Connecting to host iperf.testdebit.info, port 5201 Reverse mode, remote host iperf.testdebit.info is sending [ 6] local 192.168.66.156 port 58348 connected to 89.84.127.54 port 5201 [ ID] Interval Transfer Bandwidth [ 6] 0.00-1.00 sec 240 KBytes 1.97 Mbits/sec [ 6] 1.00-2.00 sec 233 KBytes 1.91 Mbits/sec [ 6] 2.00-3.00 sec 232 KBytes 1.90 Mbits/sec [ 6] 3.00-4.00 sec 232 KBytes 1.90 Mbits/sec [ 6] 4.00-5.00 sec 233 KBytes 1.91 Mbits/sec [ 6] 5.00-6.00 sec 233 KBytes 1.91 Mbits/sec [ 6] 6.00-7.00 sec 232 KBytes 1.90 Mbits/sec [ 6] 7.00-8.00 sec 215 KBytes 1.76 Mbits/sec [ 6] 8.00-9.00 sec 250 KBytes 2.05 Mbits/sec [ 6] 9.00-10.00 sec 233 KBytes 1.91 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 6] 0.00-10.00 sec 2.47 MBytes 2.07 Mbits/sec 29 sender [ 6] 0.00-10.00 sec 2.40 MBytes 2.02 Mbits/sec receiver iperf Done. ==== -- Activation au démarrage ==== Dans ce paragraphe, il s'agit d'automatiser la limitation du début à l'aide d'un script utilisant les commandes précédentes. Commençons par créer deux fichiers qui rassemblent les commandes d'activation et de suppression de la limitation de débit. Ces fichiers sont nommés ''tc_qdisc_start.sh'' et ''tc_qdisc_stop.sh'' respectivement. Notons le chargement du module ''sch_tbf'' indispensable pour le bon fonctionnement de la gestion des files d'attentes. #!/bin/sh insmod sch_tbf tc qdisc add dev wlan0-1 root tbf rate 200kbit burst 10kb latency 50ms peakrate 350kbit minburst 1540 tc qdisc add dev br-lan root tbf rate 2mbit burst 10kb latency 50ms peakrate 4mbit minburst 1540 #!/bin/sh tc qdisc del dev br-lan root tc qdisc del dev wlan0-1 root rmmod sch_tbf Rendons ces fichiers exécutables: root@ap-openwrt:~# chmod +x /etc/tc_qdisc_start.sh /etc/tc_qdisc_stop.sh Créons le fichier ''/etc/init.d/ratelimit'' qui permet d'exécuter les scripts précédents. #!/bin/sh /etc/rc.common START=50 start() { echo "Starting traffic control" /etc/tc_qdisc_start.sh } stop() { echo "Stopping traffic control" /etc/tc_qdisc_stop.sh } Ainsi, un appel de la commande suivante permet de lancer le script ''/etc/tc_qdisc_start.sh'', et par conséquent active la limitation de débit: root@ap-openwrt:~# /etc/init.d/ratelimit start Alors que la commande ''stop'' lance le script ''/etc/tc_qdisc_stop.sh'' et supprime la limitation de débit: root@ap-openwrt:~# /etc/init.d/ratelimit stop Pour terminer, il ne reste plus qu'à lancer le script ''ratelimit'' et l'activer automatiquement au démarrage du point d'accès avec les commandes suivantes: root@ap-openwrt:~# /etc/init.d/ratelimit start root@ap-openwrt:~# /etc/init.d/ratelimit enable Si besoin, les commandes suivantes permettent de supprimer la limitation du débit et désactiver le lancement automatique au démarrage: root@ap-openwrt:~# /etc/init.d/ratelimit stop root@ap-openwrt:~# /etc/init.d/ratelimit disable