跳转至内容

软件接入点

来自 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 年以来,大多数 Intel 设备在 5 GHz 频段将不再提供 AP 服务,因为固件会在 AP 模式下错误地启用位置感知监管 (LAR) 功能。请参阅 #无法在 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 接口类型可能更受青睐,因为有些网卡不支持两个托管接口。(在 Talk:Software access point#Two interfaces on same card 中讨论)

如果您想使用该功能/特性,可能是因为以太网连接不可用,您需要为使用它创建两个独立的虚拟接口。物理设备 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 链路通过 hostapd 包建立,该包支持 WPA2。

提示 尽管 iwd 也能设置接入点,但 hostapd 提供了比 iwd 多得多的选项,包括功能选项。使用 iwd 可能会导致性能限制,例如操作可能仅限于 802.11n,带宽限制为 20MHz。

hostapd 自带一个默认配置文件,其中包含许多列出的选项和相应的描述,您可以参考以获取一些基本知识。

必要时调整 hostapd 配置文件中的选项。特别是,更改 ssidwpa_passphrase。可以为最新的 Wi-Fi 5 和 Wi-Fi 6 适配器启用 ieee80211acieee80211axht_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#Ignore specific devices

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

网络配置

实现此目的有两种基本方法:

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

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

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

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

桥接设置

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

请参阅 Network bridge

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

NAT 设置

有关配置详细信息,请参阅 Internet sharing#Configuration

在该文章中,连接到 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#Using Network Manager icon 中讨论)

nm-connection-editor

安装 dnsmasq 包才能实际共享连接。请注意,NetworkManager 会启动自己的 dnsmasq 实例作为 DHCP 服务器,独立于 dnsmasq.service

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

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

故障排除

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”(不启动辐射)标志,这将阻止 hostapd 使用它们。您需要安装 wireless-regdb 并设置您的国家代码,才能使您所在国家/地区允许的频率可用于 hostapd。

请注意,最近的 Intel 设备具有位置感知监管 (LAR) 功能,该功能会忽略用户空间监管数据库,而是通过监听附近的其他接入点来推断监管区域。这意味着设备在看到 5 GHz 频段上的其他接入点之前不会在任何 5 GHz 频率上进行传输,在许多情况下会完全阻止任何 5 GHz 传输。旧内核有一个禁用此功能的选项,该选项在 2019 年被移除,因为它会导致固件崩溃。自从移除该选项以来,支持 LAR 的 Intel 网卡已无法在 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

这意味着您的 Wi-Fi 设备检测到附近有太多接入点。 然后它拒绝使用超过 20MHz 的信道宽度,以便更公平地共享无线频谱。您可能可以通过 noscan=1 来禁用它,但这可能很可能违反当地监管要求

参见