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

9

Se eu tiver apenas uma interface WLAN física, há alguma invasão que possa ser feita para que 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 só se conecta a 54Mbps, porque é isso que o AP suporta. Eu gostaria de ser capaz de ter o HTPC ser um cliente do meu roteador ADSL, mas meu laptop ser um cliente do HTPC, então copiar arquivos para ele será mais rápido.

Possível?

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

    
por ThatGraemeGuy 23.06.2010 / 16:12

2 respostas

7

Eu não fiz isso pessoalmente, mas aqui estão algumas informações para você seguir na direção certa.

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

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é mesmo BSSIDs) ao mesmo tempo. Contraintuitivamente, 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. Então, nesses combos de cartão / driver, você poderia criar dois VAPs - um VAP no modo STA

O driver MadWifi para placas baseadas em Atheros é aquele que suporta VAPs. Se a sua placa 802.11 usa um chipset Atheros e você instala a versão correta do driver MadWifi, você pode configurar sua placa para o modo STA + AP simultâneo da seguinte forma:

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

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

Você pode querer o Google por algo como " wifi vap " para mais informações. Copiei os comandos acima de aqui .

Ah, e algumas quebras de mitos: cartões Atheros não são incomuns em máquinas de consumo. Eles são um participante importante dos chipsets 802.11, junto com a Broadcom, Marvell, Intel e Ralink. E só porque eu usei o exemplo do MadWifi / Atheros, não significa que não existam drivers do Linux para os chips dos outros grandes players que podem fazer uma coisa similar. 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ê tem que suportar o protocolo Spanning Tree apenas para encaminhar quadros de uma interface para outra.

    
por 23.06.2010 / 18:16
3

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

iw phy phy0 interface add wlan1 type managed

Mais informações sobre isso estão disponíveis no link . Phy0 refere-se ao que você vê em / sys / class / ieee80211 /.

Eu também vi o rPI3 fazer algo parecido, mas com um mais sombrio __ap "modo de interface . Dessa forma, o usuário cria uma segunda interface que só é executada no modo AP e usa a interface inicial como modo cliente.

Qualquer que seja a maneira como você perceba (obviamente, o driver tem que suportá-lo), você precisará de duas interfaces (do mesmo dispositivo físico). Uma interface pode simplesmente executar o wpa_supplicant como modo cliente, o outro (modo AP) geralmente usa o hostapd para executar o ponto de acesso.

[EDIT:]

O código-fonte da ferramenta iw deixa muito claro sobre o sombrio modo __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;
} 
..

O modo __ap se traduz em um tipo NL80211_IFTYPE_AP. Eu também testei isso e isso funciona bem. É estranho que o wiki da documentação do kernel não o tenha incluído.

    
por 13.12.2016 / 13:23