在 Ubuntu 20.04 上使用 Hostapd 创建 5GHz 接入点,“AP 模式不允许使用通道 153(主要),标志:0x20073 NO-IR”

Nat*_*ate 6 linux wireless-networking wireless-access-point ubuntu hostapd

我正在尝试创建一个运行 Ubuntu 20.04 的 5GHz 接入点。我的无线适配器是 Intel Corporation Cannon Point-LP CNVi。

旁注:2.4GHz 接入点全天工作,但我需要 5GHz。

我已经使用 iw list 验证了适配器支持 AP 以及 5GHz 频率:

Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * monitor
         * P2P-client
         * P2P-GO
         * P2P-device
Run Code Online (Sandbox Code Playgroud)

--

Frequencies:
            * 5180 MHz [36] (22.0 dBm)
            * 5200 MHz [40] (22.0 dBm)
            * 5220 MHz [44] (22.0 dBm)
            * 5240 MHz [48] (22.0 dBm)
            * 5260 MHz [52] (22.0 dBm) (no IR, radar detection)
            * 5280 MHz [56] (22.0 dBm) (no IR, radar detection)
            * 5300 MHz [60] (22.0 dBm) (no IR, radar detection)
            * 5320 MHz [64] (22.0 dBm) (no IR, radar detection)
            * 5340 MHz [68] (disabled)
            * 5360 MHz [72] (disabled)
            * 5380 MHz [76] (disabled)
            * 5400 MHz [80] (disabled)
            * 5420 MHz [84] (disabled)
            * 5440 MHz [88] (disabled)
            * 5460 MHz [92] (disabled)
            * 5480 MHz [96] (disabled)
            * 5500 MHz [100] (22.0 dBm) (no IR, radar detection)
            * 5520 MHz [104] (22.0 dBm) (no IR, radar detection)
            * 5540 MHz [108] (22.0 dBm) (no IR, radar detection)
            * 5560 MHz [112] (22.0 dBm) (no IR, radar detection)
            * 5580 MHz [116] (22.0 dBm) (no IR, radar detection)
            * 5600 MHz [120] (22.0 dBm) (no IR, radar detection)
            * 5620 MHz [124] (22.0 dBm) (no IR, radar detection)
            * 5640 MHz [128] (22.0 dBm) (no IR, radar detection)
            * 5660 MHz [132] (22.0 dBm) (no IR, radar detection)
            * 5680 MHz [136] (22.0 dBm) (no IR, radar detection)
            * 5700 MHz [140] (22.0 dBm) (no IR, radar detection)
            * 5720 MHz [144] (22.0 dBm) (no IR, radar detection)
            * 5745 MHz [149] (22.0 dBm)
            * 5765 MHz [153] (22.0 dBm)
            * 5785 MHz [157] (22.0 dBm)
            * 5805 MHz [161] (22.0 dBm)
            * 5825 MHz [165] (22.0 dBm)
            * 5845 MHz [169] (disabled)
            * 5865 MHz [173] (disabled)
            * 5885 MHz [177] (disabled)
            * 5905 MHz [181] (disabled)
Run Code Online (Sandbox Code Playgroud)

我已使用 iw reg set US 将国家/地区代码设置为 US,iw reg get 的输出:

global
country US: DFS-FCC
    (2400 - 2472 @ 40), (N/A, 30), (N/A)
    (5150 - 5250 @ 80), (N/A, 23), (N/A), AUTO-BW
    (5250 - 5350 @ 80), (N/A, 23), (0 ms), DFS, AUTO-BW
    (5470 - 5730 @ 160), (N/A, 23), (0 ms), DFS
    (5730 - 5850 @ 80), (N/A, 30), (N/A)
    (57240 - 71000 @ 2160), (N/A, 40), (N/A)

