━━━ 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 cate 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.2vez 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.linkse 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 -dbr0de 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 instalardnsmasqnesse 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_supplicantcom -dem 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=5180no /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_availquantas entropias estão disponíveis. Deve ser> 1000 para funcionar rápido o suficiente. Para acelerar isso, eles rng-toolssã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