web-dev-qa-db-ja.com

Centos 8(またはFedora)でブリッジされたWiFi AP(ホットスポット)を作成する

NetworkManagerを使用して、Centos 8システムでブリッジされたWiFiホットスポットを作成しようとしています。マシンはDell EPC3000で、2つの内蔵GigEとath10kワイヤレスアダプターに加えて、LTE WWANを備えています。

NAT化されたホットスポットの作成はうまく機能します:

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にブリッジし、そのセグメントからのwifiクライアントにリモートDHCPおよびその他のサービスを提供することです。

ブリッジを作成して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ブリッジを有効にすると、それも壊れます。

次は何を試してみますか?

1
Pasi Hurri

ブリッジドAPを機能させる

  • ソースからのhostapdのコンパイルとインストール
  • networkManagerからのWiFiインターフェースの管理解除(nmcli dev set managed no)
  • networkManagerでブリッジインターフェースを作成し、2番目のイーサネットをスレーブとして追加する
  • システム提供のwpa_supplicantを無効にする
  • hostapdを開始するhostapd.confに "bridge = br0"を追加する

これはNetworkManagerと標準のwpa_supplicantでも可能だと思いますが、このソリューションは今のところ機能します。

0
Pasi Hurri

NetworkManagerはブリッジの一部であるアクセスポイントを作成できません。 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/8 を参照してください。これはCentosに固有のものではありません。 「ほとんどのLinuxベースのアクセスポイントが行う方法」は、hostapdを使用することです。

0
Hank