phy#0 (self-managed)
country US: DFS-UNSET
    (2402 - 2437 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS, NO-80MHZ, NO-160MHZ
    (2422 - 2462 @ 40), (6, 22), (N/A), AUTO-BW, NO-80MHZ, NO-160MHZ
    (2447 - 2482 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-80MHZ, NO-160MHZ
    (5170 - 5190 @ 160), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS
    (5190 - 5210 @ 160), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS
    (5210 - 5230 @ 160), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS
    (5230 - 5250 @ 160), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS
    (5250 - 5270 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, PASSIVE-SCAN
    (5270 - 5290 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, PASSIVE-SCAN
    (5290 - 5310 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, PASSIVE-SCAN
    (5310 - 5330 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, PASSIVE-SCAN
    (5490 - 5510 @ 240), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, PASSIVE-SCAN
    (5510 - 5530 @ 240), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, PASSIVE-SCAN
    (5530 - 5550 @ 240), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, PASSIVE-SCAN
    (5550 - 5570 @ 240), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, PASSIVE-SCAN
    (5570 - 5590 @ 240), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, PASSIVE-SCAN
    (5590 - 5610 @ 240), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, PASSIVE-SCAN
    (5610 - 5630 @ 240), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, PASSIVE-SCAN
    (5630 - 5650 @ 240), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, PASSIVE-SCAN
    (5650 - 5670 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-160MHZ, PASSIVE-SCAN
    (5670 - 5690 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5690 - 5710 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-160MHZ, PASSIVE-SCAN
    (5710 - 5730 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5735 - 5755 @ 80), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS, NO-160MHZ
    (5755 - 5775 @ 80), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-160MHZ
    (5775 - 5795 @ 80), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS, NO-160MHZ
    (5795 - 5815 @ 80), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-160MHZ
    (5815 - 5835 @ 20), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS, NO-HT40PLUS, NO-80MHZ, NO-160MHZ
Run Code Online (Sandbox Code Playgroud)

有一段时间,通道 36、40、44、48、149、153、157、161 和 165 都显示为“无红外”标记,这意味着您无法启动辐射。在此通道之外创建一个接入点。他们一开始没有被标记为没有 IR,现在他们又没有被标记,我不确定到底发生了什么变化。

我的 hostapd.conf 文件:

ssid=ap_test
wpa_passphrase=123456789

country_code=US

interface=wlp0s20f3
driver=nl80211

wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

hw_mode=a
ieee80211n=1
require_ht=1
ieee80211ac=1
require_vht=1

channel=153
Run Code Online (Sandbox Code Playgroud)

当我尝试使用“hostapd hostapd.conf.test”运行 hostapd 时,我收到以下输出(以及所有其他 5GHz 通道的相同输出):

Configuration file: hostapd.conf.test
wlp0s20f3: interface state UNINITIALIZED->COUNTRY_UPDATE
Channel 153 (primary) not allowed for AP mode, flags: 0x20073 NO-IR
wlp0s20f3: IEEE 802.11 Configured channel (153) not found from the channel list of current mode (2) IEEE 802.11a
wlp0s20f3: IEEE 802.11 Hardware does not support configured channel
Could not select hw_mode and channel. (-3)
wlp0s20f3: interface state COUNTRY_UPDATE->DISABLED
wlp0s20f3: AP-DISABLED 
wlp0s20f3: Unable to setup interface.
wlp0s20f3: interface state DISABLED->DISABLED
wlp0s20f3: AP-DISABLED 
wlp0s20f3: CTRL-EVENT-TERMINATING 
hostapd_free_hapd_data: Interface wlp0s20f3 wasn't started
nl80211: deinit ifname=wlp0s20f3 disabled_11b_rates=0
Run Code Online (Sandbox Code Playgroud)

我尝试利用 DFS 来利用 DFS(雷达检测)通道,但它也不起作用(而且 DFS 甚至可能无法用于我的目的):

Configuration file: hostapd.conf
wlp0s20f3: interface state UNINITIALIZED->COUNTRY_UPDATE
wlp0s20f3: interface state COUNTRY_UPDATE->DFS
wlp0s20f3: DFS-CAC-START freq=5720 chan=144 sec_chan=0, width=0, seg0=0, seg1=0, cac_time=60s
DFS start_dfs_cac() failed, -1
Interface initialization failed
wlp0s20f3: interface state DFS->DISABLED
wlp0s20f3: AP-DISABLED 
wlp0s20f3: Unable to setup interface.
wlp0s20f3: interface state DISABLED->DISABLED
wlp0s20f3: AP-DISABLED 
wlp0s20f3: CTRL-EVENT-TERMINATING 
hostapd_free_hapd_data: Interface wlp0s20f3 wasn't started
nl80211: deinit ifname=wlp0s20f3 disabled_11b_rates=0
Run Code Online (Sandbox Code Playgroud)

据我所知,我应该能够使用未标记为 no-IR 的通道,但在尝试使用这些通道时,它仍然给我带来 no-ir 标记错误。它们是否在我这边被错误地标记或者实际上不允许使用?

据我了解,这可能是 Linux 固件的限制,我需要修补我的内核才能让它按照我想要的方式工作。只是希望对这个问题有更多的了解。我完全不知所措,正在寻找这方面的任何方向。

更新:iw list 现在再次将频道显示为 no-ir。同样,不知道是什么改变导致这种情况发生:

Frequencies:
            * 5180 MHz [36] (22.0 dBm) (no IR)
            * 5200 MHz [40] (22.0 dBm) (no IR)
            * 5220 MHz [44] (22.0 dBm) (no IR)
            * 5240 MHz [48] (22.0 dBm) (no IR)
            * 5260 MHz [52] (22.0 dBm) (no IR, radar detection)
            * 5280 MHz [56] (22.0 dBm) (no IR, radar detection)
            * 5300 MHz [60] (22.0 dBm) (no IR, radar detection)
            * 5320 MHz [64] (22.0 dBm) (no IR, radar detection)
            * 5340 MHz [68] (disabled)
            * 5360 MHz [72] (disabled)
            * 5380 MHz [76] (disabled)
            * 5400 MHz [80] (disabled)
            * 5420 MHz [84] (disabled)
            * 5440 MHz [88] (disabled)
            * 5460 MHz [92] (disabled)
            * 5480 MHz [96] (disabled)
            * 5500 MHz [100] (22.0 dBm) (no IR, radar detection)
            * 5520 MHz [104] (22.0 dBm) (no IR, radar detection)
            * 5540 MHz [108] (22.0 dBm) (no IR, radar detection)
            * 5560 MHz [112] (22.0 dBm) (no IR, radar detection)
            * 5580 MHz [116] (22.0 dBm) (no IR, radar detection)
            * 5600 MHz [120] (22.0 dBm) (no IR, radar detection)
            * 5620 MHz [124] (22.0 dBm) (no IR, radar detection)
            * 5640 MHz [128] (22.0 dBm) (no IR, radar detection)
            * 5660 MHz [132] (22.0 dBm) (no IR, radar detection)
            * 5680 MHz [136] (22.0 dBm) (no IR, radar detection)
            * 5700 MHz [140] (22.0 dBm) (no IR, radar detection)
            * 5720 MHz [144] (22.0 dBm) (no IR, radar detection)
            * 5745 MHz [149] (22.0 dBm) (no IR)
            * 5765 MHz [153] (22.0 dBm) (no IR)
            * 5785 MHz [157] (22.0 dBm) (no IR)
            * 5805 MHz [161] (22.0 dBm) (no IR)
            * 5825 MHz [165] (22.0 dBm) (no IR)
            * 5845 MHz [169] (disabled)
            * 5865 MHz [173] (disabled)
            * 5885 MHz [177] (disabled)
            * 5905 MHz [181] (disabled)
Run Code Online (Sandbox Code Playgroud)

net*_*ras 1

是时候添加另一个标签了:“intel”。

TL;博士; 很可能它不会起作用。您将无法使用您的(或任何)英特尔 WiFi 适配器来创建 5GHz AP。

自 2020 年年底以来,我一直在努力解决类似的问题。iw reg set应该完成这项工作,但除了“全局”部分之外,它没有改变任何内容。我最终使用了带有 RTL 芯片组的 USB 适配器。

最近我购买了另一台迷你 PC,并开始构建另一台 Linux 路由器。它预装了英特尔无线网卡。它也失败了 - 我得到了iw phy与你相同的输出(5GHz 频率)。由于我不确定自己在读什么,我试图找出输出的每一行,试图弄清楚为什么它不起作用。我什至将其发布为帖子。不幸的是,它对我没有多大帮助。

然后我发现一个 SO 问题提到了一些关于modprobe iwlwifi lar_disable=1. 我也这么做了,但是没有效果。

事实证明,英特尔在 2019 年 EOY 中取消了该标志,以下是提交:f06021a

现在解释一下。

  • 观察:Intel wifi 卡似乎将区域设置保留在其 ROM 中(一些用户声称 Linux 5GHz AP 在双引导系统中收到 Windows 驱动程序更新后停止工作)。
  • 事实:Intel wifi 驱动程序使用 LRA 自动检测区域(国家)并在卡的固件中对其进行设置(以及相应的注册限制)。这是你的输出中自我管理的iw reg get部分。
  • 事实:LAR(位置感知监管)监听周围 WiFi 设备发送的信标,简单地说,尝试模仿其区域设置(国家代码)
  • 事实:这种自动化通常不起作用,WiFi 卡会进入全球模式(国家代码 00)(如我的情况)或误解区域信息并将其设置为不相关的信息(如您的情况)
  • 事实:self_management位还意味着您干预自动化机制的能力有限。
  • 事实:Linux 用户过去常常通过在驱动程序级别禁用此 LAR 来绕过此 LAR 的不当行为:modprobe -r iwlwifi; modprobe iwlwifi lar_disable=1; iw reg set <CountryCode>
  • 事实:lar_disable司机的旗帜已被移除
  • 事实(?):英特尔并不正式支持其 WiFi 卡在 5GHz 频段的 AP 模式下使用
  • 假设:这可以解释为什么一些用户看到不一致的区域设置:iwlwifi 选择邻居的路由器广播配置错误的区域信息。如果用户的邻居拥有来自世界各地的设备,iwlwifi 有时可能会认为它在德国,有时 - 在中国或印度尼西亚,有时 - 美国等等。

看来英特尔对 Linux 用户动了一根手指,我们对此没有发言权。有很多英特尔社区线程打开了regd。互联网上有很多类似的帖子(bugzilla、SO/SE、reddit 等),而英特尔只是隐藏在“请联系您的计算机制造商”的幕后。

如果您购买了新的 wifi 卡并且它从未/永远不会被 Windows 驱动程序触及,那么它起作用的可能性非常小。然而,这只是基于其他用户的经验的假设,而不是事实。

因此,或多或少可以肯定地说,Linux + Intel WiFi ( iwlwifi) + 5GHz AP 将不再工作,除非出现一些不太可能发生的意外,LAR 能够正常运行


编辑

我刚刚在家里运行了 airodump-ng 扫描,以查看周围所有 WIFI AP 正在广播的信标

# airodump-ng --beacons wlp58s0mon --manufacturer --uptime --band a -w /tmp/wifi_dump_5GHz.pcap
# airodump-ng --beacons wlp58s0mon --manufacturer --uptime -w /tmp/wifi_dump2.pcap
Run Code Online (Sandbox Code Playgroud)

事实证明,其中一些(大多数)不广播任何国家代码,其中一些广播 DE(Netgear 中继器),一些 - CN(小米),一些 - US(IDK,DLink?)。它们都没有设置为 LT(它们正在使用的国家/地区)。我拥有所有这些,并且无法更改监管设置(国家/地区代码)。所以你不必被外国人包围才会对LAR感到困惑。你只需要被国外的WiFi硬件包围......