Wifi

在 Centos 8(或 Fedora)中創建橋接 WiFi AP(熱點)

  • November 25, 2020

我正在嘗試使用 NetworkManager 在 Centos 8 系統上創建橋接 WiFi 熱點。該機器是戴爾 EPC3000,帶有兩個內置的 GigE 和 ath10k 無線適配器,以及一個 LTE WWAN。

創建 NATted 熱點效果很好:

nmcli con add type wifi ifname wlp4s0 con-name wlp4s0 autoconnect yes ssid test
nmcli con modify wlp4s0 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared
nmcli con modify wlp4s0ap wifi-sec.key-mgmt wpa-psk
nmcli con modify wlp4s0ap wifi-sec.psk "password"
nmcli con up wlp4s0ap 

這會為 wlp4s0 介面分配一個私有 IP,為 dhcp 呼叫 dnsmasq 並為熱點創建正確的 iptables 配置。

現在我的想法是取消 NAT 並將 wifi 介面橋接到輔助 GigE,使用其遠端 DHCP 和其他服務為來自該網段的 wifi 客戶端提供服務。

創建網橋並奴役 wlp4s0 和輔助 GigE 工作正常,而 AP 保持啟動和信標(一直使用 nmcli)

# bridge link
4: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 100
5: wlp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 100

當 wlp4s0ap 連接被 br0 奴役時,它可以預見地失去其 IPv4 設置。br0 網橋工作,就好像我在它上面啟用了 DHCP,它從橋接的 GigE 網段獲取 IPv4/v6。

現在有人可能認為網橋配置不會影響(由 dbus 控制的)維護接入點的 wpa_supplicant。但是,每當 wlp4s0 介面被橋接時,wpa_supplicant 在完成 EAPOL 握手時始終會中途停止 WPA 身份驗證:

hostapd_logger: STA 84:c7:ea:39:9b:28 - start authentication
WPA: 84:c7:ea:39:9b:28 WPA_PTK entering state INITIALIZE
wpa_driver_nl80211_set_key: ifindex=5 (wlp4s0) alg=0 addr=0x55d8a39e0bb0 key_idx=0 set_tx=1 seq_len=0 key_len=0
  addr=84:c7:ea:39:9b:28
