Uma máquina Linux pode atuar como cliente sem fio e ponto de acesso simultaneamente usando uma única interface WLAN física?

12

Se eu tiver apenas uma interface WLAN física, há alguma invasão que pode ser feita para que ele possa ser um cliente de um ponto de acesso existente e ao mesmo tempo também atuar como um ponto de acesso para outros clientes?

Eu tenho um roteador ADSL 802.11g existente e vou construir um HTPC que terá 802.11n. Meu laptop também tem 802.11n, mas no momento ele se conecta apenas a 54Mbps porque é isso que o AP suporta. Gostaria de poder fazer com que o HTPC fosse um cliente do meu roteador ADSL, mas meu laptop fosse um cliente do HTPC, portanto, copiar arquivos para ele será mais rápido.

Possível?

Edit: obviamente, eu posso conectar o HTPC ao roteador ADSL usando Ethernet e desativar o wifi no roteador, mas vamos ignorar essa opção. :-)

ThatGraemeGuy
fonte

Respostas:

9

Eu não fiz isso antes pessoalmente, mas aqui estão algumas informações para levá-lo na direção certa.

Do ponto de vista do protocolo, é definitivamente possível ter um único rádio funcionando como um AP e um STA do cliente. Funciona melhor (ou talvez seja quase obrigatório) se o AP que você está criando e o que você está ingressando como cliente estão no mesmo canal. O fato de a placa de rádio ter que continuar mudando de canal para solicitações de serviço é uma receita para quadros perdidos e desempenho terrível.

Em termos de software, está se tornando possível. Vários drivers de placa 802.11 no Linux suportam o conceito de VAPs (APs virtuais), que permite que uma única placa atue como vários APs (vários SSIDs, até BSSIDs) ao mesmo tempo. Por outro lado, o termo VAP passou a significar qualquer tipo de interface virtual na mesma placa 802.11, independentemente de a interface virtual estar no modo AP ou não. Portanto, nesses combos de placa / driver, você pode criar dois VAPs - um VAP no modo STA

O driver MadWifi para placas baseadas em Atheros é compatível com VAPs. Se sua placa 802.11 usa um chipset Atheros e você instala a versão correta do driver MadWifi, poderá configurar sua placa para o modo STA + AP simultâneo, algo como isto:

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

Observe que estas não são instruções completas para configurar tudo, mas apenas uma tentativa de começar.

Você pode querer procurar no Google algo como " wifi vap " para obter mais informações. Copiei os comandos acima a partir daqui .

Ah, e um pouco de mito: os cartões Atheros não são incomuns em máquinas de consumo. Eles são os principais players em chipsets 802.11, juntamente com Broadcom, Marvell, Intel e Ralink. E só porque eu usei o exemplo de MadWifi / Atheros, não significa que não haja drivers Linux para os chips dos outros grandes players que possam fazer uma coisa semelhante. Além disso, o 802.11s não é necessário para isso. Dizer que você precisa fazer 802.11s para fazer isso é como dizer que você precisa suportar o Spanning Tree Protocol apenas para encaminhar quadros de uma interface para outra.

Spiff
fonte
Parece que o quadro que estou recebendo tem um chipset Atheros, então posso ter sorte. Estou aguardando a entrega dos meus componentes para poder construir e testar.
ThatGraemeGuy
Ainda não tive a chance de jogar com o MadWifi. Estou aceitando porque a resposta está correta, parece não haver outro chipset / família que ofereça essa funcionalidade.
ThatGraemeGuy
Spiff, estou trabalhando com um chip Atheros e com madwifi e estou tentando configurar VAPs um em sta e outro em ap. Consigo configurar vários VAPs no modo ap, mas quando configuro o primeiro VAP no sta e tento configurar outro VAP no ap, obtenho wlanconfig: ioctl: erro de entrada / saída. Você tem alguma idéia de como lidar com isso?
precisa saber é o seguinte
11
@sachinr Faça isso como uma pergunta para que todos vejam, não apenas um comentário sobre uma resposta de três anos à pergunta de outra pessoa.
Spiff
Ei, eu adicionei minha pergunta aqui - superuser.com/questions/649742/… . Você pode dar uma olhada? Obrigado :)
sachinr
4

