GNU/Linux >> Tutoriels Linux >  >> Linux

Une machine Linux peut-elle servir à la fois de client sans fil et de point d'accès à l'aide d'une seule interface physique WLAN ?

Je n'ai jamais fait cela auparavant personnellement, mais voici quelques informations pour vous orienter dans la bonne direction.

Du point de vue du protocole, il est tout à fait possible d'avoir une seule radio fonctionnant à la fois comme AP et comme STA client. Cela fonctionne mieux (ou peut-être est-il presque obligatoire) si l'AP que vous créez et celui que vous rejoignez en tant que client sont sur le même canal. Le fait que la carte radio doive continuer à changer de canal pour répondre aux demandes de service est une recette pour des trames perdues et des performances épouvantables.

Côté logiciel, cela devient possible. Plusieurs pilotes de carte 802.11 sous Linux prennent en charge le concept de VAP (AP virtuels) qui permet à une seule carte d'agir comme plusieurs AP (plusieurs SSID, même BSSID) en même temps. Contre toute attente, le terme VAP en est venu à désigner tout type d'interfaces virtuelles sur la même carte 802.11, que l'interface virtuelle soit en mode AP ou non. Ainsi, sur ces combos carte/pilote, vous pouvez créer deux VAP -- un VAP en mode STA

Le pilote MadWifi pour les cartes basées sur Atheros est celui qui prend en charge les VAP. Si votre carte 802.11 utilise un chipset Atheros et que vous installez la bonne version du pilote MadWifi, vous pourrez peut-être configurer votre carte pour le mode STA + AP simultané de la manière suivante :

wlanconfig ath0 create wlandev wifi0 wlanmode sta
wlanconfig ath1 create wlandev wifi0 wlanmode ap

Notez qu'il ne s'agit pas d'instructions complètes pour tout configurer, mais simplement d'une tentative de démarrage.

Vous voudrez peut-être Google pour quelque chose comme "wifi vap" pour plus d'informations. J'ai copié les commandes ci-dessus à partir d'ici.

Oh, et quelques mythes brisés :les cartes Atheros ne sont pas rares dans les machines grand public. C'est un acteur majeur des chipsets 802.11, aux côtés de Broadcom, Marvell, Intel et Ralink. Et ce n'est pas parce que j'ai utilisé l'exemple de MadWifi/Atheros qu'il n'y a pas de pilotes Linux pour les puces des autres grands acteurs qui peuvent faire la même chose. De plus, 802.11s n'est pas requis pour cela. Dire que vous devez faire 802.11 pour ce faire revient à dire que vous devez prendre en charge le protocole Spanning Tree uniquement pour transférer des trames d'une interface à une autre.


source et plus d'informations :

https://wiki.archlinux.org/index.php/Software_access_point

Réponse courte

sudo iw dev wlan0 interface add wlan0_ap type managed
sudo create_ap wlan0_ap wlan0 createap mypassword

L'appareil Wi-Fi doit prendre en charge le mode AP

Vous avez besoin d'un appareil sans fil compatible nl80211, qui prend en charge le mode de fonctionnement AP. Cela peut être vérifié en exécutant la commande iw list, sous le bloc Modes d'interface pris en charge, il devrait y avoir un point d'accès répertorié :

...
    Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * WDS
         * monitor
         * mesh point
...

Client sans fil et point d'accès logiciel avec un seul appareil Wi-Fi

La création d'un point d'accès logiciel est indépendante de votre propre connexion réseau (Ethernet, sans fil, ...). De nombreux appareils sans fil prennent même en charge le fonctionnement simultané à la fois en tant que point d'accès et en tant que "client" sans fil. En utilisant cette fonctionnalité, vous pouvez créer un point d'accès logiciel agissant comme un "répéteur sans fil" pour un réseau existant, à l'aide d'un seul périphérique sans fil. La capacité est répertoriée dans la section suivante dans la sortie de iw list :

combinaisons d'interfaces valides :

$ iw list
...
valid interface combinations:
     * #{ managed } <= 1, #{ AP, P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1,
       total <= 3, #channels <= 2
...

La contrainte #channels <=1 signifie que votre point d'accès logiciel doit fonctionner sur le même canal que votre connexion client Wi-Fi ; voir le paramètre de canal dans hostapd.conf ci-dessous.

