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

12

Si je n'ai qu'une seule interface WLAN physique, y a-t-il un piratage qui peut être fait pour qu'il puisse être un client d'un point d'accès existant et en même temps servir de point d'accès pour d'autres clients?

J'ai un routeur ADSL 802.11g existant, et je vais construire un HTPC qui aura 802.11n. Mon ordinateur portable a également 802.11n, mais pour le moment, il ne se connecte qu'à 54 Mbps car c'est ce que prend en charge l'AP. J'aimerais pouvoir faire en sorte que le HTPC soit un client de mon routeur ADSL, mais que mon ordinateur portable soit un client du HTPC, donc la copie des fichiers vers celui-ci sera plus rapide.

Possible?

Edit: évidemment, je peux connecter le HTPC au routeur ADSL en utilisant Ethernet et désactiver le wifi sur le routeur, mais laisse simplement ignorer cette option. :-)

ThatGraemeGuy
la source

Réponses:

9

Je ne l'ai pas fait auparavant personnellement, mais voici quelques informations pour vous aider à aller dans la bonne direction.

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

Côté logiciel, cela devient possible. Plusieurs pilotes de cartes 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-intuitivement, le terme VAP a fini par désigner tout type d'interfaces virtuelles sur la même carte 802.11, que l'interface virtuelle soit en mode AP ou non. Donc, sur ces combinaisons carte / pilote, vous pouvez créer deux VAP - un VAP en mode STA

Le pilote MadWifi pour les cartes basées sur Atheros 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é quelque chose comme ceci:

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

Notez que ce ne sont pas des instructions complètes pour tout configurer, mais juste une tentative pour vous aider à démarrer.

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 certains mythes éclatent: les cartes Atheros ne sont pas rares dans les machines grand public. Ils sont 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 joueurs qui peuvent faire la même chose. De plus, 802.11s n'est pas requis pour cela. Dire que vous devez faire des 802.11 pour ce faire, c'est comme dire que vous devez prendre en charge le protocole Spanning Tree juste pour transférer des trames d'une interface à une autre.

Spiff
la source
Il semble que la carte que je reçois possède un chipset Atheros, donc j'ai peut-être de la chance. J'attends la livraison de mes composants alors je peux construire et tester.
ThatGraemeGuy
Je n'ai pas encore eu l'occasion de jouer avec MadWifi. J'accepte parce que la réponse est correcte, il semble qu'aucun autre chipset / famille n'offre cette fonctionnalité.
ThatGraemeGuy
Spiff, je travaille avec une puce Atheros et madwifi et j'essaie de configurer des VAP un en sta et un en ap. Je suis en mesure de configurer plusieurs VAP en mode ap, mais lorsque j'installe le premier VAP dans sta et que j'essaie ensuite de configurer un autre VAP dans ap, j'obtiens wlanconfig: ioctl: erreur d'entrée / sortie. Avez-vous une idée de comment y faire face?
sachinr
1
@sachinr Posez cette question comme une question pour que tout le monde la voie, pas seulement un commentaire sur une réponse de trois ans à la question de quelqu'un d'autre.
Spiff
Hé, j'ai ajouté ma question ici - superuser.com/questions/649742/… . Pouvez-vous jeter un œil? Merci :)
sachinr
4

Le pilote nl80211 a quelque chose appelé le mode d'interface "managé". Vous pouvez le configurer en utilisant l'utilitaire "iw" comme ceci:

interface iw phy phy0 ajouter 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 également 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 seconde interface qui ne s'exécute qu'en mode AP et utilise l'interface initiale comme 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 (à partir 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 lire le point d'accès.

[ÉDITER:]

Le code source de l'outil iw montre clairement le mode shady __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 net NL80211_IFTYPE_AP. J'ai également testé cela, et cela fonctionne très bien. Étrange que le wiki de documentation du noyau ne le fasse pas.

Arnout
la source
4

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

Le périphérique 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 des modes d'interface pris en charge, il doit y avoir un AP répertorié:

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

Client sans fil et AP logiciel avec un seul appareil Wi-Fi

La création d'un AP 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é en tant qu'AP et en tant que «client» sans fil en même temps. En utilisant cette capacité, vous pouvez créer un logiciel AP agissant comme un "répéteur sans fil" pour un réseau existant, en utilisant un seul appareil sans fil. La capacité est répertoriée dans la section suivante dans la sortie de la liste iw:

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 AP 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 fonctionnalité / 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 "wireless repeater":

# 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
mustafa candan
la source
Excellente réponse, merci!
Iman Akbari
J'appuie que c'est une excellente réponse, en particulier le bit sur la contrainte des canaux
Crazystick