제가 설정하고 있는 라우터에는 두 개의 이더넷 포트와 한 개의 무선 포트가 있습니다. 나는 systemd-networkd를 사용하고 있습니다. 먼저 포트 이름을 바꾼 다음 브리지를 만든 다음 이더넷 포트 중 하나와 무선 보드를 브리지하여 단일 IP와 DHCP/DNSMASQ가 포함된 결합된 LAN 포트를 만들었습니다. 다른 이더넷은 wan 포트입니다. 여기서 networkctl 출력을 볼 수 있습니다. lan은 브리지입니다. wlan의 상태가 lan2와 동일한 것을 볼 수 있습니다(NIC이며 정상적으로 작동합니다). 따라서 브리지와 모든 라우팅은 괜찮습니다.
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 wan ether routable configured
3 lan2 ether carrier configuring
4 wlan wlan carrier configuring
5 lan ether routable configured
그래서... 거의 다 됐어요. 단지 systemd-networkd를 사용하여 적시에 Hostapd가 시작되도록 합니다. AP가 나타나지만 무선 인터페이스가 브리지에 바인딩된 것으로 나타나지 않습니다. 클라이언트는 WPA 비밀번호를 입력하고 이를 승인할 수 있지만 연결할 수는 없습니다. 로그는 문제를 식별하는 데 도움이 되지 않지만 무선 포트가 브리지에 고정되어 있지 않은 것은 확실합니다. 이는 AP 기능이 괜찮아 보이지만 실제로는 지정된 IP 주소에 대한 연결을 설정하지 않는 이유를 설명할 수 있습니다.
경험이 있는 사람이 조언을 해줄 수 있나요? 보시다시피, 제가 작성한 Hostapd.service는 네트워크가 완료될 때까지, 특히 브리지가 생성될 때까지 Hostapd 시작을 지연시키려고 시도합니다. 어쩌면 이것은 네트워크를 지연시키는 Hostapd와 관련이 있을 수 있지만, 네트워크는 Hostapd가 시작되기 전에 LAN 브리지에 WLAN을 추가합니다... 일종의 catch22와 같습니다.
호스트 구성 파일
interface=wlan
# the interface used by the AP
hw_mode=g
# g simply means 2.4GHz band
channel=10
# the channel to use
#ieee80211d=1
# limit the frequencies used to those allowed in the country
#country_code=US
# the country code
ieee80211n=1
# 802.11n support
#wmm_enabled=1
# QoS support
#ignore_broadcast_ssid=0
ssid=645-gateway
# the name of the AP
auth_algs=1
# 1=wpa, 2=wep, 3=both
wpa=2
# WPA2 only
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=elf645Keb1920
호스팅 서비스
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Wants=network-online.target
After=systemd-networkd.service
After=sys-subsystem-net-devices-wlan.device
After=sys-subsystem-net-devices-lan.device
BindsTo=sys-subsystem-net-devices-lan.device
[Service]
Type=forking
PIDFile=/run/hostapd.pid
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /run/hostapd.pid -B
[Install]
WantedBy=multi-user.target
30-br-wlan-lan.network
[Match]
Name=wlan
[Network]
Bridge=lan
답변1
당신은 가깝습니다. 저도 같은 상황에 있습니다. 수년간의 노력 끝에 마침내 올바른 구성을 찾았습니다.
시스템 네트워크 구성
systemd-networkd 구성에는 /etc/systemd/network/
다음 파일이 필요합니다.
.netdev
브리지 장치용 1개.network
브리지 장치용 1개.network
이더넷 장치용 하나 이상 (LAN 및 WAN).network
WiFi 장치용 하나.network
동일한 장치에서 여러 SSID를 실행하는 경우 더 많은 다른 Wi-Fi SSID 중에서 선택할 수도 있습니다.
브리지 장치
이것은 내 브리지 장치 구성이며 여기에는 특별한 것이 없습니다. 하지만 파일을 잃어버렸다는 사실을 깨닫는 데 몇 년이 걸렸습니다. .netdev
네트워크가 실패했다고 보고되었음에도 불구하고 분명히 정상적으로 작동하고 있었기 때문입니다.networkctl
br0
cat /etc/systemd/network/10-bridge.netdev
[NetDev]
Name=br0
Kind=bridge
cat /etc/systemd/network/20-bridge.network
[Match]
Name=br0
[Network]
Description=...
Address=...
Address=...
브리지에 이더넷 및 WiFi 장치 추가
당연히 모든 참여 장치는 br0
이를 선언해야 합니다.Bridge=br0
cat /etc/systemd/network/21-enp2s0_bridged.network
[Match]
Name=enp2s0
[Link]
RequiredForOnline=no
[Network]
Description=Add enp2s0 to the bridge
Bridge=br0
cat /etc/systemd/network/21-wlp5s0_bridged.network
[Match]
Name=wlp5s0
[Link]
RequiredForOnline=no
[Network]
Description=Add wlp5s0 to the bridge
Bridge=br0
HostAPD 서비스 유닛
적시에 Hostapd를 시작하려면 다음 종속성이 필요합니다 hostapd.service
.
- 이
[Unit]
섹션 의After=network.target BindsTo=sys-subsystem-net-devices-%i.device
%i
Wi-Fi 장치 이름으로 바꾸십시오 . - 이
[Install]
섹션 의WantedBy=multi-user.target WantedBy=sys-subsystem-net-devices-%i.device
%i
Wi-Fi 장치 이름으로 다시 바꾸십시오 .
다른 종속성은 필요하지 않습니다. 특히 Wants=network-online.target
이 경우에는 Hostapd를 시작하려고 하므로 사용하면 안 됩니다.앞으로네트워크가 온라인 상태가 됩니다. 보다network.target
및 정의network-online.target
.
위의 구성을 복사한 좋은 예제 단위 파일이 있습니다 . 동일한 Hostapd 인스턴스에 하나의 SSID만 구성하거나 여러 SSID를 구성하는 경우 셀 템플릿은 필요하지 않지만/lib/systemd/system/[email protected]
너 정말 필요해장치와 함께 제공됩니다 BindsTo
(Debian에 배송된 템플릿이 아닌 경우 /lib/systemd/system/hostapd.service
누락되었습니다). 또한 sys-subsystem-net-devices-%i.device
SSID가 여러 개 없는 경우 종속성은 "기본" Wi-Fi 인터페이스에서만 필요합니다.
결과
# networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp1s0 ether routable configured
3 enp2s0 ether enslaved configured
4 enp3s0 ether no-carrier configuring
5 enp4s0 ether off unmanaged
6 br0 bridge routable configured
7 wg0 wireguard routable configured
8 sit0 sit off unmanaged
9 he-ipv6 sit routable configured
10 wlp5s0 wlan enslaved configured
11 wlan-iot wlan routable configured
12 wlan-guest wlan routable configured
12 links listed.
그리고 행복한 시스템 관리자가 되세요! :)
networkctl
wlp5s0 실패를 보고하고 기록하는 것은 여전히 가능합니다 systemd-networkd
:
wlp5s0: netdev에 참여할 수 없습니다. 장치가 브리지에 슬레이브되도록 허용되지 않습니다. 지원되지 않는 작업 wlp5s0: 실패
그러나 이것이 네트워크에 장애를 일으키고 a가 다시 systemctl restart systemd-networkd.service
녹색으로 바뀌는 원인은 아닌 것 같습니다 networkctl
. 나는 이것이 내가 Hostapd로 구성하는 방식과 상호 작용하고 있다고 생각합니다 bridge=br0
. 어쩌면 그 줄을 제거해야 할 수도 있습니다.
답변2
아직 댓글을 달 수 없어서 답변으로 추가 중입니다... 이것은 Kolargo00의 훌륭한 답변에 대한 후속 조치입니다.
실패 이유 Device does not allow enslaving to a bridge.
는 스테이션 모드의 WLAN 장치를 systemd-networkd 브리지에 추가할 수 없기 때문입니다. Hostapd를 시작하면앞으로 systemd-networkd.service
그리고 network.target
WLAN 인터페이스는 AP 모드에 있어야 하며 브리지에서 제어할 수 있어야 합니다.
따라서 After=network.target
Hostapd.service 단위 파일을 다음으로 변경하면 Before=network.target systemd-networkd.service
모든 것이 원활하게 작동합니다.
그렇지 않으면 그의 대답은 정확합니다.