软件接入点

出自 ArchWiki
(重定向自 Hostapd

软件接入点,也称为虚拟路由器或虚拟 Wi-Fi,使计算机能够将其无线接口变成 Wi-Fi 接入点。 它省去了购买单独的无线路由器的麻烦。

要求

Wi-Fi 设备必须支持 AP 模式

您需要一个 nl80211 兼容 的无线设备,该设备支持 AP 无线模式。 这可以通过运行 iw list 命令来验证,在 Supported interface modes 块下应列出 AP

$ iw list
Wiphy phy1
...
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * AP/VLAN
		 * WDS
		 * monitor
		 * mesh point
...
注意: 自 2019 年以来,由于固件错误地启用了位置感知监管 (LAR) 功能,即使在 AP 模式下,大多数英特尔设备将不再在 5 GHz 频段上提供 AP 服务。 请参阅 #无法在 5 GHz 频段启动 AP 模式

使用单个 Wi-Fi 设备作为无线客户端和软件 AP

创建软件 AP 与您自己的网络连接(以太网、无线等)无关。 许多无线设备甚至支持同时作为 AP 和无线“客户端”运行。 使用此功能,您可以使用单个无线设备创建一个充当现有网络的“无线中继器”的软件 AP。 该功能在 iw list 输出的以下部分中列出

$ iw list
Wiphy phy1
...
        valid interface combinations:
                 * #{ managed } <= 2048, #{ AP, mesh point } <= 8, #{ P2P-client, P2P-GO } <= 1,
                   total <= 2048, #channels <= 1, STA/AP BI must match
...

约束 #channels <= 1 意味着您的软件 AP 必须与您的 Wi-Fi 客户端连接在同一通道上运行; 请参阅下面的 hostapd.conf 中的 channel 设置。

本文或本节的事实准确性存在争议。

原因: 只需要一个额外的虚拟接口(用于 AP); 此外,__ap 接口类型可能是首选,因为某些网卡不支持两个 managed 接口。 (在 Talk:Software access point#同一网卡上的两个接口 中讨论)

如果您想使用此功能/特性,可能是因为以太网连接不可用,则需要创建两个单独的虚拟接口才能使用它。 可以为物理设备 wlan0 创建虚拟接口,如下所示:为网络连接 (wlan0_sta) 本身和软件 AP/hostapd “无线中继器”创建具有唯一 MAC 地址的虚拟接口

# iw dev wlan0 interface add wlan0_sta type managed addr 12:34:56:78:ab:cd  
# iw dev wlan0 interface add wlan0_ap  type managed addr 12:34:56:78:ab:ce

可以使用 systemd.netdev(5) 使这些接口持久化,如 BBS#236923 中所述。 或者,如果未使用 systemd-networkd,则可以创建 systemd 单元文件

/etc/systemd/system/create-virtual-interface.service
[Unit]
Description=Create virtual wireless interface
Requires=sys-subsystem-net-devices-wlan0.device
After=network.target
After=sys-subsystem-net-devices-wlan0.device
[Service]
Type=oneshot
ExecStart=/usr/bin/iw dev wlan0 interface add wlan0_ap type managed addr "12:34:56:78:ab:ce"
[Install]
WantedBy=multi-user.target

可以使用 macchanger 生成随机 MAC 地址。

配置

设置接入点包括两个主要部分

  1. 设置 Wi-Fi 链路层,以便无线客户端可以关联到您计算机的软件接入点并与之交换 IP 数据包。
  2. 在您的计算机上设置网络配置,以便它正确地在其自身的互联网连接和无线客户端之间中继 IP 数据包。

Wi-Fi 链路层

实际的 Wi-Fi 链路是通过 hostapd 软件包建立的,该软件包具有 WPA2 支持。

提示: 虽然 iwd 也能够设置接入点,但 hostapdiwd 具有更多的可用选项,包括功能选项。 使用 iwd 可能会导致性能限制,例如,操作可能会限制为 802.11n,带宽限制为 20MHz。

hostapd 附带一个默认配置文件,其中包含列出的众多选项和相应的描述,您可能需要查看一下以收集一些基本知识。

如有必要,调整 hostapd 配置文件中的选项。 特别是,更改 ssidwpa_passphrase。 可以为最新的 WiFi5 和 WiFi6 适配器启用 ieee80211acieee80211ax。 选项 ht_capab 影响您的 AP 的功能,包括通道宽度,这对于传输速度很重要。

有关更多信息,请参阅 hostapd Linux 文档页面

/etc/hostapd/hostapd.conf
interface=wlan0_ap
bridge=br0

# SSID to be used in IEEE 802.11 management frames
ssid=YourWiFiName
# Driver interface type (hostap/wired/none/nl80211/bsd)
driver=nl80211
# Country code (ISO/IEC 3166-1)
country_code=US

# Operation mode (a = IEEE 802.11a (5 GHz), b = IEEE 802.11b (2.4 GHz)
hw_mode=g
# Channel number
channel=7
# Maximum number of stations allowed
max_num_sta=5

# Bit field: bit0 = WPA, bit1 = WPA2
wpa=2
# Bit field: 1=wpa, 2=wep, 3=both
auth_algs=1

# Set of accepted cipher suites; disabling insecure TKIP
wpa_pairwise=CCMP
# Set of accepted key management algorithms
wpa_key_mgmt=WPA-PSK
wpa_passphrase=Somepassphrase

# hostapd event logger configuration
logger_stdout=-1
logger_stdout_level=2

## Enable 802.11n support
#ieee80211n=1
## Enable 802.11ac support
#ieee80211ac=1
## Enable 802.11ax support
#ieee80211ax=1
## QoS support
#wmm_enabled=1
## Use "iw list" to show device capabilities and modify ht_capab and vht_capab accordingly
#ht_capab=[HT40+][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40]
#vht_capab=[RXLDPC][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1]
提示: 您可以使用 UTF-8 字符设置 SSID,以便国际字符可以正确显示。 启用它的选项是 utf8_ssid=1。 某些客户端可能在识别正确的编码时遇到问题(例如 wpa_supplicant 或 Windows 7)。

要使 hostapd 在启动时自动启动,启用 hostapd.service

如果您在启动时启动 hostapd,请确保首先启动无线网络接口,否则将失败。 为了确保您的无线接口已准备就绪,编辑单元配置文件,并声明它绑定到您的网络接口并应在其之后启动

/etc/systemd/system/hostapd.service.d/override.conf
[Unit]
BindsTo=sys-subsystem-net-devices-wlan0.device
After=sys-subsystem-net-devices-wlan0.device

还要确保该接口不受其他网络管理器管理。 如果您正在使用 NetworkManager,请参阅 NetworkManager#忽略特定设备

警告: 允许接入点操作的无线信道因地理位置而异。 根据无线固件,您可能需要正确设置区域才能使用合法信道。 不要选择其他区域,因为您可能会非法干扰网络流量,影响您自己的设备及其范围内的其他设备的无线功能! 要设置区域,请参阅 无线网络配置#遵守法规域
注意: 如果您的网卡基于 RTL8192CU 芯片组,请安装 hostapd-rtl871xdrvAUR 并在 hostapd.conf 文件中将 driver=nl80211 替换为 driver=rtl871xdrv

网络配置

有两种基本方法可以实现这一点

  1. 桥接:在您的计算机上创建一个网络桥接,无线客户端将显示为访问与您的计算机使用的相同的网络接口和相同的子网。
  2. NAT:通过 IP 转发/伪装和 DHCP 服务,无线客户端将使用专用子网,来自/到该子网的数据将被 NAT 处理。 这类似于连接到互联网的普通 Wi-Fi 路由器。

桥接方法更简单,但它要求无线客户端所需的任何服务,特别是 DHCP,在计算机的外部接口上可用。 这意味着如果分配 IP 地址的外部调制解调器为不同的客户端提供相同的 IP 地址,则它将不起作用。

NAT 方法更通用,因为它清楚地将 Wi-Fi 客户端与您的计算机分开,并且对外部世界完全透明。 它适用于任何类型的网络连接,并且(如果需要)可以使用常用的 iptables 方法引入流量策略。

可以将这两种方法结合起来:例如,拥有一个桥接,其中包含以太网设备和具有静态 IP 的无线设备,提供 DHCP 并设置 NAT 以将流量中继到连接到 WAN 的附加网络设备。

桥接设置

您需要创建一个网络桥接并将您的网络接口(例如 eth0)添加到其中。 您不应将无线设备(例如 wlan0)添加到桥接; hostapd 会自行添加它。

请参阅 网络桥接

提示: 如果您有桥接(例如,虚拟机使用的),您可能希望重用现有的桥接。

NAT 设置

有关配置详细信息,请参阅 互联网共享#配置

在该文章中,连接到 LAN 的设备是 net0。 在本例中,该设备将是您的无线设备(例如 wlan0)。

工具

linux-wifi-hotspot

linux-wifi-hotspotAUR 软件包提供了一个脚本,可以为互联网共享创建桥接或 NAT 接入点。 它结合了 hostapddnsmasqiptables 以实现接入点的良好运行。 包括命令行和 GUI。 创建 NAT 虚拟网络的基本语法如下

# create_ap wlan0 eth0 MyAccessPoint MyPassPhrase

或者,可以根据需要调整 /etc/create_ap.conf 中提供的模板配置,并使用以下命令运行脚本

# create_ap --config /etc/create_ap.conf

要使用 GUI,请在终端中运行

# wihotspot

启用/启动 create_ap.service 以在启动时使用 /etc/create_ap.conf 中指定的配置运行脚本。

有关更多信息,请参阅 GitHub 上的 linux-wifi-hotspot

注意: 在桥接模式下,create_ap 可能会在启动时与当前网络配置冲突。 在这种情况下,不要配置以太网接口的 IP 地址,DHCP 或静态 IP 地址都不配置,以便于绑定到桥接。

RADIUS

有关说明,请参阅 FreeRADIUS wiki

本文或本节需要扩充。

原因: 似乎可以使用 Network Manager 轻松创建接入点。 (在 Talk:Software access point#使用 Network Manager 图标 中讨论)

nm-connection-editor

安装 dnsmasq 软件包以便实际共享连接。 请注意,NetworkManager 启动其自身的 dnsmasq 实例,独立于 dnsmasq.service,作为 DHCP 服务器。

无法使用 network-manager-applet 创建 热点

  • 打开 nm-connection-editor (从 network-manager-applet 的 nm-applet 应用程序菜单中打开“编辑连接”)
  • 单击右下角的“+”按钮,然后单击“WiFi”作为连接类型,然后按“创建...”按钮。
  • 在 WiFi 选项卡中,将模式更改为“热点”,并填写其余选项。

故障排除

WLAN 非常慢

吞吐量低于预期的常见原因包括

  • hw_mode 低于支持的模式的不正确的操作模式选择可能会人为地限制路由器。 检查是否选择了现代操作模式。
  • 拥挤或受噪声影响的 channel 可能会严重降低性能,尤其是在人口稠密的地区。 尝试更改为其他信道,甚至切换频率。

NetworkManager 正在干扰

如果设备由 NetworkManager 管理,则 hostapd 可能无法工作。 您可以使用 MAC 屏蔽设备

/etc/NetworkManager/conf.d/unmanaged.conf
[keyfile]
unmanaged-devices=mac:hwaddr

或接口名称

/etc/NetworkManager/conf.d/unmanaged.conf
[keyfile]
unmanaged-devices=interface-name:ifname

无法在 5 GHz 频段启动 AP 模式

显然,使用特殊的国家代码 00(全球),5Ghz 频段中的所有可用频率都将设置 no-ir (no-initiating-radiation) 标志,这将阻止 hostapd 使用它们。 您将需要安装 wireless-regdb 并设置您的国家代码,以使您所在国家/地区允许的频率可用于 hostapd。

请注意,最近的英特尔设备具有位置感知监管 (LAR) 功能,该功能忽略用户空间监管数据库,而是通过监听附近的其他接入点来推断监管区域。 这意味着这些设备在首次看到 5 GHz 频段上的其他接入点之前,不会在任何 5 GHz 频率上进行传输,在许多情况下完全阻止了 5 GHz 传输。 较旧的内核有一个选项可以禁用此功能,但在 2019 年 由于导致固件崩溃而被删除。 自删除以来,支持 LAR 的英特尔网卡无法再用作 5 GHz 频段中的接入点。

Windows 10+ 拒绝使用 WPA3 连接 hostapd

Windows 似乎拒绝连接到使用 hostapd 的 WPA3 接入点。 使用 wpa=2 而不是 wpa=3 可能会解决此问题

接入点不接受在 40Mhz 模式 (HT) 下运行

您可能会收到以下消息

20/40 MHz operation not permitted on channel pri=13 sec=9 based on overlapping BSSes

这意味着您的 WIFI 设备检测到太多附近的接入点。 然后,它拒绝使用超过 20Mhz 的信道宽度,以便更公平地共享无线频谱。 您也许可以使用 noscan=1 禁用它,但这可能可能违反当地法规要求

参见