akam1oの日記

クラウドを作るお仕事をしています

Proxmox VE と Archer TXE70UH で 6GHz の無線 AP を作る

0. 目次

1. 概要

  • 6GHz の無線 AP を自作したいという技術的興味から、6GHz に対応する無線 LAN カードで最安であった TP-Link Archer TXE70UH を用いて無線 LAN AP の自作を試みた
    • なお TP-Link Archer TXE70UH 購入時点では 6GHz でのクライアントでの動作実績はあるので AP もすぐ問題なく動くと思っていた
  • また可搬性の観点から VM 上で hostapd を構成し、無線 LAN カードは USB デバイスをパススルーで見せる構成とした

1.1 モチベーション

  • 6GHz の無線 AP が急に欲しくなった
    • 実家で無線 LAN の実験環境的な運用をしているのだが、そこに自作 AP で 6GHz も吹きたいと考えた
  • 気軽な気持ちでヤフーショッピングで調べてみると、Wi-Fi 6E 対応でポイント還元込みで3000円程度で買えることを発見 -> 即購入
  • これが地獄の始まりだった

1.2 技術的課題

  • 無線モジュール届いて調べ始めたら早々になんか動かんらしいという GitHub Issue を見つける
  • そもそもドライバの実装で 6GHz を吹く上で必要な機能が呼び出せなかったり、なんならホスト kernel 巻き込んで死んだりする
  • とはいえ丁寧にデバッグしていったら動くやろ!くらいの気持ちで実装を始める

1.3 構成コンセプト

  • 構成としては非常にシンプルで、PCI passthrough で Wi-Fi モジュールを見せているだけ
    構成概要

2. システム構成と環境

