시스템 네트워크 구성

시스템 네트워크 구성

제가 설정하고 있는 라우터에는 두 개의 이더넷 포트와 한 개의 무선 포트가 있습니다. 나는 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/다음 파일이 필요합니다.

  1. .netdev브리지 장치용 1개
  2. .network브리지 장치용 1개
  3. .network이더넷 장치용 하나 이상 (LAN 및 WAN)
  4. .networkWiFi 장치용 하나
  5. .network동일한 장치에서 여러 SSID를 실행하는 경우 더 많은 다른 Wi-Fi SSID 중에서 선택할 수도 있습니다.

브리지 장치

이것은 내 브리지 장치 구성이며 여기에는 특별한 것이 없습니다. 하지만 파일을 잃어버렸다는 사실을 깨닫는 데 몇 년이 걸렸습니다. .netdev네트워크가 실패했다고 보고되었음에도 불구하고 분명히 정상적으로 작동하고 있었기 때문입니다.networkctlbr0

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.

  1. [Unit]섹션 의
    After=network.target
    BindsTo=sys-subsystem-net-devices-%i.device
    
    %iWi-Fi 장치 이름으로 바꾸십시오 .
  2. [Install]섹션 의
    WantedBy=multi-user.target
    WantedBy=sys-subsystem-net-devices-%i.device
    
    %iWi-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.deviceSSID가 여러 개 없는 경우 종속성은 "기본" 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.

그리고 행복한 시스템 관리자가 되세요! :)

networkctlwlp5s0 실패를 보고하고 기록하는 것은 여전히 ​​가능합니다 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.targetWLAN 인터페이스는 AP 모드에 있어야 하며 브리지에서 제어할 수 있어야 합니다.

따라서 After=network.targetHostapd.service 단위 파일을 다음으로 변경하면 Before=network.target systemd-networkd.service모든 것이 원활하게 작동합니다.

그렇지 않으면 그의 대답은 정확합니다.

관련 정보