- Seleção de componentes
- Iniciar interfaces de rede
- Configurando um ponto de acesso 802.11ac (5 GHz)
- Configurando um SSID virtual usando o hostapd
Nos últimos dez anos, comprei equipamentos de rede baratos e instalei o
DD-WRT nele para devolver as “funções” por mais de US $ 500 removidos do kernel Linux, no qual o firmware padrão é baseado.
Apesar das compilações instáveis, erros e
disputas não corrigidos, o DD-WRT ainda é preferível ao estoque de firmware. Mas agora os componentes dignos estão mais baratos do que nunca, e a comunidade DIY mudou completamente para o Linux (estou olhando para você, Sr. Raspberry), então por que não construir seu próprio roteador sem fio de uma vez por todas?
Seleção de componentes
Primeiro de tudo, você precisa decidir sobre a plataforma:
x86 ou
ARM ? Não
discutirei em detalhes as principais diferenças , mas brevemente: o primeiro tem melhor desempenho, enquanto o segundo é mais barato e mais eficiente em termos de energia. As placas Raspberry Pi (e equivalentes) são extremamente baratas e provavelmente mais poderosas do que a maioria dos roteadores comerciais sem fio, mas as plataformas x86 são comuns e têm a vantagem de fatores de forma e portas de expansão padronizados.
Obviamente, o detalhe mais importante é o chipset. Hoje, os padrões de fato são
802.11n (2.4 GHz) e
802.11ac (5 GHz), mas escolher drivers para Linux
ainda é
um desafio , especialmente com suporte ao modo AP (ponto de acesso). Em resumo, se você não quer problemas, escolha os chipsets
Atheros . Os
drivers ath9k e
ath10k são bem suportados, você pode encontrá-los facilmente com interfaces USB e / ou mini-PCIe.
Pelo menos um NIC (controlador de interface de rede) é o mínimo necessário e escolha RAM e armazenamento ao seu gosto.
Lista de materiais
Sacrificando preço e energia, optei pela plataforma x86 por uma configuração modular relativamente poderosa disponível para atualização.
Se você não precisar de um ARM, não é necessário um ventilador.A caixa é espaçosa, com dois orifícios preparados para o plugue CA / CC. A instalação da placa-mãe, RAM e Pico-PSU ocorreu sem problemas:
Ferro pornôO mais difícil foi instalar o WiFi mini-PCIe, porque a placa suporta apenas placas de tamanho médio: aqui o cabo de extensão mPCIe veio em socorro. Peguei um cabo FFC de 20 cm (incluído) para conectar os dois lados do adaptador e fixei o mini-PCIe ao chassi usando fita dupla face.


Expansor mini-PCIeFelizmente, o chassi vem com três furos de antena pré-cortados. Aqui está o resultado final:


De software
É claro que colocamos o Linux. Dependendo do hardware, pode ser uma distribuição otimizada como
Raspbian (para o Raspberry Pi) ou qualquer outra distribuição Linux que você desejar. Como uso o Ubuntu há muitos anos, escolhi o
Ubuntu Server 18.04 LTS , com o qual estou mais acostumado a trabalhar e com quem há suporte a longo prazo.
O restante deste artigo assume que você está usando uma distribuição baseada em Debian.Se a instalação foi boa e você foi ao console, defina os nomes da interface:
$ ip -br a | awk '{print $1}' lo enp1s0 enp2s0 wlp5s0
Existem duas placas de rede embutidas na placa-mãe: são
enp1s0
e
enp2s0
. A placa sem fio aparece como
wlp5s0
e suporta o modo AP, conforme pretendido:
$ iw list ... Supported interface modes: * managed * AP * AP/VLAN * monitor * mesh point
Agora podemos descrever o que precisamos: colocamos a primeira NIC como uma porta WAN e a segunda nos conectamos à interface sem fio:

