━━━ Configurando um ponto de acesso ━━━
Estamos falando de um ponto de acesso junto com uma porta ethernet eth0 .
Se você deseja um ponto de acesso junto com uma conexão do cliente wlan0 a outra rede wifi (repetidor wlan), consulte o ponto de acesso como roteador / repetidor WiFi, opcional com bridge .
É possível configurar Raspbian estiramento como um ponto de acesso wi-fi sem instalar software adicional. Todos os componentes necessários estão disponíveis: a rede, o servidor DHCP e a ponte são fornecidos com systemd-networkd e o wifi pode ser configurado com wpa_supplicant . A conexão de duas interfaces eth0 e wlan0 pode ser feita por roteamento ou por ponte. Abaixo primeiro a configuração para instalação rápida e depois os detalhes. Primeiro, temos que mudar para systemd-networkd .
Testado com
Raspbian Buster Lite 2019-09-26 em um Raspberry Pi 4B atualizado em 2020-01-18.
Atualizações feitas com sudo apt update && sudo apt full-upgrade && sudo reboot
.
Aqui você encontra a última revisão testada para versões anteriores do Raspbian .
♦ configuração geral
Alterne para systemd-networkd
Para obter informações detalhadas, consulte (1) e Como configurar a resolução de nomes com systemd-networkd . Aqui apenas em suma. Execute estes comandos:
# deinstall classic networking
rpi ~$ sudo -Es
rpi ~# apt --autoremove purge ifupdown dhcpcd5 isc-dhcp-client isc-dhcp-common
rpi ~# rm -r /etc/network /etc/dhcp
# enable systemd-networkd
rpi ~# systemctl enable systemd-networkd.service
# setup systemd-resolved
rpi ~# systemctl enable systemd-resolved.service
rpi ~# apt --autoremove purge avahi-daemon
rpi ~# apt install libnss-resolve
rpi ~# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
Configurar wpa_supplicant como ponto de acesso
Para configurar o wpa_supplicant como ponto de acesso criar esse arquivo com as configurações para country=
, ssid=
, psk=
e talvez frequency=
. Você pode simplesmente copiar e colar isso em um bloco na sua linha de comando, começando com cat
e incluindo os dois EOF (o delimitador EOF não fará parte do arquivo):
rpi ~# cat > /etc/wpa_supplicant/wpa_supplicant-wlan0.conf <<EOF
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="RPiNet"
mode=2
frequency=2437
#key_mgmt=NONE # uncomment this for an open hotspot
# delete next 3 lines if key_mgmt=NONE
key_mgmt=WPA-PSK
proto=RSN WPA
psk="password"
}
EOF
rpi ~# chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
rpi ~# systemctl disable wpa_supplicant.service
rpi ~# systemctl enable wpa_supplicant@wlan0.service
Configuração geral concluída. Volte.
♦ Configurando um ponto de acesso independente
Exemplo para esta configuração:
wifi
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0)
\ /
(dhcp) 192.168.4.1
Faça "Configuração geral" e crie o seguinte arquivo para configurar o wlan0 . Nós só temos o ponto de acesso. Não há dispositivo ethernet configurado.
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
DHCPServer=yes
EOF
Se você quiser isso, reinicie.
É isso aí.
Caso contrário, continue, não há necessidade de reiniciar no momento.
♦ Configurando um ponto de acesso e com eth0, sem roteamento
Exemplo para esta configuração:
|
wifi | wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / | \ /
(dhcp) 192.168.4.1 | (dhcp) 192.168.50.1
Configuração
Faça "Configurando um ponto de acesso independente" e crie o seguinte arquivo para configurar o eth0 .
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DHCP=yes
EOF
Reinicie.
É isso aí.
Detalhes
A interface eth0 é conectada com um cabo Ethernet ao roteador da Internet e obtém a configuração por DHCP do roteador da Internet. Não há problema em fornecer um endereço IP estático com, por exemplo, em Address=192.168.50.2
vez de DHCP=yes
.
Sem roteamento, você não pode acessar a Internet com o celular. Você só pode acessar o RPi para obter atualizações ou algo assim.
♦ Configurando um ponto de acesso e com eth0, com NAT (recomendado)
Exemplo para esta configuração:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \
(dhcp) 192.168.4.1 (dhcp)
Configuração
Faça "Configuração geral" e crie os seguintes arquivos para configurar wlan0 e eth0 . Se você tentou uma das configurações anteriores, basta substituir os dois arquivos. Certifique-se de usar uma sub-rede diferente para o ponto de acesso que a do roteador. O roteador neste exemplo não usa a sub-rede 192.168.4.0/24. Se você precisar de outra sub-rede, basta alterar a linha de Endereço, por exemplo Address=192.168.5.1/24
.
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
# IPMasquerade is doing NAT
IPMasquerade=yes
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DHCP=yes
IPForward=yes
EOF
Reinicie.
É isso aí.
Detalhes
Se você não tiver acesso ao roteador da Internet, poderá falsificá-lo com NAT (tradução de endereços de rede) para mentir que todos os pacotes são provenientes do seu RasPi AP. Mas esse não é um roteamento limpo e tem limitações. Os clientes na sub-rede do roteador não podem se conectar aos clientes no wifi. Mas, na maioria dos casos, isso não é necessário; portanto, essa configuração é recomendada porque simplifica a instalação. Se você precisar se conectar aos clientes wifi da rede do roteador, precisará usar o roteamento completo, conforme descrito na próxima seção.
♦ Configurando um ponto de acesso e com eth0, com roteamento
Exemplo para esta configuração:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \ /
(dhcp) 192.168.4.1 192.168.50.2 192.168.50.1
Configuração
Faça "Configuração geral" e crie os seguintes arquivos para configurar wlan0 e eth0 . Se você tentou uma das configurações anteriores, basta substituir os dois arquivos. Certifique-se de usar sub-redes diferentes para o ponto de acesso e a rede do roteador. Temos que usar endereços IP estáticos porque devemos usá-los como gateways.
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
Address=192.168.50.2/24
Gateway=192.168.50.1
DNS=84.200.69.80 1.1.1.1
IPForward=yes
EOF
Reinicie.
Para que o roteamento seja concluído, você deve definir uma rota estática no roteador da Internet para encontrar a rota de retorno dos pacotes através do RasPi aos clientes conectados por Wi-Fi ao ponto de acesso. Na maioria dos roteadores da Internet, você pode definir uma rota estática, mas como fazer isso varia de modelo para modelo. Cabe a você descobrir. Por exemplo, sua interface RasPi eth0 possui o endereço IP estático 192.168.50.2. Em seguida, no roteador, o gateway (próximo salto) é 192.168.50.2, a rede de destino é 192.168.4.0/24 (ou 192.168.4.0 máscara de rede 255.255.255.0).
Isso significa para o roteador da Internet: "envie todos os pacotes pertencentes à sub-rede 192.168.4.0/24
(rede de destino do ponto de acesso) para o próximo roteador na minha sub-rede, o RasPi AP 192.168.50.2
(gateway). Ele sabe para onde continuar."
É isso aí.
♦ Configurando um ponto de acesso com uma ponte
Exemplo para esta configuração:
RPi
wifi ┌──────bridge──────┐ wired wan
mobile-phone <.~.~.~> │(wlan0) br0 (eth0)│ <-------> router <-----> INTERNET
\ | / DHCP-server
(dhcp (dhcp 192.168.50.1
from router) from router)
Se você já possui uma rede Ethernet com servidor DHCP e roteador da Internet e deseja expandi-la com um ponto de acesso wifi, mas com os mesmos endereços IP, usa uma ponte. Isso geralmente é usado como um uplink para um roteador.
Configuração
Faça "Configuração geral" e crie os três arquivos a seguir para configurar as interfaces de rede. Se você tentou uma das configurações anteriores, basta excluir todos os arquivos, /etc/systemd/network/
exceto 99-default.link
se houver. Os endereços IP são exemplos. Você tem que usar o seu próprio.
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/02-br0.netdev <<EOF
[NetDev]
Name=br0
Kind=bridge
EOF
rpi ~# cat > /etc/systemd/network/04-br0_add-eth0.network <<EOF
[Match]
Name=eth0
[Network]
Bridge=br0
EOF
rpi ~# cat > /etc/systemd/network/12-br0_up.network <<EOF
[Match]
Name=br0
[Network]
MulticastDNS=yes
DHCP=yes
# to use static IP uncomment these and comment DHCP=yes
#Address=192.168.50.60/24
#Gateway=192.168.50.1
#DNS=84.200.69.80 1.1.1.1
EOF
Agora temos que dizer ao wpa_supplicant para usar uma ponte. Fazemos isso modificando seu serviço com:
rpi ~# systemctl edit wpa_supplicant@wlan0.service
No editor vazio, insira essas instruções, salve-as e feche o editor:
[Service]
ExecStartPre=/sbin/iw dev %i set type __ap
ExecStartPre=/bin/ip link set %i master br0
ExecStart=
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -Dnl80211,wext -i%I -bbr0
ExecStopPost=-/bin/ip link set %i nomaster
ExecStopPost=-/sbin/iw dev %i set type managed
Reinicie.
É isso aí.
Detalhes
Temos que dizer ao wpa_supplicant que sua interface wlan0 é escrava de uma ponte. Caso contrário, ele rejeitará a conexão do cliente com "senha incorreta" significa que a negociação da chave não funciona. Quando dizemos ao / sbin / wpa_supplicant a opção -dbr0
de usar uma ponte para wlan0 , a interface já deve ser um membro da ponte. É o que fazemos com a queda no arquivo (sobreposição) para o serviço wpa_supplicant . A instrução vazia ExecStart=
exclui a entrada antiga. Caso contrário, você tem duas linhas ExecStart=
e o wpa_supplicant será iniciado duas vezes. O original com o qual ExecStart=
você pode ver systemctl cat wpa_supplicant@wlan0.service
.
Normalmente, o roteador ao qual você está conectado com o cabo Ethernet possui um servidor DHCP ativado. A ponte também é transparente para solicitações de DHCP das estações (dispositivos conectados ao ponto de acesso), para que você não precise se preocupar com a configuração de suas interfaces com endereços e opções de IP. O roteador servirá.
excursus:
Mas se o roteador não tiver um servidor DHCP, você poderá configurar um no RasPi. O systemd-networkd tem opções para configurar seu servidor DHCP embutido, mas o problema é que o systemd-networkd assume que está sendo executado no próprio roteador e isso não é verdade neste caso. Servirá opções erradas para as estações, em particular a opção de roteador . Não há como configurá-lo. Então nós temos que instalardnsmasq
nesse caso, pode ser configurado conforme necessário. Instale e configure-o com (por exemplo, use seus próprios endereços IP):
rpi ~$ sudo -Es
rpi ~# apt install dnsmasq
rpi ~# systemctl stop dnsmasq
rpi ~# mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
rpi ~# cat > /etc/dnsmasq.conf <<EOF
interface=br0
dhcp-range=192.168.50.128,192.168.50.164,255.255.255.0,24h
dhcp-option=option:router,192.168.50.1
dhcp-option=option:dns-server,8.8.8.8,1.1.1.1
EOF
rpi ~# systemctl start dnsmasq
rpi ~# exit
rpi ~$
Neste exemplo, os endereços IP 192.168.50.128 a 192.168.50.164 estão reservados para fornecer às estações. Para outros endereços IP estáticos, use um fora desse pool, também o endereço IP da própria ponte.
♦ Otimizando
Ao iniciar o wpa_supplicant, você recebe principalmente essas mensagens no diário:
wpa_supplicant[427]: random: Cannot read from /dev/random: Resource temporarily unavailable
wpa_supplicant[427]: random: Only 12/20 bytes of strong random data available from /dev/random
wpa_supplicant[427]: random: Not enough entropy pool available for secure operations
wpa_supplicant[427]: WPA: Not enough entropy in random pool for secure operations - update keys later when the first station connects
Não é um grande problema. O wpa_supplicant precisa de números aleatórios para gerar chaves de criptografia. Isso é feito um pouco devagar, por isso tem que esperar. Felizmente o Raspi tem uma configuração em T rue R Andom N úmero L enerator (TRNG). Podemos usá-lo e acelerar a obtenção de números aleatórios instalando um software (3) com:
rpi ~$ sudo apt install rng-tools
Atualização:
Desde o Raspbian Stretch 2019-04-08, não há necessidade de instalar rng-tools
. Eles são instalados por padrão.
♦ solução de problemas
systemd-networkd
Veja o status de um serviço:
rpi ~$ systemctl status systemd-networkd.service
rpi ~$ systemctl status wpa_supplicant@wlan0.service
Ou até um pouco mais:
rpi ~$ journalctl --boot --pager-end
Achei útil seguir o log em andamento:
rpi ~$ journalctl --boot --follow
Se você fez uma queda no arquivo, pode ver o resultado:
rpi ~$ systemctl cat wpa_supplicant@wlan0.service
Para verificar o ambiente de tempo de execução de uma unidade, você pode mostrá-lo e, por exemplo, verificar se há duas ExecStart=
linhas:
rpi ~$ systemctl show wpa_supplicant@wlan0.service
E se nada outros ajudam você pode ativar a opção de depuração /sbin/wpa_supplicant
com -d
em uma queda no arquivo:
rpi ~$ sudo systemctl edit wpa_supplicant@wlan0.service
ExecStart=
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -Dnl80211,wext -i%I -bbr0 -d
A saída está no diário. Dessa forma, eu encontrei o problema com a negociação de chave errada.
Wi-fi
Se você configurou o ponto de acesso, deve encontrá-lo em um telefone celular. Mostrando as redes disponíveis, ele é apresentado com o nome RPiNet e você pode se conectar a ele. No RasPi, você também pode usar o comando:
rpi ~$ sudo iw dev wlan0 info
phy#0
Interface wlan0
ifindex 3
wdev 0x2
addr b8:27:eb:06:e8:8b
ssid RPiNet
type AP
channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz
Como você pode ver, é do tipo AP (ponto de acesso) e também mostrará qual canal está usando. Um problema pode ser converter um canal em frequência. A frequência deve corresponder a um canal. Você pode procurar (2) uma lista de canais WLAN. Por exemplo, para canal de uso 36 na banda de 5,1 GHz você tem que definir frequency=5180
no /etc/wpa_supplicant\wpa_supplicant.conf
. Mas você deve ter certeza de que o seu wifi suporta a banda de 5,1 GHz. Você pode verificar com sudo iw phy
. Isso lhe dará um monte de informações. Ele também deve conter frequências suportadas acima de 5000 MHz. Se você vir apenas frequências de 24xx MHz, é claro que só poderá usá-lo.
Outro ponto poderia ser números aleatórios. Para chaves de criptografia para conexões seguras, o wpa_supplicant precisa de números aleatórios. Gerar isso é muito lento em um Raspberry Pi. Se não houver entropia suficiente para gerar chaves de criptografia, o wpa_supplicant rejeitará a autenticação. Você pode ver cat /proc/sys/kernel/random/entropy_avail
quantas entropias estão disponíveis. Deve ser> 1000 para funcionar rápido o suficiente. Para acelerar isso, eles rng-tools
são instalados por padrão. Consulte a seção Otimizando para obter mais informações.
referências:
[1] Como migrar da rede para a systemd-networkd com failover dinâmico
[2] Lista de canais WLAN
[3] Rng-tools