O driver nl80211 possui algo chamado modo de interface "gerenciado". Você pode configurá-lo usando o utilitário "iw" da seguinte maneira:

iw phy phy0 interface adicionar tipo wlan1 gerenciado

Mais informações sobre isso estão disponíveis em https://wireless.wiki.kernel.org/en/users/documentation/iw . Phy0 refere-se ao que você vê em / sys / class / ieee80211 /.

Também vi o rPI3 fazer algo semelhante, mas com um modo de interface "__ap" mais obscuro . Dessa forma, o usuário cria uma segunda interface que é executada apenas no modo AP e usa a interface inicial como modo cliente.

Seja como for que você perceba (o driver obviamente tem que dar suporte), você precisará de duas interfaces (do mesmo dispositivo físico). Uma interface pode simplesmente executar o wpa_supplicant como modo cliente, a outra (modo AP) normalmente usa o hostapd para reproduzir o ponto de acesso.

[EDITAR:]

O código fonte da ferramenta iw deixa muito claro o modo __ap obscuro:

..
} 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;
} 
..

O modo __ap é convertido em um tipo de netlink NL80211_IFTYPE_AP. Eu também testei isso, e isso funciona bem. Estranho que o wiki de documentação do kernel não o encontre.

Arnout
fonte
4

fonte e mais informações:

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

Resposta curta

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

O dispositivo Wi-Fi deve suportar o modo AP

Você precisa de um dispositivo sem fio compatível com nl80211, que suporte o modo de operação do ponto de acesso. Isso pode ser verificado executando o comando iw list, no bloco Modos de interface suportados, deve haver um AP listado:

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

Cliente sem fio e software AP com um único dispositivo Wi-Fi

Criar um software AP é independente da sua própria conexão de rede (Ethernet, sem fio, ...). Muitos dispositivos sem fio até oferecem suporte à operação simultânea, como AP e como "cliente" sem fio ao mesmo tempo. Usando esse recurso, você pode criar um AP de software agindo como um "repetidor sem fio" para uma rede existente, usando um único dispositivo sem fio. O recurso está listado na seção a seguir na saída da lista iw:

combinações válidas de interface:

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

A restrição #channels <= 1 significa que o seu AP de software deve operar no mesmo canal da sua conexão de cliente Wi-Fi; veja a configuração do canal no hostapd.conf abaixo.

Se você deseja usar o recurso / recurso, talvez porque uma conexão Ethernet não esteja disponível, é necessário criar duas interfaces virtuais separadas para usá-lo. As interfaces virtuais para um dispositivo físico wlan0 podem ser criadas da seguinte maneira: As interfaces virtuais com endereço MAC exclusivo são criadas para a conexão de rede (wlan0_sta) e para o software AP / hostapd "wireless repeater":

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

Configuração

A configuração de um ponto de acesso consiste em duas partes principais:

  1. Configurando a camada de link Wi-Fi, para que os clientes sem fio possam se associar ao ponto de acesso de software do seu computador e trocar pacotes IP com ele.
  2. Configurando a configuração de rede no seu computador, para que ele retransmita adequadamente os pacotes IP entre sua própria conexão com a Internet e os clientes sem fio.

Ferramentas

create_ap

O pacote create_ap fornece um script que pode criar um ponto de acesso em ponte ou NAT para compartilhamento da Internet. Ele combina hostapd, dnsmasq e iptables para o bom funcionamento do ponto de acesso. A sintaxe básica para criar uma rede virtual com NAT é a seguinte:

# create_ap wlan0 eth0 MyAccessPoint MyPassPhrase
mustafa candan
fonte
Ótima resposta, obrigado!
Iman Akbari
Eu digo que essa é uma ótima resposta, especialmente a parte sobre a restrição de canais
crazystick