Rede
Se você possui o Ubuntu 18.04, livre-se do
netplan
imediatamente para retornar ao suporte para / etc / network / interfaces:
$ sudo apt-get install ifupdown bridge-utils $ sudo systemctl stop networkd-dispatcher $ sudo systemctl disable networkd-dispatcher $ sudo systemctl mask networkd-dispatcher $ sudo apt-get purge nplan netplan.io
Como servidor DHCP / DNS, selecione
dnsmasq :
$ sudo apt-get install dnsmasq
Como iniciaremos e configuraremos o processo
dnsmasq
através do gancho de
post-up
, lembre-se de desativar o daemon no momento da inicialização:
$ sudo sed -i "s/^ENABLED=1$/ENABLED=0/g" /etc/default/dnsmasq
Escreveremos a configuração
preliminar das interfaces de rede de acordo com o diagrama, incluindo a configuração mínima do
dnsmasq
:
$ cat /etc/network/interfaces
A documentação /etc/network/interfaces
aquiComo você pode ver na seção de
post-up
, o dnsmasq inicia assim que a ponte aumenta. Sua configuração é realizada apenas por argumentos de linha de comando (
--conf-file=/dev/null
), e o processo será interrompido quando a interface estiver desativada.
A interface
bridge_ports
não está especificada especificamente no
wlp5s0
, porque o
hostapd
a adicionará automaticamente à ponte (o brctl pode se recusar a fazer isso antes que o hostapd seja iniciado para alterar o modo da interface).
Consulte a documentação do dnsmasq
.Agora você pode reiniciar a rede (reinício da rede do
sudo service networking restart
) ou simplesmente reiniciar para verificar se a configuração da rede está correta.
Observação: embora atualmente possamos receber o DHCP do
enp2s0
, não teremos
conexão sem fio (mais sobre isso mais tarde)
ou acesso à Internet (veja abaixo).
Encaminhamento
Nesse ponto, você precisa rotear pacotes entre as
enp2s0
LAN (
enp2s0
) e WAN (
enp1s0
) e ativar
a conversão de endereço de rede .
É fácil ativar o encaminhamento de pacotes:
$ sudo sysctl -w net.ipv4.ip_forward=1 $ echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
O último comando garante que a configuração seja salva até a próxima reinicialização.A tradução de endereços de rede é outra questão, geralmente você precisa lidar com (ou melhor, combater) as
iptables
. Felizmente, a Idade da Pedra acabou, e os caras do FireHol se esforçaram bastante para adicionar o nível necessário de abstração:
$ sudo apt-get install firehol
FireHOL é uma linguagem de firewall segura de última geração, sua configuração é fácil de entender e acessível. Você não precisa mais escrever instruções
iptables
: o próprio arquivo de configuração é convertido em instruções
iptables
e aplicado conforme necessário. Nenhum daemon em segundo plano.
A habilitação da tradução de endereços de rede para interfaces de LAN com a adição de regras mínimas de firewall é feita elementarmente:
$ cat /etc/firehol/firehol.conf version 6
FireHOL é escrito por pessoas para pessoas, a documentação está aqui .Você pode verificar as configurações iniciando manualmente o
firehol
(
sudo firehol start
) e conectando o laptop à porta LAN:
agora você pode ficar online se a porta WAN estiver conectada.
Antes de reiniciar,
certifique-se de editar
/etc/default/firehol
para permitir que o FireHol inicie na inicialização:
$ sudo sed -i -E "s/^START_FIREHOL=.+$/START_FIREHOL=YES/g" /etc/default/firehol
Não entrarei em detalhes de toda a sintaxe do firehol
, o arquivo de configuração se explica; recomendo firehol
a documentação no caso de uma configuração mais complexa. Se você está realmente interessado no que o firehol
fez com o iptables
, digite sudo firehol status
na linha de comando.Ponto de acesso sem fio
Obviamente, gerenciaremos o ponto de acesso usando o
hostapd :
$ sudo apt-get install hostapd
Abaixo, você encontrará um arquivo de configuração mínimo e quase inexplicável 802.11 n / 2.4 Ghz / WPA2-AES:
$ cat /etc/hostapd/hostapd-simple.conf
Veja hostpad.conf
documentação em /usr/share/doc/hostapd/examples/hostapd.conf
.
A configuração descrita pode ser testada manualmente:
$ sudo hostapd /etc/hostapd/hostapd-simple.conf
Se tudo correr bem, uma
conexão sem fio será exibida . Se você estiver satisfeito com o resultado,
não esqueça de alterar a configuração para iniciar o
hostapd
assim que a interface subir (como mostrado abaixo).
Aqui está o seu /etc/network/interfaces:
final /etc/network/interfaces:
$ cat /etc/network/interfaces
Configurando um ponto de acesso 802.11ac (5 GHz)
Varredura passiva
De acordo com a documentação
Airetos AEX-QCA9880-NX , o chipset suporta 802.11ac, para que possamos deixar os canais de 2,4 GHz lotados no paraíso de 5 GHz.
Vamos ver quais frequências são suportadas:
$ iw list ... Frequencies: * 2412 MHz [1] (20.0 dBm) * 2417 MHz [2] (20.0 dBm) * 2422 MHz [3] (20.0 dBm) * 2427 MHz [4] (20.0 dBm) * 2432 MHz [5] (20.0 dBm) * 2437 MHz [6] (20.0 dBm) * 2442 MHz [7] (20.0 dBm) * 2447 MHz [8] (20.0 dBm) * 2452 MHz [9] (20.0 dBm) * 2457 MHz [10] (20.0 dBm) * 2462 MHz [11] (20.0 dBm) * 2467 MHz [12] (disabled) * 2472 MHz [13] (disabled) * 2484 MHz [14] (disabled) ... Frequencies: * 5180 MHz [36] (17.0 dBm) (no IR) * 5200 MHz [40] (17.0 dBm) (no IR) * 5220 MHz [44] (17.0 dBm) (no IR) * 5240 MHz [48] (17.0 dBm) (no IR) * 5260 MHz [52] (23.0 dBm) (no IR, radar detection) * 5280 MHz [56] (23.0 dBm) (no IR, radar detection) * 5300 MHz [60] (23.0 dBm) (no IR, radar detection) * 5320 MHz [64] (23.0 dBm) (no IR, radar detection) * 5500 MHz [100] (23.0 dBm) (no IR, radar detection) * 5520 MHz [104] (23.0 dBm) (no IR, radar detection) * 5540 MHz [108] (23.0 dBm) (no IR, radar detection) * 5560 MHz [112] (23.0 dBm) (no IR, radar detection) * 5580 MHz [116] (23.0 dBm) (no IR, radar detection) * 5600 MHz [120] (23.0 dBm) (no IR, radar detection) * 5620 MHz [124] (23.0 dBm) (no IR, radar detection) * 5640 MHz [128] (23.0 dBm) (no IR, radar detection) * 5660 MHz [132] (23.0 dBm) (no IR, radar detection) * 5680 MHz [136] (23.0 dBm) (no IR, radar detection) * 5700 MHz [140] (23.0 dBm) (no IR, radar detection) * 5720 MHz [144] (23.0 dBm) (no IR, radar detection) * 5745 MHz [149] (30.0 dBm) (no IR) * 5765 MHz [153] (30.0 dBm) (no IR) * 5785 MHz [157] (30.0 dBm) (no IR) * 5805 MHz [161] (30.0 dBm) (no IR) * 5825 MHz [165] (30.0 dBm) (no IR) ...
Na lista acima, vemos que o chipset suporta os canais 1-14 (2,4 GHz) e os canais 36-165 (5 GHz), mas você notou a sinalização de
no IR
?
O sinalizador
no IR
indica
radiação não iniciada (isto é,
varredura passiva ). Isso significa que este modo é proibido no caso em que o dispositivo é o primeiro a iniciar radiação (incluindo
sinalizadores ). Em outras palavras,
você não pode executar o ponto de acesso nesses canais !
Requisitos regulatórios
A situação acima é explicada pelos
requisitos regulamentares do Linux , que regulam o uso do espectro de radiofrequências,
dependendo do país .
Mas ei!
Eu moro nos EUA, e o link diz que tenho o direito de iniciar a radiação nos canais 36-48, então qual é o problema? Vamos ver qual domínio regulatório está atualmente em uso:
$ iw reg get country 00: DFS-UNSET (2402 - 2472 @ 40), (N/A, 20), (N/A) (2457 - 2482 @ 40), (N/A, 20), (N/A), NO-IR (2474 - 2494 @ 20), (N/A, 20), (N/A), NO-OFDM, NO-IR (5170 - 5250 @ 80), (N/A, 20), (N/A), NO-IR (5250 - 5330 @ 80), (N/A, 20), (0 ms), DFS, NO-IR (5490 - 5730 @ 160), (N/A, 20), (0 ms), DFS, NO-IR (5735 - 5835 @ 80), (N/A, 20), (N/A), NO-IR (57240 - 63720 @ 2160), (N/A, 0), (N/A)
O problema mostra que o domínio
mundial está atualmente ativo (ou não instalado), ou seja, os
valores mínimos permitidos em cada país .
Infelizmente, você não pode instalar manualmente o domínio
sudo iw reg set
, porque o domínio está protegido na EEPROM:
$ dmesg | grep EEPROM [ 12.123068] ath: EEPROM regdomain: 0x6c
Patch!
Felizmente, os requisitos regulatórios são processados no nível do driver, para que possam ser facilmente alterados: encontramos o patch no
código-fonte do
Open-WRT .
Antes de tudo, não se esqueça de conectar o repositório de código fonte em
/etc/apt/sources.list
:
$ cat /etc/apt/sources.list ... deb-src http://us.archive.ubuntu.com/ubuntu/ bionic main restricted ...
Em seguida, prepare o ambiente instalando as dependências necessárias:
$ sudo apt-get install build-essential fakeroot $ sudo apt-get build-dep linux
Faça o download das fontes do seu kernel:
$ apt-get source linux
Como o patch
original do Open-WRT não pode ser aplicado "como está" na árvore do kernel do Ubuntu devido a diferenças sutis no sistema de compilação, eu tive que corrigi-lo:
$ VERSION=$(uname -r) $ cd linux-${VERSION%%-*} $ wget -O - https://gist.github.com/renaudcerrato/02de8b2e8dc013bc71326defd2ef062c/raw/a2db325e520e6442c8c12f7599d64ac1b7596a3e/402-ath_regd_optional.patch | patch -p1 -b
Tudo está pronto para montagem:
$ fakeroot debian/rules clean $ fakeroot debian/rules binary-generic
Se não houver problemas, agora você pode instalar o kernel fixo em cima do anterior:
$ cd .. $ sudo dpkg -i linux*.deb
Reinicialize e pronto:
$ sudo iw reg set US $ iw list ... Frequencies: * 5180 MHz [36] (17.0 dBm) * 5200 MHz [40] (17.0 dBm) * 5220 MHz [44] (17.0 dBm) * 5240 MHz [48] (17.0 dBm) * 5260 MHz [52] (23.0 dBm) (radar detection) * 5280 MHz [56] (23.0 dBm) (radar detection) * 5300 MHz [60] (23.0 dBm) (radar detection) * 5320 MHz [64] (23.0 dBm) (radar detection) * 5500 MHz [100] (23.0 dBm) (radar detection) * 5520 MHz [104] (23.0 dBm) (radar detection) * 5540 MHz [108] (23.0 dBm) (radar detection) * 5560 MHz [112] (23.0 dBm) (radar detection) * 5580 MHz [116] (23.0 dBm) (radar detection) * 5600 MHz [120] (23.0 dBm) (radar detection) * 5620 MHz [124] (23.0 dBm) (radar detection) * 5640 MHz [128] (23.0 dBm) (radar detection) * 5660 MHz [132] (23.0 dBm) (radar detection) * 5680 MHz [136] (23.0 dBm) (radar detection) * 5700 MHz [140] (23.0 dBm) (radar detection) * 5720 MHz [144] (23.0 dBm) (radar detection) * 5745 MHz [149] (30.0 dBm) * 5765 MHz [153] (30.0 dBm) * 5785 MHz [157] (30.0 dBm) * 5805 MHz [161] (30.0 dBm) * 5825 MHz [165] (30.0 dBm) ...
Para evitar atualizações automáticas, pode ser necessário corrigir a versão do kernel do Linux .Configuração
O novo
hostapd
configuração do
hostapd
será bastante simples:
hw_mode=a
inclui bandas de 5 GHz e
ieee80211ac=1
inclui 802.11ac (VHT). A opção
ieee80211d=1
com
country_code=US
especifica o domínio regulatório sob o qual operamos.
Para aproveitar ao máximo a largura de banda,
ht_capab
e
vht_capab
devem refletir os recursos do equipamento:
$ iw list ... Band 1: Capabilities: 0x19e3 RX LDPC HT20/HT40 Static SM Power Save RX HT20 SGI RX HT40 SGI TX STBC RX STBC 1-stream Max AMSDU length: 7935 bytes DSSS/CCK HT40 ... Band 2: VHT Capabilities (0x338001b2): Max MPDU length: 11454 Supported Channel Width: neither 160 nor 80+80 RX LDPC short GI (80 MHz) TX STBC RX antenna pattern consistency TX antenna pattern consistency
Com isso em mente,
aqui está o hostapd.conf
final :
$ cat /etc/hostapd/hostapd.conf
Veja hostpad.conf
documentação em /usr/share/doc/hostapd/examples/hostapd.conf
.
Nesse ponto, o roteador sem fio está totalmente operacional e, se você precisar de uma configuração mais complexa, poderá agora mergulhar nos arquivos de configuração.
Configurando um SSID virtual usando o hostapd
Independentemente de você desejar configurar um ponto de acesso de convidado ou uma rede sem fio dedicada para sua VPN, em algum momento você precisará configurar um SSID virtual.
Gráfico
Com base na
configuração atual , aqui está um diagrama atualizado do que queremos obter. Supondo que
wlp5s0
é a interface sem fio física, o SSID virtual será executado na interface virtual
wlan0
usando sua própria sub-rede
192.168.2.0/24
:

Preparação
Primeiro, verifique se o seu dispositivo sem fio suporta vários SSIDs:
$ iw list ... valid interface combinations: *
Como você pode ver, o chipset suporta até oito pontos de acesso em um canal. Isso significa que você pode configurar até sete SSIDs virtuais e todos eles funcionarão no mesmo canal.
Interface de rede
De acordo com a documentação em hostapd.conf, há uma conexão estrita entre o endereço MAC da interface física e o BSSID das interfaces virtuais:
O hostapd irá gerar uma máscara BSSID baseada nos BSSIDs configurados. O hostapd verificará se dev_addr & MASK == dev_addr . Se não for esse o caso, o endereço MAC do rádio deve ser alterado antes de iniciar o hostapd. Se um BSSID estiver configurado para cada BSS secundário, essa limitação não será aplicada no hostapd e outras máscaras poderão ser usadas se o driver as suportar (por exemplo, troque o bit administrado localmente)
Os BSSIDs são atribuídos em ordem a cada BSS, a menos que um BSSID explícito seja especificado usando o parâmetro 'bssid'.
Se um BSSID explícito for especificado, ele deverá ser escolhido de forma que:
- resulta em uma máscara válida que a cobre e o dev_addr
- não é o mesmo que o endereço MAC do rádio
- não é o mesmo que qualquer outro BSSID explicitamente especificado
Para atender a esses requisitos e permitir que o
hostapd
atribua automaticamente o BSSID da (s) interface (s) virtual (is), atualizamos o endereço MAC da interface física sem fio, zerando os quatro bits menos significativos. Isso é suficiente para 15 BSSIDs virtuais - muito mais que o necessário.
Primeiro, determine o endereço MAC atual:
$ ip addr show wlp5s0 | grep link | awk '{print $2}' 44:c3:06:00:03:eb
Se você limpar os últimos quatro bits e definir o
U / L , obterá o endereço MAC
46:c3:06:00:03:e0
.
Agora, atualizaremos a configuração para definir o endereço MAC correto antes de carregar a interface e também declararemos uma interface sem fio virtual de acordo com nosso diagrama:
$ cat /etc/network/interfaces ...
Ótimo. Eu uso o
dnsmasq
como um servidor DHCP -
dnsmasq
à vontade para substituir o que quiser. Observe que, para que a interface virtual funcione corretamente, é necessário o
allow-hotplug
.
Configuração do ponto de acesso
Agora, a coisa mais simples: adicione um SSID virtual à configuração atual do
hostapd
. Basta adicionar isso
ao final do arquivo
hostapd.conf
existente:
$ cat /etc/hostapd/hostapd.conf ...
No exemplo, usei a criptografia WPA2, mas a maioria das opções de interface de rádio está disponível aqui (por exemplo,
channel
). Você pode adicionar mais SSIDs virtuais simplesmente adicionando as linhas no arquivo de configuração de acordo com as interfaces virtuais declaradas e configuradas corretamente.
Agora reinicie - e veja seu novo SSID junto com a nova interface sem fio (preste atenção ao endereço MAC):
$ ip addr show wlan0 | grep link | awk '{print $2}' 46:c3:06:00:03:e1
É isso aí pessoal!