Raspbian에서 systemd를 통해 Wi-Fi를 자동으로 다시 연결

Raspbian에서 systemd를 통해 Wi-Fi를 자동으로 다시 연결

설정: rasbian raspberry pi 4.4.14-v7+ 및 네트워크 관련 항목을 위한 시스템입니다.

내부 Broadcom Wi-Fi 사용

액세스 포인트: Hostapd 1:2.3-1+deb8u3 및 4.4.14-v7+를 사용하는 또 다른 RPi3

저는 Hostapd 액세스 포인트(WPA2)에 연결을 시도하는 RPI를 "클라이언트"라고 부릅니다.

Hostapd는 Wi-Fi 인터페이스에서 isc-dhcp 서버를 사용하며 정상적으로 작동합니다(임대 보내기, 임대 갱신, DHCPACK 등).

필요하다:

/etc/network/interfaces를 통한 폴백 모드나 해당 파일에 의존하는 ifplugd를 통한 유사한 설정을 허용할 수 없습니다.

현재 우리는 기본 dhcpcd 대신 dhclient를 사용합니다.

다른 네트워크 관리자와 그래픽 도구는 사용할 수 없습니다.

질문:

짧은 시간 동안 액세스 포인트에 액세스할 수 없는 경우(재시작, 정전 등) Wi-Fi가 다시 작동하려면 클라이언트를 완전히 재부팅해야 합니다.

이 시점에서는 wpa_supplicant를 통해 AP에 연결되어 있지 않습니다. (hostapd_cli all_sta는 내 클라이언트 Wi-Fi MAC을 표시하지 않습니다)

iwconfig wlan0 wlan0 IEEE 802.11bgn ESSID: off/any
모드: 관리형 액세스 포인트: 연결되지 않음 Tx-Power=31 dBm
재시도 단기 제한: 7 RTS thr:off 조각 thr:off 암호화 키:off 전원 관리:off

이 문제에 대한 "이전" 버전의 솔루션은 ifplugd 스크립트(ifup/ifdown 작업) 및/또는 /etc/network/interfaces에서 wpa-roam을 설정하고 호환성 레이어 "networking.service - LSB: Lift Network를 사용하는 것이었습니다. 인터페이스". "

또 다른 옵션은 cronjob을 사용하여 실패한 연결을 감지하고 $SOMETHING을 다시 시작하는 것입니다.

불행히도 $SOMETHING이 무엇인지 알 수 없습니다.

저는 systemd-network 방식만 사용하고 싶기 때문에 "network" 유닛은 로드하지 않습니다.

제 생각에는 wpa_supplicant가 AP를 다시 스캔하려고 시도하지만 일치하는 AP SSID를 거부하는 것 같습니다.

이것이 설정입니다.

로드된 서비스:

systemctl -t 서비스

UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
bluetooth.service                  loaded active running Bluetooth service
console-setup.service              loaded active exited  LSB: Set console font and keymap
cron.service                       loaded active running Regular background program processing daemon
dbus.service                       loaded active running D-Bus System Message Bus
dphys-swapfile.service             loaded active exited  LSB: Autogenerate and use a swap file
fake-hwclock.service               loaded active exited  Restore / save the current clock
[email protected]                 loaded active running Getty on tty1
hciuart.service                    loaded active running Configure Bluetooth Modems connected by UART
hdparm.service                     loaded active exited  LSB: Tune IDE hard disks
kbd.service                        loaded active exited  LSB: Prepare console
keyboard-setup.service             loaded active exited  LSB: Set preliminary keymap
kmod-static-nodes.service          loaded active exited  Create list of required static device nodes for the current kernel
[email protected]     loaded active exited  Wireless network connectivity (wlan0)
ntp.service                        loaded active running LSB: Start NTP daemon
openvpn.service                    loaded active exited  OpenVPN service
postfix.service                    loaded active running LSB: Postfix Mail Transport Agent
raspi-config.service               loaded active exited  LSB: Switch to ondemand cpu governor (unless shift key is pressed)
rc-local.service                   loaded active running /etc/rc.local Compatibility
rsyslog.service                    loaded active running System Logging Service
ssh.service                        loaded active running OpenBSD Secure Shell server
systemd-fsck-root.service          loaded active exited  File System Check on Root Device
[email protected] loaded active exited  File System Check on /dev/mmcblk0p1
systemd-journald.service           loaded active running Journal Service
systemd-logind.service             loaded active running Login Service
systemd-modules-load.service       loaded active exited  Load Kernel Modules
systemd-networkd.service           loaded active running Network Service
systemd-random-seed.service        loaded active exited  Load/Save Random Seed
systemd-remount-fs.service         loaded active exited  Remount Root and Kernel File Systems
[email protected]     loaded active exited  Load/Save RF Kill Switch Status of rfkill0
[email protected]     loaded active exited  Load/Save RF Kill Switch Status of rfkill1
systemd-setup-dgram-qlen.service   loaded active exited  Increase datagram queue length
systemd-sysctl.service             loaded active exited  Apply Kernel Variables
systemd-tmpfiles-setup-dev.service loaded active exited  Create Static Device Nodes in /dev
systemd-tmpfiles-setup.service     loaded active exited  Create Volatile Files and Directories
systemd-udev-trigger.service       loaded active exited  udev Coldplug all Devices
systemd-udevd.service              loaded active running udev Kernel Device Manager
systemd-update-utmp.service        loaded active exited  Update UTMP about System Boot/Shutdown
systemd-user-sessions.service      loaded active exited  Permit User Sessions
triggerhappy.service               loaded active running LSB: triggerhappy hotkey daemon
udev-finish.service                loaded active exited  Copy rules generated while the root was ro
[email protected]                     loaded active running User Manager for UID 0