nl80211: Set STA flags - ifname=wlp4s0 addr=84:c7:ea:39:9b:28 total_flags=0x66 flags_or=0x0 flags_and=0xfffffffe authorized=0
hostapd_logger: STA 84:c7:ea:39:9b:28 - unauthorizing port
WPA: 84:c7:ea:39:9b:28 WPA_PTK_GROUP entering state IDLE
WPA: 84:c7:ea:39:9b:28 WPA_PTK entering state AUTHENTICATION
WPA: 84:c7:ea:39:9b:28 WPA_PTK entering state AUTHENTICATION2
WPA: Assign ANonce - hexdump(len=32): 6c 11 09 50 95 fc 7d 80 80 a0 a9 a7 be eb 23 d3 ec 6e f4 ef 42 87 ca 45 5e 55 80 5b 54 c0 38 7e
WPA: 84:c7:ea:39:9b:28 WPA_PTK entering state INITPSK
Searching a PSK for 84:c7:ea:39:9b:28 prev_psk=(nil)
Searching a PSK for 84:c7:ea:39:9b:28 prev_psk=(nil)
WPA: 84:c7:ea:39:9b:28 WPA_PTK entering state PTKSTART
hostapd_logger: STA 84:c7:ea:39:9b:28 - sending 1/4 msg of 4-Way Handshake
WPA: Send EAPOL(version=2 secure=0 mic=0 ack=1 install=0 pairwise=1 kde_len=0 keyidx=0 encr=0)
WPA: Replay Counter - hexdump(len=8): 00 00 00 00 00 00 00 01
WPA: Use EAPOL-Key timeout of 100 ms (retry counter 1)
wlp4s0: hostapd_new_assoc_sta: reschedule ap_handle_timer timeout for 84:c7:ea:39:9b:28 (300 seconds - ap_max_inactivity)
wlp4s0: Event EAPOL_TX_STATUS (37) received
hostapd_logger: STA 84:c7:ea:39:9b:28 - EAPOL-Key timeout
WPA: 84:c7:ea:39:9b:28 WPA_PTK entering state PTKSTART
hostapd_logger: STA 84:c7:ea:39:9b:28 - sending 1/4 msg of 4-Way Handshake
WPA: Send EAPOL(version=2 secure=0 mic=0 ack=1 install=0 pairwise=1 kde_len=0 keyidx=0 encr=0)
WPA: Replay Counter - hexdump(len=8): 00 00 00 00 00 00 00 02
WPA: Use EAPOL-Key timeout of 1000 ms (retry counter 2)
wlp4s0: Event EAPOL_TX_STATUS (37) received
hostapd_logger: STA 84:c7:ea:39:9b:28 - EAPOL-Key timeout
WPA: 84:c7:ea:39:9b:28 WPA_PTK entering state PTKSTART
hostapd_logger: STA 84:c7:ea:39:9b:28 - sending 1/4 msg of 4-Way Handshake
WPA: Send EAPOL(version=2 secure=0 mic=0 ack=1 install=0 pairwise=1 kde_len=0 keyidx=0 encr=0)
WPA: Replay Counter - hexdump(len=8): 00 00 00 00 00 00 00 03
WPA: Use EAPOL-Key timeout of 1000 ms (retry counter 3)
wlp4s0: Event EAPOL_TX_STATUS (37) received
hostapd_logger: STA 84:c7:ea:39:9b:28 - EAPOL-Key timeout
WPA: 84:c7:ea:39:9b:28 WPA_PTK entering state PTKSTART
hostapd_logger: STA 84:c7:ea:39:9b:28 - sending 1/4 msg of 4-Way Handshake
WPA: Send EAPOL(version=2 secure=0 mic=0 ack=1 install=0 pairwise=1 kde_len=0 keyidx=0 encr=0)
WPA: Replay Counter - hexdump(len=8): 00 00 00 00 00 00 00 04
WPA: Use EAPOL-Key timeout of 1000 ms (retry counter 4)
wlp4s0: Event EAPOL_TX_STATUS (37) received
hostapd_logger: STA 84:c7:ea:39:9b:28 - EAPOL-Key timeout
WPA: 84:c7:ea:39:9b:28 WPA_PTK entering state PTKSTART
hostapd_logger: STA 84:c7:ea:39:9b:28 - PTKSTART: Retry limit 4 reached

知道這種橋接是大多數基於 Linux 的接入點的方式,我想知道 Centos 8 有什麼不同的方式來破壞 wpa_supplicant。我還從 w1.fi git 編譯了最新的 wpa_supplicant,但它的行為方式相同,可以完美地與 NAT 一起工作,但會破壞橋接。

我還擺弄了 /sys/class/net/br0/bridge/group_fwd_mask 以確保沒有 wifi 控制數據包被丟棄,沒有效果。

還嘗試了 NetworkManager 之外的通用(編譯)hostapd 包(例如,由 DD-WRT 接入點使用),但一旦我啟用橋接,它也會破壞 WPA。

有什麼建議接下來要嘗試什麼?

我讓橋接 AP 工作

  • 從原始碼編譯和安裝 hostapd
  • 從 NetworkManager 取消管理 WiFi 介面(nmcli dev set managed no)
  • 使用 NetworkManager 創建橋接介面並將第二個乙太網添加為從站
  • 禁用系統提供的 wpa_supplicant
  • 在啟動 hostapd 的 hostapd.conf 中添加“bridge=br0”

現在我認為 NetworkManager 和標準 wpa_supplicant 也應該可以做到這一點,但這個解決方案目前有效。

NetworkManager / nmcli可以創建作為網橋一部分的接入點。WPA 請求者似乎在橋接後確定介面類型時遇到問題,但是通過在 /etc/sysconfig/wpa_supplicant (CentOS 8.2) 中將橋接介面添加到 wpa_suppliant 的命令行參數中解決了這個問題

介面="-i wlp2s0 -b br0"

使用 nmcli https://unix.stackexchange.com/questions/620169/disable-wifi-security-in-network-manger將乙太網橋接到 wifi 介面

引用自:https://serverfault.com/questions/996350