软件接入点

来自 Arch Linux 中文维基

软接入点(也称为虚拟路由器或虚拟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 无线网卡上不再能支持 5GHz 频段的 AP 服务,原因是固件错误地将位置感知监管(LAR)功能保留为启用状态,即使在 AP 模式下也是如此,但根据 报告,可以通过一个特殊的 hostapd 补丁让它工作。请同时参考 #无法在 5Ghz 频段启用热点模式

单个Wi-Fi设备同时作为无线客户端和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说明创建的热点必须和无线客户端连接处于同一信道。参见下文 hostapd.conf 示例中 channel 的设置。

如果有线连接不可用, 使用这个功能时需要分别创建两个“虚拟网络接口(virtual interface)”。可以通过如下方式为wlan0 创建负责网络连接的 wlan0_sta 和负责热点的 wlan0_ap。两个虚拟网卡具有不同的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

可以用 macchanger 创建随机 MAC 地址。

配置[编辑 | 编辑源代码]

接入点的设置包含两个主要部分:

  • 设置Wi-Fi链路层,这样无线客户端可以与电脑的“软件接入点”建立连接,从而同电脑进行通信。
  • 配置电脑上的网络, 使电脑可以在 Internet 和无线客户端之间有效地转发IP包。

无线链路层[编辑 | 编辑源代码]

我们使用支持WPA2的hostapd建立Wi-Fi链路。

hostapd所自带的默认配置文件中有很多选项列出,且均有相关描述,读者可以参考该配置文件以对各个选项有个大致的了解。

按实际需要调整hostapd配置文件中的内容。尤其是修改ssidwpa_passphrase。如果你的网卡支持WiFi5和WiFi6的话,启用ieee80211acieee80211axht_capab用于开启若干AP功能,其中包括对传输速度影响显著的频道宽度。 详情请参考 hostapd Linux 手册.

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

# 要在 IEEE 802.11 管理框架中使用的 SSID(即热点名)
ssid=YourWiFiName
# 驱动接口类型(hostap/wired/none/nl80211/bsd)
driver=nl80211
# 国家或地区代码(ISO/IEC 3166-1)
country_code=US

# 工作模式 (a = IEEE 802.11a (5 GHz), b = IEEE 802.11b (2.4 GHz)
hw_mode=g
# 使用信道
channel=7
# 允许最大连接数
max_num_sta=5

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

# 加密协议;禁用不安全的 TKIP
wpa_pairwise=CCMP
# 加密算法
wpa_key_mgmt=WPA-PSK
wpa_passphrase=Somepassphrase

# hostapd日志设置
logger_stdout=-1
logger_stdout_level=2

## 启用802.11n支持
#ieee80211n=1
## 启用802.11ac支持
#ieee80211ac=1
## 启用802.11ax支持
#ieee80211ax=1
## QoS 支持
#wmm_enabled=1
## 请使用“iw list”查看设备信息并相应地修改ht_capab和vht_capab
#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]
提示:虽然iwd也可以用来开启无线AP,但相比之下更建议使用hostapd,因为hostapd有更多的选项可用,包括影响性能的选项。使用iwd可能会造成性能限制,比如AP可能会被限制在802.11n或频宽被限制在20MHz。
提示:使用UTF-8字符的SSID可以正常显示国际化的字符。配置文件中设置utf8_ssid=1可以启用这个功能。但是一些客户端可能无法正确识别编码(例如wpa_supplicant和windows 7)。

如果想开机自启hostapd启用hostapd.service

如果开机时会自启hostapd,请确认无线网络接口已经率先启动(bring up),否则 hostapd 会启动失败。为了确保无线接口已就绪,编辑单元配置文件,绑定(BindTo)你的网络接口并在其后(After)启动:

/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#忽略特定设备

警告: 不同地区允许作为接入点的无线信道是不同的。由于无线设备的固件设计,你应当设置正确的地区来使用合法的信道。 不要选择非本地区域,这可能会非法扰乱网络通讯, 在信号覆盖范围内影响你和他人设备的无线功能!区域信道参见Wireless network configuration#Respecting the regulatory domain.
注意: 如果你有一个基于RTL8192CU芯片组的网卡, 请从AUR中安装hostapd-rtl871xdrvAUR并在hostapd.conf 文件中将driver=nl80211 替换为 driver=rtl871xdrv

网络配置[编辑 | 编辑源代码]

有两种基本的实现方法:

  1. 网桥: 在电脑上搭一个网桥,无线客户端就可以像电脑一样访问同一个网络接口和同一个子网。
  2. NAT: 通过 IP 转发/伪装和 DHCP 服务,无线客户端会专门使用一个子网, 数据进出这个子网是被网络地址转换的(NAT-ted)——就像是连接在你数字用户回路(DSL)或铜轴线(Cabel)调制解调器上的一个普通的无线路由器一样。

使用网桥方式会更加简单, 但它要求无线客户端所需要的任何服务(例如 DHCP)在你电脑的外部接口上是可用的。因此如果你使用拨号连接(如,通过PPPoE或3G调制解调器)或你在使用铜轴线调制解调器,它会通过DHCP提供一个固定的IP地址, 在这种状态下桥接将不能正常工作。

使用NAT方式会更加灵活, NAT把Wi-Fi客户端和你的电脑清晰地分离开来并且对外界完全透明。 对于任何种类的网络连接它都适用,而且(如果必要的话)你可以使用iptables的方式来控制进出策略。

当然,将两者结合物也是可能的,比方说:某个拥有一个静态IP的网桥既包含以太网设备又有无线设备,同时提供DHCP服务,又能够配置NAT将数据转发到另外一个连接了 WAN 的网络设备。

网桥设置[编辑 | 编辑源代码]

创建一个网桥并把网络接口 (如 eth0) 加入其中 。不要将无线网络接口(如wlan0)添加到网桥;hostapd 会自行添加无线设备。 详情请参阅 Network bridge

提示:如果已经有网桥(例如,虚拟机使用的)则可以复用使用该网桥。

NAT设置[编辑 | 编辑源代码]

详细内容请参考Internet sharing,在其中连接 LAN 的设备是 net0。这里我们通常指的是无线设备,比如说 wlan0

工具[编辑 | 编辑源代码]

linux-wifi-hotspot[编辑 | 编辑源代码]

linux-wifi-hotspotAUR软件包中的脚本可以创建桥接或NAT方式的接入点。它综合使用hostapddnsmasqiptables使得接入点运作良好。该软件可以通过命令行或图形界面使用。创建一个简单的NAT方式的接入点可以执行:

# create_ap wlan0 eth0 MyAccessPoint MyPassPhrase

或者可以根据需求修改/etc/create_ap.conf配置文件,并指定使用该配置。

# create_ap --config /etc/create_ap.conf

或者使用图形界面,运行:

# wihotspot

Enablestart create_ap.service会使用/etc/create_ap.conf中指定的配置在启动时运行脚本。 详细信息,参见linux-wifi-hotspot的GitHub页面

注意: 在桥接模式下,“create_ap” 可能在启动时与当前网络配置冲突。在这种情况下,请勿配置以太网接口的IP地址,也不要配置DHCP和statip IP,以便于绑定到网桥。

RADIUS[编辑 | 编辑源代码]

可以参阅这篇博客的说明来运行WPA2企业级加密FreeRADIUS 服务。

这篇文章的某些内容需要扩充。

原因: 似乎只用NetworkManager也可以轻易创建接入点。 (在 Talk:软件接入点 中讨论)

常见问题与解答[编辑 | 编辑源代码]

无线局域网很慢[编辑 | 编辑源代码]

一般情况下可以尝试以下情况:

  • 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>

无法在 5Ghz 频段启用热点模式[编辑 | 编辑源代码]

对某些国家码,例如 00(全球),所有 5 Ghz 中可使用的频段都被设置了 no-ir (no-initiating-radiation) 标记,hostapd 无法使用它们。需要安装 wireless-regdb,并设置国家码,使 hostapd 可以使用你的国家所允许的频段。

相关文章[编辑 | 编辑源代码]