Si vous souhaitez utiliser la capacité/fonctionnalité, peut-être parce qu'une connexion Ethernet n'est pas disponible, vous devez créer deux interfaces virtuelles distinctes pour l'utiliser. Les interfaces virtuelles pour un périphérique physique wlan0 peuvent être créées comme suit :Les interfaces virtuelles avec une adresse MAC unique sont créées pour la connexion réseau (wlan0_sta) elle-même et pour le logiciel AP/hostapd « répéteur sans fil » :

# iw dev wlan0 interface add wlan0_sta type managed 
# iw dev wlan0 interface add wlan0_ap  type managed

Configuration

La configuration d'un point d'accès se compose de deux parties principales :

  1. Configuration de la couche de liaison Wi-Fi, afin que les clients sans fil puissent s'associer au point d'accès logiciel de votre ordinateur et échanger des paquets IP avec lui.
  2. Configuration de la configuration réseau sur votre ordinateur, afin qu'il relaie correctement les paquets IP entre sa propre connexion Internet et les clients sans fil.

Outils

create_ap

Le package create_ap fournit un script qui peut créer un point d'accès ponté ou NAT pour le partage Internet. Il combine hostapd, dnsmasq et iptables pour le bon fonctionnement du point d'accès. La syntaxe de base pour créer un réseau virtuel NAT est la suivante :

# create_ap wlan0 eth0 MyAccessPoint MyPassPhrase

Le pilote nl80211 a quelque chose appelé le mode d'interface "géré". Vous pouvez le configurer à l'aide de l'utilitaire "iw" comme ceci :

iw phy phy phy0 interface ajouter le type wlan1 géré

Plus d'informations à ce sujet sont disponibles sur https://wireless.wiki.kernel.org/en/users/documentation/iw. Phy0 fait référence à ce que vous voyez dans /sys/class/ieee80211/.

J'ai aussi vu le rPI3 faire quelque chose de similaire, mais avec un mode d'interface "__ap" plus louche. De cette façon, l'utilisateur crée une deuxième interface qui ne s'exécute qu'en mode AP et utilise l'interface initiale en mode client.

Quelle que soit la façon dont vous le réalisez (le pilote doit évidemment le prendre en charge), vous aurez besoin de deux interfaces (du même périphérique physique). Une interface peut simplement exécuter wpa_supplicant en mode client, l'autre (mode AP) utilise généralement hostapd pour jouer au point d'accès.

[MODIFIER :]

Le code source de l'outil iw est très clair sur le mode ombré __ap :

..
} else if (strcmp(tpstr, "__ap") == 0) {
    *type = NL80211_IFTYPE_AP;
    return 0;
} else if (strcmp(tpstr, "__ap_vlan") == 0) {
    *type = NL80211_IFTYPE_AP_VLAN;
    return 0;
} else if (strcmp(tpstr, "wds") == 0) {
    *type = NL80211_IFTYPE_WDS;
    return 0;
} else if (strcmp(tpstr, "managed") == 0 ||
       strcmp(tpstr, "mgd") == 0 ||
       strcmp(tpstr, "station") == 0) {
    *type = NL80211_IFTYPE_STATION;
    return 0;
} 
..

Le mode __ap se traduit par un type de lien réseau NL80211_IFTYPE_AP. J'ai également testé cela, et cela fonctionne bien. Étrange que le wiki de documentation du noyau ne le mentionne pas.


Linux
  1. Créer un point d'accès sans fil et partager une connexion Internet avec Nmcli ?

  2. (C/C++) Comment générer un fichier exécutable pouvant fonctionner à la fois sous Windows et Linux ?

  3. Quel système de fichiers utiliser lorsque vous utilisez à la fois Windows et Linux ?

  4. Comment puis-je vérifier quels ports sont occupés et quels ports sont libres sur ma machine Linux ?

  5. Crypter un disque dur externe avec un accès en lecture + écriture sur Windows et Linux

Comment gérer, contrôler et accéder sans fil à votre téléphone Android à partir de Linux à l'aide d'Airdroid

Accéder au contenu du presse-papiers à l'aide de Xclip et Xsel sous Linux

Comment configurer le réseau sous Linux à l'aide de Netplan et NMTUI

VMware :comment créer une machine virtuelle et installer un système d'exploitation invité à l'aide de vSphere Client

Comment configurer le serveur et le client VPN Linux à l'aide d'OpenVPN

Comment configurer la cible de stockage Linux iSCSI et l'accès au client distant