고양이/etc/systemd/network/00-wireless.network

#General configuration wlan0
[Match]
Name=wlan0
[Network]
DHCP=ipv4

/var/log/wpa_supplicant.log에 몇 가지 추가 디버깅 정보를 설정했기 때문에 ExecStart가 평소보다 조금 더 오래 걸렸습니다.

고양이/etc/systemd/system/[이메일 보호됨]

[Unit]
Description=Wireless network connectivity (%i)
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes

ExecStart=/sbin/ip l set %i up
ExecStart=/sbin/wpa_supplicant -t -dd -f /var/log/wpa_supplicant.log -dd -B -i %i -c /etc/wpa_supplicant/wpa_supplicant.conf
ExecStart=/sbin/dhclient %i

ExecStop=/sbin/ip l set %i down

[Install]
WantedBy=multi-user.target

고양이/etc/wpa_supplicant/wpa_supplicant.conf

country=DE
ctrl_interface=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={ 
    ssid="testap"
    psk="testconn"
  }

일부 로그:

클라이언트를 시작합니다.

시스템 제어 상태[이메일 보호됨]

[email protected] - Wireless network connectivity (wlan0)
Loaded: loaded (/etc/systemd/system/[email protected]; enabled)
Active: active (exited) since Fri 2016-08-05 12:21:17 CEST; 3min 32s ago
Process: 431 ExecStart=/sbin/dhclient %i (code=exited, status=0/SUCCESS)
Process: 425 ExecStart=/sbin/wpa_supplicant -t -dd -f /var/log/wpa_supplicant.log -dd -B -i %i -c /etc/wpa_supplicant/wpa_supplicant.conf (code=exited, status=0/SUCCESS)
Process: 387 ExecStart=/sbin/ip l set %i up (code=exited, status=0/SUCCESS)
Main PID: 431 (code=exited, status=0/SUCCESS)

클라이언트를 시작합니다(모든 것이 정상이며 연결은 안정적이며 이전 테스트에서 몇 시간/일 동안 작동했습니다).

로그 ctl-u[이메일 보호됨]-비

-- Logs begin at Fri 2016-08-05 12:21:05 CEST, end at Fri 2016-08-05 12:22:53 CEST. --
Aug 05 12:21:08 testclient systemd[1]: Starting Wireless network connectivity (wlan0)...
Aug 05 12:21:09 testclient dhclient[431]: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
Aug 05 12:21:13 testclient dhclient[431]: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
Aug 05 12:21:17 testclient dhclient[431]: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
Aug 05 12:21:17 testclient dhclient[431]: DHCPACK from 192.168.100.1
Aug 05 12:21:17 testclient dhclient[431]: bound to 192.168.100.11 -- renewal in 60 seconds.
Aug 05 12:21:17 testclient systemd[1]: Started Wireless network connectivity (wlan0).
Aug 05 12:22:17 testclient dhclient[549]: DHCPREQUEST on wlan0 to 192.168.100.1 port 67
Aug 05 12:22:17 testclient dhclient[549]: DHCPACK from 192.168.100.1
Aug 05 12:22:17 testclient dhclient[549]: bound to 192.168.100.11 -- renewal in 53 seconds.

AP 다시 시작:

Aug  5 12:26:55 testclient systemd-networkd[422]: wlan0           : lost carrier
Aug  5 12:26:55 testclient dhclient: DHCPREQUEST on wlan0 to 192.168.100.1 port 67
Aug  5 12:27:00 testclient dhclient: DHCPREQUEST on wlan0 to 192.168.100.1 port 67
Aug  5 12:27:12 testclient dhclient: DHCPREQUEST on wlan0 to 192.168.100.1 port 67
Aug  5 12:27:32 testclient dhclient: DHCPREQUEST on wlan0 to 192.168.100.1 port 67

이로 인해 무선 서비스를 다시 시작하기 위한 systemd-network 장치의 "lost Carrier" 옵션이 누락되었다고 생각됩니다.

SE와 Google의 검색 기술이 실패하는 경우 어떤 부분을 놓쳤는지 또는 어디서 자세한 정보를 얻을 수 있는지 알아보세요. 감사해요.

참고: raspberrypi.se 도움말에 따르면 rpi se 웹사이트를 사용하지 말고 UX를 사용해야 합니다. "Linux/Unix 문제와 직접 관련된 질문. Unix 및 Linux Exchange 사용" 섹션을 잘못 이해했다면 계속 진행하시기 바랍니다.

여러 참고자료를 시도했지만 대부분은 오래되었거나 내 상황에 도움이 되지 않았습니다.

https://raspberrypi.stackexchange.com/questions/4120/how-to-automatically-reconnect-wifi https://wiki.archlinux.org/index.php/WPA_supplicant

http://weworkweplay.com/play/automatically-connect-a-raspberry-pi-to-a-wifi-network/

https://raspberrypi.stackexchange.com/questions/37594/how-can-i-disable-autoconfigured-networking-on-raspbian

Wi-Fi 연결이 끊어지면 자동으로 다시 연결되나요?

WIFI에 자동으로 다시 연결하는 방법을 알아보세요

장애 시 무선을 다시 연결하기 위한 시스템 장치

관련 정보