2.1 ハードウェア構成

  • ハイパーバイザー: Proxmox VE
  • ゲスト OS: Ubuntu 24.04.2 LTS(kernel: 6.8.0-53-generic)
  • 無線アダプタ: TP-Link Archer TXE70UH(RTL8852CU チップセット
  • 接続方式: USB passthrough *(前述のコンセプトでは PCI passthrough になっているが、ドライバが上手く走らなかったため USB passthrough になっている)

2.2 設計思想

  • 可搬性と実験性を重視し、VM 環境での構築
    • 将来的には実家での稼働を想定
    • 何度か OS が起動しなくなるような破滅的な場面もあったため、やはり VM 環境推奨

2.3 ネットワーク構成

  • 純粋な無線 AP(ブリッジ)として実装
    • DHCP は上位のルータが行うため

3. ホスト側作業

3.1 Proxmox で Archer TXE70UH が WLAN モードで読み込まれるようにする

Windows 向けに無線 LAN ドライバを自動インストールするための仕組みがあるため、USB モードの切り替えが必要

// CDROM モードになっている

# lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 0bda:c821 Realtek Semiconductor Corp. Bluetooth Radio
Bus 003 Device 002: ID 0573:1573 Zoran Co. Personal Media Division (Nogatech) USB Audio and HID
Bus 003 Device 004: ID 0bda:1a2b Realtek Semiconductor Corp. RTL8188GU 802.11n WLAN Adapter (Driver CDROM Mode)
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

# apt install usb-modeswitch

# usb_modeswitch -KW -v 0bda -p 1a2b
Take all parameters from the command line


 * usb_modeswitch: handle USB devices with multiple modes
 * Version 2.6.1 (C) Josua Dietze 2017
 * Based on libusb1/libusbx

 ! PLEASE REPORT NEW CONFIGURATIONS !

DefaultVendor=  0x0bda
DefaultProduct= 0x1a2b

StandardEject=1

Look for default devices ...
  found USB ID 1d6b:0003
  found USB ID 0bda:c821
   vendor ID matched
  found USB ID 0573:1573
  found USB ID 35bc:0102
  found USB ID 1d6b:0002
  found USB ID 1d6b:0003
  found USB ID 1d6b:0002
 No devices in default mode found. Nothing to do. Bye!

設定の永続化

# cat /etc/usb_modeswitch.d/0bda\:1a2b
DefaultVendor=0x0bda
DefaultProduct=0x1a2b
TargetVendor=0x35bc
TargetProduct=0x0102
StandardEject=1

3.2 VM への USB デバイスの割り当て

モードを切り替えると WLAN Adapter として TXE70UH が見えているので、これを VM にアタッチする

USB デバイスの割り当て

IOMMU の設定していない場合はする

iommu=pt intel_iommu=on

エミュレーションモデルは q35 にする pc-i440fx には USB が実装されていないので注意

4. 基本環境構築

4.1 RTL8852CUドライバーの構築

4.1.1 ドライバーソースの取得
  • GitHub上のmorrownr版RTL8852CUドライバーを使用
# ドライバーソースの取得
git clone https://github.com/morrownr/rtl8852cu-20240510.git
cd rtl8852cu-20240510

# 対応デバイスの確認
# supported-device-IDs ファイルで以下を確認
# ID 35bc:0102 - TP-Link Archer TXE70UH(EU) V1
4.1.2 依存関係のインストール
sudo apt update
sudo apt install -y build-essential git dkms bc bridge-utils hostapd
sudo apt install -y linux-modules-extra-6.8.0-53-generic
4.1.3 ドライバーのビルドとインストール
# ドライバーのビルド
sudo make clean
sudo make

# モジュールの手動インストール
sudo mkdir -p /lib/modules/6.8.0-53-generic/kernel/drivers/net/wireless/
sudo cp 8852cu.ko /lib/modules/6.8.0-53-generic/kernel/drivers/net/wireless/
sudo depmod -a

# ドライバーの段階的ロード
sudo modprobe cfg80211
sudo modprobe mac80211
sudo modprobe 8852cu

無線インターフェイス wlx98038eddc01f が正常に認識された

$ ip l
~~~
4: wlx98038eddc01f: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 98:03:8e:dd:c0:1f brd ff:ff:ff:ff:ff:ff

5. ブリッジネットワークの構築

5.1 systemd-networkd設定

linuxbridge を作り、そこに VM の eth デバイスをぶら下げるが、このとき bridge で IP 終端する必要があるため、起動時にそのような構成になるようにする

5.1.1 ブリッジデバイス定義
cat > /etc/systemd/network/10-br0.netdev << EOF
[NetDev]
Name=br0
Kind=bridge
EOF
5.1.2 ブリッジネットワーク設定
cat > /etc/systemd/network/20-br0.network << EOF
[Match]
Name=br0

[Network]
Address=192.168.1.29/24
Gateway=192.168.1.1
DNS=192.168.1.1
IPForward=yes
EOF
5.1.3 eth0のブリッジ接続
cat > /etc/systemd/network/30-eth0.network << EOF
[Match]
Name=eth0

[Network]
Bridge=br0
EOF

5.2 ブリッジの設定

# ブリッジインターフェイスの作成
sudo brctl addbr br0
sudo brctl addif br0 eth0
sudo ip link set br0 up

eth0をブリッジに接続する際、IPアドレスが eth0 から br0 に移行するため、ネットワーク接続が一時的に切断される このため、事前にコンソールアクセスを確保しておくと良い

6. 5GHz帯での動作確認

6.1 基準設定の構築

6GHz 帯に着手する前に、動作するであろう 5GHz 帯での AP 動作を確認を行った

# /etc/hostapd/hostapd.conf
interface=wlx98038eddc01f
bridge=br0
driver=nl80211

ssid=AP_5GHz
hw_mode=a
channel=36
ieee80211n=1
ieee80211ac=1
ieee80211ax=1

# セキュリティ設定
wpa=2
wpa_key_mgmt=WPA-PSK SAE
wpa_passphrase=hogehoge
wpa_pairwise=CCMP
rsn_pairwise=CCMP
ieee80211w=1

# 地域設定
country_code=JP
ieee80211d=1
ieee80211h=1
wmm_enabled=1

# 管理設定
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
max_num_sta=32

6.2 動作確認結果

5GHz帯(チャンネル36、5180 MHz)での安定動作を確認し、問題なく動作することを確認した

7. 6GHz 帯 AP 構築

7.1 最初の技術的障壁

7.1.1 HE 6GHz Max MPDU lengthエラー

6GHz 帯での設定を試みた際、即座に下記のエラーが発生した

The driver does not support the configured HE 6 GHz Max MPDU length

この「HE 6 GHz Max MPDU length」エラーは、RTL8852CU ドライバーで 6GHz AP 機能が完全に実装されていないことを示しており、最大の障壁でした これを解決するにはドライバーに機能を実装、仮に実装したとしてもファームにその機能をキックする実装があるか、そもそもモジュールに物理的実装があるか、などなどそもそも解決できない問題にぶつかる可能性があり、この機能を回避して AP を実装することに注力することになる

7.1.2 GitHub Issue

6GHZ Not Working On Realtek 8832cu. · Issue #408 · morrownr/USB-WiFi · GitHub によると

  1. ドライバー制限: RTL8852CU ドライバーの 6GHz AP 機能は部分的実装
  2. HE 6GHz 機能: High Efficiency 6GHz 特有の機能が不完全対応

となっており、やはりここを解決して進むのは難しそう

7.2 Realtek ドライバーの特殊要件

有識者からの情報により、Realtekモジュールはiw reg setを実行してからでないと6GHz帯が正しく動作しないことが判明した

# 正しい起動順序(必須)
sudo modprobe 8852cu     # ドライバーロード
sudo iw reg set JP       # レギュラトリードメイン設定
sudo hostapd config      # hostapd起動

この順序を守らないと6GHz帯でチャンネル設定エラーが発生する

7.3 技術的ブレークスルーの実現

7.3.1 決定的な設定の発見

数十パターンの設定アプローチを試行し、エラーが段階的に変化することを確認:

  1. 初期: HE 6 GHz Max MPDU length エラー
  2. 第1段階: Failed to set beacon parameters エラー
  3. 第2段階: Could not determine operating frequency エラー
  4. 最終段階: 起動成功

最終的に、下記の設定でドライバー制限を突破

# 6GHz制限回避のキー設定
he_6ghz_max_mpdu=0
he_6ghz_max_ampdu_len_exp=0
he_6ghz_rx_ant_pat=0
he_6ghz_tx_ant_pat=0

値を明示的に 0(最小値)に設定することで、ドライバーの未対応機能を回避できることを確認

7.3.2 成功時のログ
# 成功ログ
wlx98038eddc01f: interface state UNINITIALIZED->ENABLED
wlx98038eddc01f: AP-ENABLED

衝動的に Archer TXE70UH をポチって数日、2025年7月10日に 6GHz 帯の AP として利用できることを確認

8. Windows接続問題の解決

8.1 接続エラーの詳細分析

6GHz AP が見えるようになった後、Windows クライアントから接続しようとしたときに「このネットワークに接続できません」エラーが発生した

8.1.1 クライアント環境の確認
ドライバー: Qualcomm FastConnect 6900 Wi-Fi 6E Dual Band Simultaneous (DBS) WiFiCx Network Adapter
バージョン: 2.0.0.1292 (2025/03/20)
サポートされる認証: WPA3-パーソナル CCMP
サポートされるバンド: 6 GHz [ 5935 MHz - 7115 MHz]

クライアント側は 6GHz / WPA3-SAE に完全対応していることを確認

8.1.2 認証ログの分析
# プローブリクエスト/レスポンスは正常
nl80211: RX frame da=xx:xx:xx:xx:xx:xx sa=yy:yy:yy:yy:yy:yy freq=5570 stype=4 (WLAN_FC_STYPE_PROBE_REQ)

# しかし認証フレームが来ない
# AUTH (stype=11) フレームが全く受信されていない

8.2 SAE設定の最適化

8.2.1 問題の根本原因

RTL8852CUドライバーの6GHz APモードでのSAE実装に制限があることが判明:

  • クライアントモード: 正常動作
  • APモード: SAE認証に制限あり
8.2.2 成功した設定

十数パターンの設定を試行した結果、下記の設定で接続に成功:

# 6GHz Final Working Configuration
interface=wlx98038eddc01f
bridge=br0
driver=nl80211
ssid=AP_6GHz

# 6GHz band
hw_mode=a
op_class=131
channel=5  # 5975 MHz

# 802.11ax
ieee80211ax=1
he_oper_chwidth=0

# Required driver settings for RTL8852CU
he_6ghz_max_mpdu=0
he_6ghz_max_ampdu_len_exp=0
he_6ghz_rx_ant_pat=0
he_6ghz_tx_ant_pat=0

# Country
country_code=JP
ieee80211d=1
ieee80211h=1

# WPA3-SAE (Required for 6GHz)
wpa=2
wpa_key_mgmt=SAE
wpa_passphrase=hogehoge
rsn_pairwise=CCMP
ieee80211w=2
sae_require_mfp=1

# SAE compatibility settings (Critical for Windows)
sae_groups=19 20 21
sae_pwe=2
sae_anti_clogging_threshold=10

# Additional settings
wpa_pairwise=CCMP
wpa_group_rekey=3600

# Basic settings
wmm_enabled=1
beacon_int=100
dtim_period=2

8.3 接続成功の技術的分析

8.3.1 SAE PWE (Password Element) の重要性

sae_pwe パラメータがポイントだった

  • sae_pwe=0: Hash-to-Element(デフォルト)
  • sae_pwe=1: Looping method
  • sae_pwe=2: Hash-to-Element with optional Looping method(互換性最高)

Windows / Qualcomm クライアントは sae_pwe=2 で最も安定して動作した

8.3.2 成功時の認証シーケンス
# SAE認証成功ログ
WPA: Received EAPOL-Key from yy:yy:yy:yy:yy:yy key_info=0x108 type=2
wlx98038eddc01f: STA yy:yy:yy:yy:yy:yy WPA: received EAPOL-Key frame (2/4 Pairwise)
WPA: PTK derivation - A1=xx:xx:xx:xx:xx:xx A2=yy:yy:yy:yy:yy:yy
wlx98038eddc01f: STA yy:yy:yy:yy:yy:yy WPA: sending 3/4 msg of 4-Way Handshake
wlx98038eddc01f: STA yy:yy:yy:yy:yy:yy WPA: received EAPOL-Key frame (4/4 Pairwise)
wlx98038eddc01f: AP-STA-CONNECTED yy:yy:yy:yy:yy:yy
wlx98038eddc01f: EAPOL-4WAY-HS-COMPLETED yy:yy:yy:yy:yy:yy

9. 永続化と運用設定

9.1 systemdサービスの作成

# サービスファイルの作成
sudo systemctl edit --full --force hostapd-6ghz.service
[Unit]
Description=6GHz WiFi Access Point
After=network.target
Wants=network.target

[Service]
Type=forking
PIDFile=/run/hostapd-6ghz.pid
Restart=on-failure
RestartSec=2
Environment=DAEMON_CONF=/etc/hostapd/hostapd-6ghz.conf
EnvironmentFile=-/etc/default/hostapd
ExecStartPre=/bin/bash -c 'modprobe -r 8852cu; sleep 2; modprobe 8852cu; sleep 2; iw reg set JP'
ExecStart=/usr/sbin/hostapd -B -P /run/hostapd-6ghz.pid $DAEMON_CONF
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

9.2 自動起動設定

# サービスの有効化
sudo systemctl enable hostapd-6ghz.service
sudo systemctl start hostapd-6ghz.service

10. その他技術メモ

10.1 一般的な問題と解決策

10.1.1 HE 6GHz Max MPDU length エラー
he_6ghz_max_mpdu=0
he_6ghz_max_ampdu_len_exp=0
he_6ghz_rx_ant_pat=0
he_6ghz_tx_ant_pat=0
10.1.2 Windows 接続エラー
sae_groups=19 20 21
sae_pwe=2
sae_anti_clogging_threshold=10
10.1.3 周波数許可エラー
sudo iw reg set JP

10.2 デバッグ手法

10.2.1 最大詳細度でのデバッグ
sudo hostapd -ddd /etc/hostapd/hostapd-6ghz.conf
10.2.2 無線インターフェイス状態の確認
iw dev wlx98038eddc01f info
iw reg get

11. 技術仕様と制限事項

11.1 実現した Wi-Fi AP の技術仕様

  • SSID: 設定可能
  • 動作周波数: 5955-6415 MHz(日本の6GHz帯)
  • 帯域幅: 20 MHz
  • セキュリティ: WPA3-SAE
  • 動作モード: ブリッジモード(L2透過)

11.2 現在の制限事項

  • 帯域幅制限: 20 MHzのみ対応(40/80/160 MHzは未対応)
  • HE 機能制限: 高度な HE 6GHz 機能は最小値設定が必要
  • ビームフォーミング: 無効化が必要
  • MU-MIMO: 未対応
  • FILS Discovery: RTL8852CUドライバーは未対応

12. 今後について

12.1 帯域幅 40/80/160 MHz への対応

一旦 6GHz で吹くことを優先したため手が回っていないが、40/80/160MHz 幅の構成も設定の針の穴を通していけば実現できる可能性がある

12.2 ドライバーの改善

今後の RTL8852CU ドライバーの改善により下記が実現できる可能性がある

  • HE 機能向上: より多くの 6GHz 特有機能の実装
  • FILS Discovery 対応: 6GHz Discovery 機構の実装

12.3 代替モジュールの検討

Intel AX210 や MediaTek MT7921K 等の他の 6GHz 対応モジュールを利用することで、安定した 6GHz Wi-Fi AP を実現できる可能性が高い 少なくとも RTL8852CU よりはマシな結果が得られると考える

13. まとめ

  • RTL8852CU での 6GHz AP 構築は実現可能(ただし制限はあり)
  • hostapd を使えばすぐに実現するだろう程度に考えていたが、思っていた以上にドライバやファームウェア、デバイスといった要素が複雑に絡み合っており、一筋縄ではいかない
    • 特にドライバ・ファームウェア・デバイスの足並みがしっかり揃っていないと余分な苦労をたくさんすることになる
    • Wi-Fi ルータを作っている企業やエンジニアの苦労がわかるので、一度作ってみることはおすすめしたい
  • RTL8852CU で構築を考えているなら考え直して Intel AX210 など他の先駆者がいるモジュールでの構築をすべき
    • 少なくとも現時点で RTL8852CU のドライバは 6GHz AP を完全に運用できるレベルにない
    • ドライバやファームウェアを独自で改善したい人にはちょうど良い題材かもしれない

14. 参考資料

15. チップセット別 USB-WiFI

15.1 Realtek RTL8852CU

15.2 MediaTek MT7921AUN

15.3 Realtek RTL8912AU

Wi-Fi 7 に対応したモジュール

15.4 Intel AX210

アリエクで探したほうが選択肢があるかも?