━━━ Configuración de un punto de acceso ━━━
Estamos hablando de un punto de acceso junto con un puerto ethernet eth0 .
Si desea un punto de acceso junto con una conexión de cliente wlan0 a otra red wifi (repetidor wlan), mire el punto de acceso como enrutador / repetidor WiFi, opcional con puente .
Es posible configurar Raspbian Stretch como un punto de acceso wifi sin instalar software adicional. Todos los componentes necesarios están disponibles: las redes, el servidor DHCP y el puente vienen con systemd-networkd y wifi se puede configurar con wpa_supplicant . La conexión de dos interfaces eth0 y wlan0 se puede realizar mediante enrutamiento o puente. A continuación, primero la configuración para una instalación rápida y luego los detalles. Primero tenemos que cambiar a systemd-networkd .
Probado con
Raspbian Buster Lite 2019-09-26 en un Raspberry Pi 4B actualizado en 2020-01-18.
Actualizaciones realizadas con sudo apt update && sudo apt full-upgrade && sudo reboot
.
Aquí puede encontrar la última revisión probada para versiones anteriores de Raspbian .
♦ Configuración general
Cambiar a systemd-networkd
Para obtener información detallada, consulte (1) y Cómo configurar la resolución de nombres con systemd-networkd . Aquí solo en resumen. Ejecute estos 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
Configure wpa_supplicant como punto de acceso
Para configurar wpa_supplicant como punto de acceso crear este archivo con la configuración de country=
, ssid=
, psk=
y tal vez frequency=
. Simplemente puede copiar y pegar esto en un bloque en su línea de comando comenzando con cat
e incluyendo ambos EOF (el delimitador EOF no obtendrá parte del archivo):
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
Configuración general terminada. Regresa.
♦ Configuración de un punto de acceso independiente
Ejemplo para esta configuración:
wifi
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0)
\ /
(dhcp) 192.168.4.1
Realice la "Configuración general" y luego cree el siguiente archivo para configurar wlan0 . Solo tenemos el punto de acceso. No hay un 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
Si quieres esto, reinicia.
Eso es.
De lo contrario, no es necesario reiniciar en este momento.
♦ Configurar un punto de acceso y con eth0, sin enrutamiento
Ejemplo para esta configuración:
|
wifi | wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / | \ /
(dhcp) 192.168.4.1 | (dhcp) 192.168.50.1
Preparar
Haga "Configuración de un punto de acceso independiente" y luego cree el siguiente archivo para configurar 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
Reiniciar.
Eso es.
Detalles
La interfaz eth0 está conectada con un cable de ethernet al enrutador de internet y DHCP la configura desde el enrutador de internet. No es problema darle una dirección IP estática con, por ejemplo, en Address=192.168.50.2
lugar de DHCP=yes
.
Sin enrutamiento no puede entrar a Internet con el teléfono móvil. Solo puedes acceder desde el RPi para obtener actualizaciones o algo así.
♦ Configuración de un punto de acceso y con eth0, con NAT (recomendado)
Ejemplo para esta configuración:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \
(dhcp) 192.168.4.1 (dhcp)
Preparar
Realice la "Configuración general" y luego cree los siguientes archivos para configurar wlan0 y eth0 . Si ha probado una de las configuraciones anteriores, puede sobrescribir los dos archivos. Asegúrese de utilizar una subred diferente para el punto de acceso que la del enrutador. El enrutador en este ejemplo no usa la subred 192.168.4.0/24. Si necesita otra subred, simplemente cambie la línea de Dirección, por ejemplo 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
Reiniciar.
Eso es.
Detalles
Si no tiene acceso al enrutador de Internet, puede simularlo con NAT (traducción de direcciones de red) para decirle una mentira que todos los paquetes provienen de su RasPi AP. Pero esto no es un enrutamiento limpio y tiene limitaciones. Los clientes en la subred del enrutador no pueden conectarse a clientes en el wifi. Pero en la mayoría de los casos esto no es necesario, por lo que se recomienda esta configuración porque simplifica la configuración. Si necesita conectarse a los clientes wifi desde la red del enrutador, debe usar el enrutamiento completo como se describe en la siguiente sección.
♦ Configuración de un punto de acceso y con eth0, con enrutamiento
Ejemplo para esta configuración:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \ /
(dhcp) 192.168.4.1 192.168.50.2 192.168.50.1
Preparar
Haga "Configuración general" y luego cree los siguientes archivos para configurar wlan0 y eth0 . Si ha probado una de las configuraciones anteriores, puede sobrescribir los dos archivos. Asegúrese de utilizar diferentes subredes para el punto de acceso y la red del enrutador. Tenemos que usar direcciones IP estáticas porque debemos usarlas como puertas de enlace.
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
Reiniciar.
Para completar el enrutamiento, debe establecer una ruta estática en su enrutador de Internet para que pueda encontrar la ruta para los paquetes que regresan a través de RasPi a los clientes conectados por wifi al punto de acceso. En la mayoría de los enrutadores de Internet, puede establecer una ruta estática, pero la forma de hacerlo varía de un modelo a otro. Depende de usted descubrirlo. Por ejemplo tu RasPi interfaz eth0 tiene la dirección IP estática 192.168.50.2. Luego, en su enrutador, la puerta de enlace (siguiente salto) es 192.168.50.2, la red de destino es 192.168.4.0/24 (o 192.168.4.0 máscara de red 255.255.255.0).
Eso significa para el enrutador de Internet: "enviar todos los paquetes que pertenecen a la subred 192.168.4.0/24
(red de destino desde AP) al siguiente enrutador de mi subred, el RasPi AP 192.168.50.2
(puerta de enlace). Sabe a dónde ir".
Eso es.
♦ Configurar un punto de acceso con un puente
Ejemplo para esta configuración:
RPi
wifi ┌──────bridge──────┐ wired wan
mobile-phone <.~.~.~> │(wlan0) br0 (eth0)│ <-------> router <-----> INTERNET
\ | / DHCP-server
(dhcp (dhcp 192.168.50.1
from router) from router)
Si ya tiene una red Ethernet con un servidor DHCP y un enrutador de Internet y desea expandirla con un punto de acceso wifi pero con las mismas direcciones IP, entonces use un puente. Esto a menudo se usa como un enlace ascendente a un enrutador.
Preparar
Realice la "Configuración general" y luego cree los siguientes tres archivos para configurar las interfaces de red. Si ha probado una de las configuraciones anteriores, puede eliminar todos los archivos /etc/systemd/network/
excepto 99-default.link
si están presentes. Las direcciones IP son ejemplos. Tienes que usar el tuyo.
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
Ahora tenemos que decirle a wpa_supplicant que use un puente. Lo hacemos modificando su servicio con:
rpi ~# systemctl edit wpa_supplicant@wlan0.service
En el editor vacío, inserte estas declaraciones, guárdelas y salga del 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
Reiniciar.
Eso es.
Detalles
Tenemos que decirle a wpa_supplicant que su interfaz wlan0 es esclava de un puente. De lo contrario, rechazará que el cliente se conecte con una "contraseña incorrecta", lo que significa que la negociación de claves no funciona. Cuando le decimos a / sbin / wpa_supplicant con la opción -dbr0
de usar un puente para wlan0 , la interfaz ya debe ser miembro del puente. Eso es lo que hacemos con la caída del archivo (superposición) para el servicio wpa_supplicant . La declaración vacía ExecStart=
elimina la entrada anterior. De lo contrario, tiene dos líneas ExecStart=
y wpa_supplicant se iniciará dos veces. El original con el ExecStart=
que puedes ver systemctl cat wpa_supplicant@wlan0.service
.
Normalmente, el enrutador al que está conectado con el cable de Ethernet tiene un servidor DHCP habilitado. El puente también es transparente para las solicitudes DHCP de las estaciones (dispositivos conectados al punto de acceso) para que no tenga que preocuparse por la configuración de sus interfaces con direcciones IP y opciones. El enrutador lo servirá.
excursus:
Pero si el enrutador no tiene un servidor DHCP, puede configurar uno en el RasPi. systemd-networkd tiene opciones para configurar su servidor DHCP incorporado, pero el problema es que systemd-networkd supone que se está ejecutando en el enrutador y eso no es cierto en este caso. Servirá opciones incorrectas a las estaciones, en particular la opción de enrutador . No hay forma de configurarlo. Entonces tenemos que instalardnsmasq
en este caso, se puede configurar según sea necesario. Instálelo y configúrelo con (por ejemplo, use sus propias direcciones 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 ~$
En este ejemplo, se encuentran las direcciones IP 192.168.50.128 a 192.168.50.164 reservadas para dar a las estaciones. Para otras direcciones IP estáticas, use una fuera de este grupo, también la dirección IP para el puente.
♦ Optimizando
Al iniciar wpa_supplicant , generalmente recibe estos mensajes en el diario:
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
No es un gran problema. wpa_supplicant necesita números aleatorios para generar claves de cifrado. Esto se hace un poco lento, por lo que tiene que esperar. Afortunadamente, el RasPi tiene una construcción en T rue R andom N umber G enerator (TRNG). Podemos usarlo y acelerar la obtención de números aleatorios instalando un software (3) con:
rpi ~$ sudo apt install rng-tools
Actualización:
desde Raspbian Stretch 2019-04-08 no hay necesidad de instalar rng-tools
. Se instalan por defecto.
♦ Solución de problemas
systemd-networkd
Mire el estado de un servicio:
rpi ~$ systemctl status systemd-networkd.service
rpi ~$ systemctl status wpa_supplicant@wlan0.service
O incluso un poco más:
rpi ~$ journalctl --boot --pager-end
Me pareció útil seguir el registro continuo:
rpi ~$ journalctl --boot --follow
Si ha realizado una caída en el archivo, puede ver el resultado:
rpi ~$ systemctl cat wpa_supplicant@wlan0.service
Para verificar el entorno de tiempo de ejecución de una unidad, puede mostrarlo y, por ejemplo, ver si hay dos ExecStart=
líneas:
rpi ~$ systemctl show wpa_supplicant@wlan0.service
Y si no hay nada que otros ayudan puede activar la opción de depuración de /sbin/wpa_supplicant
con -d
un descenso de archivo:
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
La salida está en el diario. De esta manera, he encontrado el problema con la negociación de claves incorrecta.
Wifi
Si ha configurado el punto de acceso, debe encontrarlo con un teléfono móvil. Mostrando las redes disponibles, se presenta con el nombre RPiNet y puede conectarse a él. En RasPi también puedes usar el 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 puede ver, es de tipo AP (punto de acceso) y también le mostrará qué canal está utilizando. Un problema puede ser traducir un canal a frecuencia. La frecuencia debe coincidir con un canal. Puede mirar (2) para obtener una lista de canales WLAN. Por ejemplo, para el uso del canal 36 en la banda de 5,1 GHz tiene que establecer frequency=5180
en /etc/wpa_supplicant\wpa_supplicant.conf
. Pero debe estar seguro de que su wifi es compatible con la banda de 5.1 GHz. Puedes consultar consudo iw phy
. Esto te dará mucha información. También debe contener frecuencias compatibles por encima de 5000 MHz. Si solo ve frecuencias de 24xx MHz, por supuesto, solo puede usar esto.
Otro punto podría ser números aleatorios. Para cifrar claves para conexiones seguras, wpa_supplicant necesita números aleatorios. Generar esto es muy lento en una Raspberry Pi. Si no tiene suficiente entropía para generar claves de cifrado, wpa_supplicant rechazará la autenticación. Puedes ver con cat /proc/sys/kernel/random/entropy_avail
cuánta entropía hay disponible. Debe ser> 1000 para trabajar lo suficientemente rápido. Para acelerar esto, rng-tools
se instalan por defecto. Mire la sección Optimización para más información.
referencias:
[1] Cómo migrar de la red a systemd-networkd con conmutación por error dinámica
[2] Lista de canales WLAN
[3] Rng-tools